完整word版VHDL语言实例Word文件下载.docx

上传人:b****5 文档编号:19861514 上传时间:2023-01-11 格式:DOCX 页数:9 大小:33.06KB
下载 相关 举报
完整word版VHDL语言实例Word文件下载.docx_第1页
第1页 / 共9页
完整word版VHDL语言实例Word文件下载.docx_第2页
第2页 / 共9页
完整word版VHDL语言实例Word文件下载.docx_第3页
第3页 / 共9页
完整word版VHDL语言实例Word文件下载.docx_第4页
第4页 / 共9页
完整word版VHDL语言实例Word文件下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

完整word版VHDL语言实例Word文件下载.docx

《完整word版VHDL语言实例Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整word版VHDL语言实例Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。

完整word版VHDL语言实例Word文件下载.docx

1111001"

when"

0001"

 

"

0100100"

0010"

 

0110000"

0011"

0011001"

0100"

0010010"

0101"

0000010"

0110"

1111000"

0111"

0000000"

1000"

0010000"

1001"

0001000"

1010"

0000011"

1011"

1000110"

1100"

0100001"

1101"

0000110"

1110"

0001110"

1111"

1000000"

whenothers;

ENDHEX2LED_arc;

例2:

设计一个八选一数据选择器

1)s是通道选择信号, 

d0,d1,d2,d3,d4,d5,d6,d7数据输入 

out1是数据输出

ENTITYselsIS

PORT(d0,d1,d2,d3,d4,d5,d6,d7:

INBIT;

s:

INTEGERRANGE0TO7;

out1:

OUTBIT);

ENDsels;

图例2(a) 

八选一数据选择器实体

ARCHITECTUREsels_arcOFselsIS

BEGIN

WITHsSELECT

out1<

=d0WHEN0,

d1WHEN1,

d2WHEN2,

d3WHEN3,

 d4WHEN4,

d5WHEN5,

d6WHEN6,

d7WHEN7;

ENDsels_arc;

2)A,B,C是通道选择信号, 

I0,I1,I2,I3,I4,I5,I6,I7数据输入 

Q是数据输出 

ENTITYmux8IS

PORT(I0,I1,I2,I3,I4,I5,I6,I7,A,B,C:

INstd_logic;

Q:

OUTstd_logic);

ENDmux8;

图例2(b) 

ARCHITECTUREmux8_arcOFmux8IS

SIGNALsel:

INTEGER;

Q<

=I0AFTER10nsWHENsel=0ELSE

I1AFTER10nsWHENsel=1ELSE

I2AFTER10nsWHENsel=2ELSE

I3AFTER10nsWHENsel=3ELSE

I4AFTER10nsWHENsel=4ELSE

I5AFTER10nsWHENsel=5ELSE

I6AFTER10nsWHENsel=6ELSE

I7AFTER10ns;

sel<

=0WHENA=‘0’ANDB=‘0’ANDC=‘0’ELSE

1WHENA=‘1’ANDB=‘0’ANDC=‘0’ELSE

2WHENA=‘0’ANDB=‘1’ANDC=‘0’ELSE

3WHENA=‘1’ANDB=‘1’ANDC=‘0’ELSE

4WHENA=‘0’ANDB=‘0’ANDC=‘1’ELSE

5WHENA=‘1’ANDB=‘0’ANDC=‘1’ELSE

6WHENA=‘0’ANDB=‘0’ANDC=‘1’ELSE

7;

ENDmux8_arc;

例3:

设计一D触发器

d是输入端,clk是时钟信号控制端,q是触发器的输出端。

其程序如下:

ENTITYregIS

PORT(d,clk:

q:

ENDreg;

图例3D触发器实体

ARCHITECTUREreg_arcOFregIS

BEGIN

PROCESS

WAITUNTILclk=‘1’;

q<

=d;

ENDPROCESS;

ENDreg_arc;

例4:

设计一基本RS触发器

r、s为触发器的输入信号,q、not_q为触发器的输出信号。

ENTITYRSFFIS

PORT(r,s:

q,not_q:

ENDRSFF;

图例4基本RS触发器实体

ARCHITECTURERSFF_arcOFRSFFIS

PROCESS(r,s)

VARIABLElast_state:

BIT:

=‘0’;

ASSERTNOT(r=‘1’ANDs=‘1’)

REPORT“BothrANDsequalto‘1’”

SEVERITYerror;

IFr=‘0’ANDs=‘0’THEN

last_state:

=last_state;

ELSIFr=‘1’ANDs=‘0’THEN

ELSE--r=‘0’ANDs=‘1’

=‘1’;

ENDIF;

=last_stateAFTER10ns;

not_q<

=NOT(last_state)AFTER20ns;

ENDRSFF_arc;

当r和s同时等于1时,触发器处于不定状态。

程序设计中设置了断言语句是为了判断r和s都等于1时,输出终端将显示报告“BothrANDsequalto‘1’”,同时终止模拟过程,并显示错误的严重error,以便设计者调试和修正模块程序。

从IF到ENDIF是条件语句,用到了可选项ELSIF和ELSE来判别RS触发器的其它三种情况。

IF语句后面是一赋值语句,将IF语句中赋值的中间变量lsat_state经10ns后送到q端。

图8-12是RS触发器的逻辑电路图。

例5:

设计一个带有异步清零、同步置数、使能控制的四位二进制计数器

ENTITYCOUNT2IS

PORT(A:

ININTEGERRANGE0TO3;

CLK:

INSTD_LOGIC;

CLR:

EN:

LD:

Cout:

OUTINTEGERRANGE0TO3

ENDCOUNT2;

图例5 

四位二进制计数器实体

ARCHITECTURECOUNT2_arcOFCOUNT2IS

SIGNAL 

SIG:

INTEGERRANGE0TO3;

PROCESS(CLK,CLR)

IFCLR='

0'

THEN

SIG<

=0;

ELSIF(CLK'

EVENTANDCLK='

1'

)THEN

IFLD='

=A;

ELSE

IFEN='

=SIG+1;

=SIG;

Cout<

ENDCOUNT2_arc

例6:

设计一个存储容量为28×

8的RAM。

CS为RAM的片选信号,WR为RAM的写信号,RD为RAM读信号,ADR:

八位地址信号,Din:

八位数据输入线,Dout为八位数据输出线。

libraryIEEE;

useIEEE.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityRAMis

port(WR:

inSTD_LOGIC;

RD:

ADR:

inSTD_LOGIC_VECTOR(7downto0);

CS:

Din:

Dout:

outSTD_LOGIC_VECTOR(7downto0)

endRAM;

图例6 

RAM实体

architectureRAM_archofRAMis

subtypewordisstd_logic_vector(7downto0);

typememoryisarray(0to15)ofword;

signaladr_in:

integerrange0to15;

signalsram:

memory;

begin

adr_in<

=conv_integer(ADR);

process(wr)begin

if(wr'

eventandwr='

)then

if(cs='

andwr='

sram(adr_in)<

=dinafter2ns;

endif;

endprocess;

process(rd,cs)begin

if(rd='

andcs='

dout<

=sram(adr_in)after3ns;

else

="

ZZZZZZZZ"

after4ns;

endRAM_arch;

例7:

利用枚举类型设计一个状态机,用灯的颜色代表相应的状态名。

ENTITYtraffic_lightIS

PORT(sensor,clock:

instd_logic;

red_light,green_light,yellow_light:

outstd_logic

endtraffic_light;

architectureabcoftraffic_lightis

typet_stateis(red,green,yellow);

signalpresent_state,next_state:

t_state;

begin

process(present_state,sensor)

casepresent_stateis

whengreen=>

next_state<

=yellow;

red_light<

='

;

green_light<

yellow_light<

whenred=>

if(sensor='

=green;

=red;

whenyellow=>

endcase;

process

waituntilclock'

eventandclock='

present_state<

=next_state;

endabc;

该状态机由两个进程描述,第一计算下一个状态逻辑,第二个锁存下一个状态到当前状态。

例8:

用VHDL设计一家用告警系统的控制逻辑,告警系统有来自传感器的三个输入信号smoke、door、water和准备传输到告警设备的三个输出触发信号fire_alarm、burg_alarm、water_alarm以及使能信号en和alarm_en。

VHDL程序描述如下:

ENTITYalarmIS

PORT(smoke,door,water:

en,alarm_en:

fire_alarm,burg_alarm:

OUTstd_logic;

water_alarm:

ENDalarm;

图例8 

家用告警系统的控制逻辑电路图

ARCHITECTUREalarm_arcOFalarmIS

PROCESS(smoke,door,water,en,alarm_en)

IF((smoke=‘1’)AND(en=‘0’))THEN

fire_alarm<

IF((door=‘1’)AND((en=‘0’)AND(alarm_en=‘0’)))THEN

burg_alarm<

IF((water=‘1’)AND(en=‘0’))THEN

water_alarm<

ENDalarm_arc;

程序中用了三个分开的IF语句描述其功能,它们都没有ELSIF关键字,可以看出每个IF语句描述了一个输出端口。

第一个IF语句是检测有没有烟雾报警情况,有烟雾火警灾情发生立即产生报警信号,触发fire_alarm。

第二和第三IF语句检测不同的报警信号,和第一句相仿。

此模块的输入端口有两个使能信号,en使所有的输入都能到达输出,而用alarm_en端口,只对防盗告警系统使能。

需要指出的是这种功能很容易用逻辑方程描述,如前面的并行行为程序的例子。

但是有时IF语句的形式是更可读、更容易理解。

图8-11给出了报警控制逻辑电路图。

返回

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1