




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,第四章VHDL顺序语句(SequentialStatement),Process,Function,Procedure中的语句都是顺序执行,以Process为例Process与Process之间,与其他并行语句之间都是并行的关系,.,2,4.1、赋值语句,1.顺序信号赋值语句信号名=赋值源;赋值符号左边必须是信号名,但不能是端口声明中指定为in的信号。右边表达式中可以出现任意对象类,但不能出现端口声明中指定为out的信号。例:B=A;-惯性延迟,无时间延迟子句,即延迟D=Cafter5ns;-传输延迟,指定延迟时间,.,3,2.变量赋值语句,变量赋值的含义是:用计算赋值符号右边的表达式所得新值取代变量原来的值。变量赋值的语法形式为:变量名:=表达式;,.,4,3、赋值目标,a:=1;C1:=“1100”;G(2)g(1),1=g(2):=h;-g(2):=h(1);g(1):=h(2);e:=h(3);f:=h(4);,.,6,4.2流程控制结构,VHDL为用户提供了若干控制进程内部执行流的结构,可分为条件控制和循环控制两种。IF语句CASE语句LOOP语句NEXT语句EXIT语句,.,7,1.if语句(条件控制语句),if条件表达式then顺序语句endif;,.,8,if条件表达式then顺序语句else顺序语句endif;,.,9,if条件表达式then顺序语句elsif条件表达式then顺序语句else顺序语句endif;,.,10,求取最大值,BEGINIF(ab)THENy=b;ELSEy=a;ENDIF;ENDmax;,.,11,B用VHDL设计一个D触发器,ddf1,引进内部节点信号,进程和敏感信号,检测CLK上升沿,将数据输出端口,顺序语句,.,12,PROCESS(clock,clear)BEGINIFclear=0THENq=0;ELSIFclockEVENTandclock=1THENq=d;ENDIF;ENDPROCESS;,.,13,T触发器,Process(clk)beginif(clkeventandclk=1)thenif(t=1)thenq=not(q);elseq=q;endif;endif;endprocess;,.,14,ENTITYmuxISPORT(a,b,sel:INBIT;data_out:OUTBIT);ENDmux;ARCHITECTUREexOFmuxISSIGNALtemp:BIT;BEGINprocess_a:PROCESS(a,b,selx)BEGINIF(sel=0)THENtemp=a;ELSEtemp语句;whenothers=语句;endcase;case语句选择项的要求:选择唯一,覆盖全集。,2、case语句,.,16,选择值的表达方式,单个普通数值8数值选择范围(2to4)并列数值3|5|8混合方式,.,17,LIBRARYieee;USEieee.std_logic_1164.all;ENTITYmux41isPORT(s1,s2,a,b,c,d:INSTD_LOGIC;z:OUTSTD_LOGIC);ENDmux41;ARCHITECTUREactivOFmux41ISSIGNALs:STD_LOGIC_VECTOR(1DOWNTO0);BEGINszzzzzOut1Out1Out1Out110;endlooploop2;,.,22,(2)forloop语句,loop标号:for循环变量in循环次数范围loop顺序语句;endlooploop标号;循环变量由循环次数范围确定其类型,无需声明。循环变量可用在循环体中,但一旦循环结束,循环变量不再起作用,即不能把循环变量的值带到循环体外。,.,23,8位奇偶校验电路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;,.,24,(3)whileloop语句,标号:while循环控制条件loop语句;endloop标号;循环控制条件是布尔类型。每次执行完循环体之后,都要检测条件表达式的值是真还是假。只要其值为真,就要在执行一次循环体内的语句。在条件为假时结束循环。,.,25,process(inputx)variablen:Integer:=1;beginL1:whilen=8loopoutputx(n)=inputx(n+8);n:=n+1;endloopL1;endprocess;,.,26,(4)next语句,该语句控制循环提前进入下一次循环,即跳过该语句后面的语句执行指定标号的下一个循环next;nextloop标号;nextloop标号when条件表达式;,.,27,loop2:loopB:=B+1;nextloop2whenB10;.endlooploop2;,.,28,(5)exit语句,exit语句使得从循环标号所标明的循环中退出。exit;exitloop标号;exitloop标号when条件表达式如果指定条件,必须要在所绐条件为真的前提下,才从循环标号所标明的循环中退出。两种情况下的循环标号都是可选项。如果语句中末给出循环标号,则从当前循环中退出。,.,29,signala,b:std_logic_vector(1downto0);signala_less_then_b:BOOLEAN;a_less_then_b=false;foriin1downto0loopIF(a(i)=1ANDb(i)=0THENa_less_then_b实参表达式);,.,35,PACKAGEdata_typeISsubtypedata_elementisintegerrange0to3;typedata_arrayisarray(1to3)ofdata_element;enddata_type;,.,36,usework.data_type.all;ENTITYsortisPORT(in_array:indata_array;out_array:outdata_array;ENDsort;ARCHITECTUREexmpOFsortISBEGINPROCESS(in_array)procedureswap(data:inoutdata_array;low,high:ininteger)isvariabletemp:data_element;BEGINif(data(low)data(high)thentmp:=data(low);data(low):=data(high);data(high):=temp;endif;Endswap;Variblemy_array:data_array;,.,37,Beginmy_array:=in_array;Swap(my_array,1,2);Swap(my_array,2,3);Swap(my_array,1,2);Out_arrayb)THENtmp:=a;ELSEtmp:=b;ENDIF;RETURNtmp;ENDmax;,函数的参数均为输入参数。函数调用返回一个指定数据类型的值。,.,40,ARCHITECT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论