EDA 技术实用教程VHDL设计初步7复习课程

上传人:youn****329 文档编号:136918952 上传时间:2020-07-03 格式:PPT 页数:59 大小:404KB
返回 下载 相关 举报
EDA 技术实用教程VHDL设计初步7复习课程_第1页
第1页 / 共59页
EDA 技术实用教程VHDL设计初步7复习课程_第2页
第2页 / 共59页
EDA 技术实用教程VHDL设计初步7复习课程_第3页
第3页 / 共59页
EDA 技术实用教程VHDL设计初步7复习课程_第4页
第4页 / 共59页
EDA 技术实用教程VHDL设计初步7复习课程_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《EDA 技术实用教程VHDL设计初步7复习课程》由会员分享,可在线阅读,更多相关《EDA 技术实用教程VHDL设计初步7复习课程(59页珍藏版)》请在金锄头文库上搜索。

1、EDA技术实用教程,第10章VHDL基本语句,10.1顺序语句,10.1.1赋值语句,信号赋值语句,变量赋值语句,10.1.2IF语句,【例10-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41ISPORT(s4,s3,s2,s1:INSTD_LOGIC;z4,z3,z2,z1:OUTSTD_LOGIC);ENDmux41;ARCHITECTUREactivOFmux41ISSIGNALsel:INTEGERRANGE0TO15;BEGINPROCESS(sel,s4,s3,s2,s1)BEGINselz1z2z3z4=1;-当sel为8

2、15中任一值时选中ENDCASE;ENDPROCESS;ENDactiv;,【例10-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41gISPORT(s4,s3,s2,s1:INSTD_LOGIC;z4,z3,z2,z1:OUTSTD_LOGIC);ENDmux41g;ARCHITECTUREactivOFmux41gISBEGINPROCESS(s4,s3,s2,s1)VARIABLEsel:INTEGERRANGE0TO15;BEGINsel:=0;-输入初始值IF(s1=1)THENsel:=sel+1;ENDIF;IF(s2=1)

3、THENsel:=sel+2;ENDIF;IF(s3=1)THENsel:=sel+4;ENDIF;IF(s4=1)THENsel:=sel+8;ENDIF;z1z1z2z3z4=1;-当sel为815中任一值时选中ENDCASE;ENDPROCESS;ENDactiv;,【例10-3】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYaluISPORT(a,b:INSTD_LOGIC_VECTOR(7DOWNTO0);opcode:INSTD_LOGIC_VECTOR(1DOWNTO0);r

4、esult:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDalu;ARCHITECTUREbehaveOFaluISCONSTANTplus:STD_LOGIC_VECTOR(1DOWNTO0):=b00;CONSTANTminus:STD_LOGIC_VECTOR(1DOWNTO0):=b01;CONSTANTequal:STD_LOGIC_VECTOR(1DOWNTO0):=b10;CONSTANTnot_equal:STD_LOGIC_VECTOR(1DOWNTO0):=b11;BEGINPROCESS(opcode,a,b)BEGINCASEopcodeISWHEN

5、plus=resultresult-a、b相等IF(a=b)THENresult-a、b不相等IF(a/=b)THENresult=x01;ELSEresult=x00;ENDIF;ENDCASE;ENDPROCESS;ENDbehave;,10.1顺序语句,10.1.4LOOP语句,(1)单个LOOP语句,其语法格式如下:LOOP标号:LOOP顺序语句ENDLOOPLOOP标号;,.L2:LOOPa:=a+1;EXITL2WHENa10;-当a大于10时跳出循环ENDLOOPL2;.,10.1顺序语句,10.1.4LOOP语句,(2)FOR_LOOP语句,语法格式如下:LOOP标号:FOR循

6、环变量,IN循环次数范围LOOP顺序语句ENDLOOPLOOP标号;,10.1顺序语句,【例10-4】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYp_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDp_check;ARCHITECTUREoptOFp_checkISSIGNALtmp:STD_LOGIC;BEGINPROCESS(a)BEGINtmp=0;FORnIN0TO7LOOPtmp=tmpXORa(n);ENDLOOP;y=tmp;ENDPROCESS;ENDopt

7、;,10.1顺序语句,10.1.4LOOP语句,【例10-5】SIGNALa,b,c:STD_LOGIC_VECTOR(1TO3);.FORnIN1To3LOOPa(n)=b(n)ANDc(n);ENDLOOP;此段程序等效于顺序执行以下三个信号赋值操作:a(1)=b(1)ANDc(1);a(2)=b(2)ANDc(2);a(3)=b(3)ANDc(3);,10.1顺序语句,10.1.5NEXT语句,NEXT;-第一种语句格式NEXTLOOP标号;-第二种语句格式NEXTLOOP标号WHEN条件表达式;-第三种语句格式,【例10-6】.L1:FORcnt_valueIN1TO8LOOPs1:a

8、(cnt_value):=0;NEXTWHEN(b=c);s2:a(cnt_value+8):=0;ENDLOOPL1;,10.1顺序语句,10.1.5NEXT语句,【例10-7】.L_x:FORcnt_valueIN1TO8LOOPs1:a(cnt_value):=0;k:=0;L_y:LOOPs2:b(k):=0;NEXTL_xWHEN(ef);s3:b(k+8):=0;k:=k+1;NEXTLOOPL_y;NEXTLOOPL_x;.,10.1顺序语句,10.1.6EXIT语句,EXIT;-第一种语句格式EXITLOOP标号;-第二种语句格式EXITLOOP标号WHEN条件表达式;-第三种

9、语句格式,10.1顺序语句,10.1.6EXIT语句,【例10-8】SIGNALa,b:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALa_less_then_b:Boolean;.a_less_then_bbEXIT;ELSIF(a(i)=0ANDb(i)=1)THENa_less_then_b=TRUE;-abEXIT;ELSENULL;ENDIF;ENDLOOP;-当i=1时返回LOOP语句继续比较,10.1顺序语句,10.1.7WAIT语句,WAIT;-第一种语句格式WAITON信号表;-第二种语句格式WAITUNTIL条件表达式;-第三种语句格式WAITFOR时间表

10、达式;-第四种语句格式,超时等待语句,10.1顺序语句,10.1.7WAIT语句,【例10-9】SIGNALs1,s2:STD_LOGIC;.PROCESSBEGIN.WAITONs1,s2;ENDPROCESS;,【例10-10】(a)WAIT_UNTIL结构(b)WAIT_ON结构.LOOPWaituntilenable=1;Waitonenable;.EXITWHENenable=1;ENDLOOP;,10.1顺序语句,10.1.7WAIT语句,WAITUNTIL信号=Value;-(1)WAITUNTIL信号EVENTAND信号=Value;-(2)WAITUNTILNOT信号STAB

11、LEAND信号=Value;-(3),WAITUNTILclock=1;WAITUNTILrising_edge(clock);WAITUNTILNOTclockSTABLEANDclock=1;WAITUNTILclock=1ANDclockEVENT;,10.1顺序语句,10.1.7WAIT语句,【例10-11】PROCESSBEGINWAITUNTILclk=1;ave=a;WAITUNTILclk=1;ave=ave+a;WAITUNTILclk=1;ave=ave+a;WAITUNTILclk=1;ave=(ave+a)/4;ENDPROCESS;,10.1顺序语句,10.1.7WA

12、IT语句,【例10-12】PROCESSBEGINrst_loop:LOOPWAITUNTILclock=1ANDclockEVENT;-等待时钟信号NEXTrst_loopWHEN(rst=1);-检测复位信号rstx=a;-无复位信号,执行赋值操作WAITUNTILclock=1ANDclockEVENT;-等待时钟信号NEXTrst_loopWhen(rst=1);-检测复位信号rsty=b;-无复位信号,执行赋值操作ENDLOOPrst_loop;ENDPROCESS;,【例10-13】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshift

13、erISPORT(data:INSTD_LOGIC_VECTOR(7DOWNTO0);shift_left:INSTD_LOGIC;shift_right:INSTD_LOGIC;clk:INSTD_LOGIC;reset:INSTD_LOGIC;mode:INSTD_LOGIC_VECTOR(1DOWNTO0);qout:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0);ENDshifter;ARCHITECTUREbehaveOFshifterISSIGNALenable:STD_LOGIC;BEGINPROCESSBEGINWAITUNTIL(RISING_EDGE(cl

14、k);-等待时钟上升沿IF(reset=1)THENqoutqoutqoutqoutNULL;ENDCASE;ENDIF;ENDPROCESS;ENDbehave;,10.1顺序语句,10.1.8子程序调用语句,1.过程调用,过程名(形参名=实参表达式,形参名=实参表达式);,【例10-14】PACKAGEdata_typesIS-定义程序包SUBTYPEdata_elementISINTEGERRANGE0TO3;-定义数据类型TYPEdata_arrayISARRAY(1TO3)OFdata_element;ENDdata_types;USEWORK.data_types.ALL;-打开以

15、上建立在当前工作库的程序包data_typesENTITYsortISPORT(in_array:INdata_array;out_array:OUTdata_array);ENDsort;ARCHITECTUREexmpOFsortISBEGIN(接下页),PROCESS(in_array)-进程开始,设data_types为敏感信号PROCEDUREswap(data:INOUTdata_array;-swap的形参名为data、low、highlow,high:ININTEGER)ISVARIABLEtemp:data_element;BEGIN-开始描述本过程的逻辑功能IF(data(

16、low)data(high)THEN-检测数据temp:=data(low);data(low):=data(high);data(high):=temp;ENDIF;ENDswap;-过程swap定义结束VARIABLEmy_array:data_array;-在本进程中定义变量my_arrayBEGIN-进程开始my_array:=in_array;-将输入值读入变量swap(my_array,1,2);-my_array、1、2是对应于data、low、high的实参swap(my_array,2,3);-位置关联法调用,第2、第3元素交换swap(my_array,1,2);-位置关联法调用,第1、第2元素再次交换out_array=my_array;ENDProcess;ENDexmp;,【例10-15】ENTITYsort4isGENERIC(top:INTEGER:=3);PORT(a,b,c,d

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号