VHDL顺序语句(SequentialStatement).ppt

上传人:za****8 文档编号:13190263 上传时间:2020-06-07 格式:PPT 页数:42 大小:234.46KB
返回 下载 相关 举报
VHDL顺序语句(SequentialStatement).ppt_第1页
第1页 / 共42页
VHDL顺序语句(SequentialStatement).ppt_第2页
第2页 / 共42页
VHDL顺序语句(SequentialStatement).ppt_第3页
第3页 / 共42页
点击查看更多>>
资源描述
第四章VHDL顺序语句(SequentialStatement),Process,Function,Procedure中的语句都是顺序执行,以Process为例Process与Process之间,与其他并行语句之间都是并行的关系,4.1、赋值语句,1.顺序信号赋值语句信号名=赋值源;赋值符号左边必须是信号名,但不能是端口声明中指定为in的信号。右边表达式中可以出现任意对象类,但不能出现端口声明中指定为out的信号。例:B=A;-惯性延迟,无时间延迟子句,即延迟D=Cafter5ns;-传输延迟,指定延迟时间,2.变量赋值语句,变量赋值的含义是:用计算赋值符号右边的表达式所得新值取代变量原来的值。变量赋值的语法形式为:变量名:=表达式;,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);,4.2流程控制结构,VHDL为用户提供了若干控制进程内部执行流的结构,可分为条件控制和循环控制两种。IF语句CASE语句LOOP语句NEXT语句EXIT语句,1.if语句(条件控制语句),if条件表达式then顺序语句endif;,if条件表达式then顺序语句else顺序语句endif;,if条件表达式then顺序语句elsif条件表达式then顺序语句else顺序语句endif;,求取最大值,BEGINIF(ab)THENy=b;ELSEy=a;ENDIF;ENDmax;,B用VHDL设计一个D触发器,ddf1,引进内部节点信号,进程和敏感信号,检测CLK上升沿,将数据输出端口,顺序语句,PROCESS(clock,clear)BEGINIFclear=0THENq=0;ELSIFclockEVENTandclock=1THENq=d;ENDIF;ENDPROCESS;,T触发器,Process(clk)beginif(clkeventandclk=1)thenif(t=1)thenq=not(q);elseq=q;endif;endif;endprocess;,ENTITYmulISPORT(a,b,sel:INBIT;data_out:OUTBIT);ENDmul;ARCHITECTUREexOFmulISSIGNALtemp:BIT;BEGINprocess_a:PROCESS(a,b,selx)BEGINIF(sel=0)THENtemp=a;ELSEtemp语句;whenothers=语句;endcase;case语句选择项的要求:选择唯一,覆盖全集。,2、case语句,选择值的表达方式,单个普通数值8数值选择范围(2to4)并列数值3|5|8混合方式,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;,(2)forloop语句,loop标号:for循环变量in循环次数范围loop顺序语句;endlooploop标号;循环变量由循环次数范围确定其类型,无需声明。循环变量可用在循环体中,但一旦循环结束,循环变量不再起作用,即不能把循环变量的值带到循环体外。,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;,(3)whileloop语句,标号:while循环控制条件loop语句;endloop标号;循环控制条件是布尔类型。每次执行完循环体之后,都要检测条件表达式的值是真还是假。只要其值为真,就要在执行一次循环体内的语句。在条件为假时结束循环。,process(inputx)variablen:Integer:=1;beginL1:whilen=8loopoutputx(n)=inputx(n+8);n:=n+1;endloopL1;endprocess;,(4)next语句,该语句控制循环提前进入下一次循环,即跳过该语句后面的语句执行指定标号的下一个循环next;nextloop标号;nextloop标号when条件表达式;,loop2:loopB:=B+1;nextloop2whenB10;.endlooploop2;,(5)exit语句,exit语句使得从循环标号所标明的循环中退出。exit;exitloop标号;exitloop标号when条件表达式如果指定条件,必须要在所绐条件为真的前提下,才从循环标号所标明的循环中退出。两种情况下的循环标号都是可选项。如果语句中末给出循环标号,则从当前循环中退出。,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实参表达式);,PACKAGEdata_typeISsubtypedata_elementisintegerrange0to3;typedata_arrayisarray(1to3)ofdata_element;enddata_type;,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;,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;,函数的参数均为输入参数。函数调用返回一个指定数据类型的值。,ARCHITECTURErtlOFdpeakISSIGNALpeak:STD_LOGIC_VECTOR(5downto0);BEGINdout=peak;PROCESS(clk)BEGINIF(clkeventandclk=1)THENIF(set=1)THENpeakx:=xmod2;-其他情况下以2为模。endcase;endModTwo,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!