VHDL例程代码.docx

上传人:b****9 文档编号:25480563 上传时间:2023-06-09 格式:DOCX 页数:196 大小:62.30KB
下载 相关 举报
VHDL例程代码.docx_第1页
第1页 / 共196页
VHDL例程代码.docx_第2页
第2页 / 共196页
VHDL例程代码.docx_第3页
第3页 / 共196页
VHDL例程代码.docx_第4页
第4页 / 共196页
VHDL例程代码.docx_第5页
第5页 / 共196页
点击查看更多>>
下载资源
资源描述

VHDL例程代码.docx

《VHDL例程代码.docx》由会员分享,可在线阅读,更多相关《VHDL例程代码.docx(196页珍藏版)》请在冰豆网上搜索。

VHDL例程代码.docx

VHDL例程代码

【例3-1】2选1多路选择器程序。

(P31)

LIBRARYIEEE;--IEEE库使用说明语句

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux21IS--实体说明部分

PORT(

a,b:

INSTD_LOGIC;

s:

INSTD_LOGIC;

y:

OUTSTD_LOGIC

);

ENDENTITYmux21;

ARCHITECTUREmux21aOFmux21IS--结构体说明部分

BEGIN

PROCESS(a,b,s)

BEGIN

IFs='0'THENy<=a;

ELSE

y<=b;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREmux21a;

【例3-2】有类属说明的2输入与非门的实体描述。

(P33)

ENTITYnand2IS

GENERIC(t_rise:

TIME:

=2ns;

t_fall:

TIME:

=1ns)

PORT(a:

INBIT;

b:

INBIT;

s:

OUTBIT);

ENDENTITYnand2;

【例3-3】n输入与非门的实体描述:

(P33)

ENTITYnand_nIS

GENERIC(n:

INTEGER);

PORT(a:

INSTD_LOGIC_VECTOR(n-1DOWNTO0);

s:

OUTSTD_LOGIC);

ENDENTITYnand_n;

例3-4】半加器的完整VHDL描述,其中x、y为加数与被加数,s为和信号,c为进位信号。

(P36)

ENTITYhalf_adderIS

PORT(x,y:

INBIT;

s:

INBIT;

c:

OUTBIT);

ENDENTITYhalf_adder;

ARCHITECTUREdataflowOFhalf_adderIS

BEGIN

s<=xXORy;

c<=xANDy;

ENDARCHITECTUREdataflow;

【例3-5】2选1多路选择器的行为描述程序。

(P37)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux21IS

PORT(

a,b:

INSTD_LOGIC;

s:

INSTD_LOGIC;

y:

OUTSTD_LOGIC

);

ENDENTITYmux21;

ARCHITECTUREbehavOFmux21IS

BEGIN

PROCESS(a,b,s)

BEGIN

IFs='0'THENy<=a;

ELSE

y<=b;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREbehav;

【例3-6】2选1多路选择器数据流描述程序。

(P36)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux21IS

PORT(

a,b:

INSTD_LOGIC;

s:

INSTD_LOGIC;

y:

OUTSTD_LOGIC

);

ENDENTITYmux21;

ARCHITECTUREdataflowOFmux21IS

BEGIN

y<=(aAND(NOTs))OR(bANDs);

ENDARCHITECTUREdataflow;

【例3-7】2选1多路选择器结构描述程序。

(P37)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYand21IS

PORT(i0,i1:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDENTITYand21;

ARCHITECTUREoneOFand21IS

BEGIN

q<=i0ANDi1;

ENDARCHITECTUREone;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYor21IS

PORT(i0,i1:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDENTITYor21;

ARCHITECTUREoneOFor21IS

BEGIN

q<=i0ORi1;

ENDARCHITECTUREone;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYinv21IS

PORT(i0:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDENTITYinv21;

ARCHITECTUREoneOFinv21IS

BEGIN

q<=(NOTi0);

ENDARCHITECTUREone;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux21IS

PORT(

a,b:

INSTD_LOGIC;

s:

INSTD_LOGIC;

y:

OUTSTD_LOGIC

);

ENDENTITYmux21;

ARCHITECTUREstructOFmux21IS

COMPONENTand21

PORT(i0,i1:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTor21

PORT(i0,i1:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTinv21

PORT(i0:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALtmp1,tmp2,tmp3:

STD_LOGIC;

BEGIN

u1:

and21PORTMAP(b,s,tmp1);

u2:

inv21PORTMAP(s,tmp2);

u3:

and21PORTMAP(a,tmp2,tmp3);

u4:

or21PORTMAP(tmp1,tmp3,y);

ENDARCHITECTUREstruct;

【例3-8】半加器的混合描述程序。

(P37)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYxor21IS

PORT(i0,i1:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDENTITYxor21;

ARCHITECTUREbehavOFxor21IS

BEGIN

q<=i0XORi1;

ENDARCHITECTUREbehav;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYhalf_adderIS

PORT(a,b:

INSTD_LOGIC;

c,s:

OUTSTD_LOGIC);

ENDENTITYhalf_adder;

ARCHITECTUREmixOFhalf_adderIS

COMPONENTxor21IS

PORT(i0,i1:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDCOMPONENT;

BEGIN

c<=aANDb;

u1:

xor21PORTMAP(a,b,s);

ENDARCHITECTUREmix;

【例3-9】打开一个字符文件,读出文件中的内容并关闭文件。

(P51)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYreadfileIS

PORT(cs:

INSTD_LOGIC;

c:

OUTCHARACTER);

ENDENTITYreadfile;

ARCHITECTUREread1OFreadfileIS

BEGIN

PROCESS(cs)

TYPEchar_fileISFILEOFCHARACTER;

FILEcfile:

char_file;

VARIABLEi:

INTEGER:

=0;

BEGIN

IF(cs='1')THEN

FILE_OPEN(cfile,"f:

/leifr/testfile.asc",READ_MODE);

WHILENOTENDFILE(cfile)LOOP

READ(cfile,c);

i:

=i+1;

ENDLOOP;

FILE_CLOSE(cfile);

ELSE

c<='-';

ENDIF;

ENDPROCESS;

ENDARCHITECTUREread1;

【例4-1】WAIT语句示例程序。

(P65)

cwait1:

PROCESS

BEGIN

y<=(aANDb)OR(mXORt);

z<=cNANDd;

WAIT;--无限等待

ENDPROCESScwait1;

【例4-2】WAITFOR语句示例程序。

(65)

cwait2:

PROCESS

BEGIN

y<=(aANDb)OR(mXORt);

z<=cNANDd;

WAITFOR10*(ct1+ct2);--等待由该表达式计算的时间

ENDPROCESScwait2;

【例4-3】WAITON语句示例程序(二选一选择器)。

(P66)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux2_1IS

PORT(data0,data1:

INSTD_LOGIC;

sel:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDmux2_1;

ARCHITECTUREbehavioralOFmux2_1IS

SIGNALtemp1,temp2,temp3:

STD_LOGIC;

BEGIN

cwait3:

PROCESS

BEGIN

temp1<=data0ANDsel;

temp2<=data1AND(NOTsel);

temp3<=temp1ORtemp2;

q<=temp3;

WAITONdata0,data1,q;

ENDPROCESScwait3;

ENDbehavioral;

【例4-4】WAITON语句和PROCESS语句中所使用的敏感信号列表的对比。

(P67)

ARCHITECTUREbehavioralOFmux2_1IS

SIGNALtemp1,temp2,temp3:

STD_LOGIC;

BEGIN

cwait4:

PROCESS(data0,data1,q)

BEGIN

temp1<=data0ANDsel;

temp2<=data1AND(NOTsel);

temp3<=temp1ORtemp2;

q<=temp3;

ENDPROCESScwait4;

ENDbehavioral;

【例4-5】WAITUNTIL语句示例程序。

(P67)

ARCHITECTUREbehavioralOFexample_waituntilIS

SIGNALtemp:

INTEGER;

BEGIN

cwait5:

PROCESS

BEGIN

WAITUNTIL((temp+5)>=20);--该表达式是布尔表达式

ENDPROCESScwait5;

ENDbehavioral;

【例4-6】多条件WAIT语句的示例程序。

(P68)

cwait6:

PROCESS

BEGIN

--多条件WAIT语句

WAITONdata0,data1,qUNTIL((temp+5)>=20)FOR34ns;

ENDPROCESScwait6;

【例4-7】信号代入语句示例程序。

(P68)

ARCHITECTUREbehavioralOFexample_dairuIS

SIGNALa,b,c,d,e,f:

STD_LOGIC;

SIGNALtemp0,temp1,temp2,temp3,temp4,temp5:

STD_LOGIC;

BEGIN

cdairu:

PROCESS

BEGIN

temp0<=aNANDb;--与非

temp1<=cNORd;--或非

temp2<=eXORfAFTER5ns;--异或门延迟

temp3<=(aNANDb)NOR(cNANDd);

temp4<=(cORd)NAND(eORf);

temp5<=aXORbXORcXORdXOReXORf;

ENDPROCESScdairu;

ENDbehavioral;

【例4-8】变量赋值语句示例程序。

(P69)

ARCHITECTUREbehavioralOFexample_fuzhiIS

CONSTANTcvolt:

REAL:

=3.3;--定义常数

CONSTANTccurrent:

REAL:

=4.0;

VARIABLEtemp0,temp1:

REAL;--定义变量

VARIABLEtemp2,temp3:

INTEGERRANGE0TO255:

=10;

VARIABLEtemp4:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEtemp5:

STD_LOGIC;

SIGNALa:

STD_LOGIC;--定义信号

SIGNALb:

REAL;

SIGNALc:

INTEGER;

SIGNALd:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

cfuzhi:

PROCESS

BEGIN

temp0:

=cvolt;--变量直接赋值

temp1:

=(cvolt+1.8)*ccurrent;--变量表达式赋值

temp2:

=c+78;

temp3:

=c/5;--此时c必须是5的倍数

temp4:

=d;

temp5:

=temp4

(2);

ENDPROCESScfuzhi;

ENDbehavioral;

【例4-9】变量赋值和信号量代入的对比示例程序。

(P69)

ARCHITECTUREbehavioralOFexample_duibiIS

SIGNALd0,d1,d2,d3:

STD_LOGIC;--定义信号

SIGNALq0,q1:

STD_LOGIC;

BEGIN

cduibi_1:

PROCESS(d0,d1,d2,d3)

BEGIN

d2<=d0;--信号量代入

q0<=d2ORd3;

d2<=d1;--信号量代入

q1<=d2ORd3;

ENDPROCESScduibi_1;

cduibi_2:

PROCESS(d0,d1,d3)

VARIABLEm2:

STD_LOGIC;

BEGIN

m2:

=d0;--变量赋值

q0<=m2ORd3;

m2:

=d1;--变量赋值

q1<=m2ORd3;

ENDPROCESScduibi_2;

ENDbehavioral;

进程cduibi_1的运行结果:

q0=d1ORd3并且q1=d1ORd3

进程cduibi_2的运行结果:

q0=d0ORd3而q1=d1ORd3

【例4-10】采用单IF语句来描述D触发器的示例程序。

(P71)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcdff1IS

PORT(d:

INSTD_LOGIC;

clk:

INSTD_LOGIC;

q:

OUTSTD_LOGIC;

qnot:

OUTSTD_LOGIC);

ENDcdff1;

ARCHITECTUREdataflowOFcdff1IS

BEGIN

cdff_example:

PROCESS(clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN--单IF语句

q<=d;

qnot<=NOTd;

ENDIF;

ENDPROCESScdff_example;

ENDdataflow;

【例4-11】采用二选择的IF语句来描述二选一选择器的示例程序。

(P72)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux2_2IS

PORT(a0,a1:

INBIT;

sel:

INBIT;

q:

OUTBIT);

ENDmux2_2;

ARCHITECTURErtlOFmux2_2IS

BEGIN

cmux2_2:

PROCESS(a0,a1,sel)

BEGIN

IF(sel='1')THEN--二选择的IF语句

q<=a0;

ELSE

q<=a1;

ENDIF;

ENDPROCESScmux2_2;

ENDrtl;

【例4-12】采用多选择的IF语句来描述4选1选择电路的示例程序。

(P73)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux4_1IS

PORT(a0,a1,a2,a3:

INSTD_LOGIC;

sel:

INSTD_LOGIC_VECTOR(1DOWNTO0);

q:

OUTSTD_LOGIC);

ENDmux4_1;

ARCHITECTURErtlOFmux4_1IS

BEGIN

cmux4_1:

PROCESS(a0,a1,a2,a3,sel)

BEGIN

IF(sel="00")THEN--多选择的IF语句

q<=a0;

ELSIF(sel="01")THEN

q<=a1;

ELSIF(sel="10")THEN

q<=a2;

ELSE

q<=a3;

ENDIF;

ENDPROCESScmux4_1;

ENDrtl;

【例4-13】采用IF语句嵌套结构的带复位端的四选一选择器的示例程序。

(P74)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux4_2IS

PORT(cdata:

INSTD_LOGIC_VECTOR(3DOWNTO0);

sel:

INSTD_LOGIC_VECTOR(1DOWNTO0);

creset:

INSTD_LOGIC;

q:

OUTSTD_LOGIC);

ENDmux4_2;

ARCHITECTURErtlOFmux4_2IS

BEGIN

cmux4_2:

PROCESS(cdata,sel,creset)

BEGIN

IF(creset='1')THEN

IF(sel="00")THEN--多选择的IF语句

q<=cdata(0);

ELSIF(sel="01")THEN

q<=cdata

(1);

ELSIF(sel="10")THEN

q<=cdata

(2);

ELSE

q<=cdata(3);

ENDIF;

ELSE

q<='0';

ENDIF;

ENDPROCESScmux4_2;

ENDrtl;

【例4-14】采用CASE语句来描述4选1选择器的示例程序。

(P76)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux4_3IS

PORT(cdata:

INSTD_LOGIC_VECTOR(3DOWNTO0);

sel:

INSTD_LOGIC_VECTOR(1DOWNTO0);

q:

OUTSTD_LOGIC);

ENDmux4_3;

ARCHITECTURErtl_mux4OFmux4_3IS

SIGNALtemp_sel:

INTEGERRANGE0TO3;

BEGIN

cmux4_3:

PROCESS(cdata,sel)

BEGIN

temp_sel<='0';

IF(sel(0)='1')THEN--选择控制信号的译码

temp_sel<=temp_sel+1;

ENDIF;

IF(sel

(1)='1')THEN--选择控制信号的译码

temp_sel<=temp_sel+2;

ENDIF;

--采用CASE语句描述四选一电路的选择控制信号

CASEtemp_selIS--CASE语句的控制表达式是temp_sel

WHEN0=>q<=cdata(0);

WHEN1=>q

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

当前位置:首页 > 考试认证 > 司法考试

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

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