资源描述
,第二级,第三级,第四级,第五级,数据流建模,西安邮电学院通信工程系,数据流建模,内容:,连续赋值语句,(assign),表达式与操作数,运算符,数据流建模,赋值延时,与线网延时,举例,数据流建模,模块定义,module,(,port list,),时序特性,timig specifications,端口说明,Port declarations,输入,input,双向,inout,输出,output,数据类型说明,Data type declarations,线网类型,net,参数,parameter,寄存器类型,register,电路功能描述,Circuit functionality,子程序,subprograms,任务,task,函数,function,系统任务和函数,System task,&function,编译指令,Compiler directives,连续赋值,Continuous,assignment,赋值语句,assign,过程块,Procedural,blocks,过程块语句,initial block,always block,模块实例,instantiation,连续赋值语句,(assign),连续赋值语句将值赋给,线网信号,(,连续赋值不能为寄存器信号赋值,),,它的格式如下,(,简单形式,),:,assign,net_value,=expression,(表达式),;,例:,wire 3:0 Z,preset,clear;/,线网说明,assign Z=preset /,连续,赋值语句,连续赋值的简化形式:,assign,Mux=(S=0)?A:bz,Mux=(S=1)?B:bz,=,Mux=(S=2)?C:bz,Mux=(S=3)?D:bz;,assign,Mux=(S=0)?A:bz,;,assign,Mux=(S=1)?B:bz;,assign,Mux=(S=2)?C:bz;,assign,Mux=(S=3)?D:bz;,四个语句并行执行,表达式与操作数,表达式由,操作数,和,运算符,组成。,操作数可以是以下类型中的一种:,1),常数:,35,,,4,b10_11,8,h0A,;,2),参数:,parameter,LOAD,=4,d12;,3),线网信号(变量):,wire,clk,;,4),寄存器信号(变量):,reg,3:0,state,;,5),位选择信号(变量):,state2,;,6),部分选择信号(变量):,state2:1,;,7),存储器单元信号(变量):,reg,7:0,mem255:0,;,8),函数调用值:,$time,;,运算符,运算符分类,所含运算符,算术运算符,+,-,*,/,%,*,位运算符,&,|,(),缩位运算符,&,&,|,|,(),逻辑运算符,!,&,|,关系运算符,=,相等与全等运算符,=,!=,=,!=,逻辑移位运算符,连接与复制运算符,条件运算符,?:,运算符优先级,符号,优先级别,单目运算,乘、除、取模,+-,!,*/%,最高,加、减,移位,+-,关系,等价,=,=,!=,=,!=,缩减,逻辑,&,|,&|,条件运算符,?:,最低,算术运算符,+,-,:一元或二元加、减。,一元加、减:,+5,-4,。用于表示操作数正负。,二元加、减:,a+b,;3+2;6-1;,无符号数加减:,wire,、,reg,信号和基数格式的整数是无符号数。,例:,wire 4:0,a,b,sum,sub,;,assign a=4b1001;assign b=4b0100;,assign sum=,a+b,;/,和,sum=4b1101;,assign sub=a-b;/,差,sub=4b0101;,算术运算符,有符号数加减,:,integer,、,real,变量和十进制整数、实数是有符号数。,例,integer,a,b,sum,sub,;real d1,d;,reg,5:0 bar;,initial,begin a=10;b=-3;d1=3.5;,sum=,a+b,;/sum=7,sub=a-b;/sub=13,d=d1-2.3;/d=1.2,bar=-4d12;/bar=6b110100,。,-12,的补码,end,算术运算符,*,/,%,*,乘、除、取模和乘方运算与,C,语言相似,,但,/,%,*,运算只能用于仿真,目前还不能用于电路设计。,:取模运算结果为余数,结果符号与第一运算符保持一致。,例:,10,3,,结果为,1,;,10,3,,结果为,1,例:,integer,a,b,sum,sub,;real d1,d,m;,reg,5:0 bar;,initial,begin a=10;b=-3;d1=3.5;,sum=a*b;/sum=-30,sub=a/b;/,结果取整,,sub=-3,d=d1*2.3;/d=8.05,bar=d/2;/4.025,取整,;bar=6b000100,。,m=d1*2;/m=12.25,end,算术运算符,运算符中有不定态,则一般结果也为不定。,例:,assign sum=4,b101x+4,b1010;,计算结果为,sum=4,bxxxx,算术表达式结果的长度由最长的操作数决定。,例:,reg,3:0 Arc,Bar,4b1000,Crt,=4b1100;,reg,5:0,Frx,;,Arc=Bar+,Crt,;/Arc=4b0100,结果的,长度为,4,位,溢出丢弃,Frx,=Bar+,Crt,;/,Frx,=6b010100,结果的,长度为,6,位,溢出存,/,在,Frx4,位运算符,按操作数的对应位运算。,:按位取反运算。例:,4b1010-4b0101,&,:按位与运算。,例:,3b110&3b10 x-3b100,|,:按位或运算。,例:,3b110|3b10 x-3b11x,:按位异或运算。,例:,3b110 3b10 x-3b01x,:按位异或非。,例:,3b110 3b10 x-3b10 x,二个操作数不等长时,运算结果按长操作数补,0,或,x,。,例:,4b0110|3b10 x-4b,0,11x,缩位(归约)运算符,单目运算符。对操作数逐位运算,运算结果是一位逻辑。,运算符:与,(&),或,(|),异或,(),及其非操作,&,|,,,运算规则同位运算符,例:,a=4,b0110,;,&a,等效于,(0&1&1&0),&a=1,|a=1;|a=0,a=0;a=1,逻辑运算符,表示逻辑关系的:,“,真,”,(1),与,“,假,”,(0),。,&,:逻辑与。,|,:逻辑或。,!:逻辑非。,若操作数不为,0,,是逻辑真或逻辑,1,;若操作数为,0,,则是逻辑假或逻辑,0,。,如果任意一个操作数包含,x,,结果也为,x,。,注意区别:,a&b,和,a&b,。(,a,、,b,为,1bit,数时等效,其它情况运算结果可能不同,),关系运算符,比较两个操作数的大小关系。,结果是一位的逻辑值,逻辑值,1,表示关系成立,逻辑值,0,表示关系不成立。,:大于。,=,:大于等于。,如果任意一个操作数包含,x,,结果也为,x,。,相等与全等运算符,逐位比较两个操作数。,:相等运算符。每一位的确定值(,0,或,1,)都相等时,关系为真(,1,),否则为假(,0,)。只要中间存在高阻态,(z),或不定态,(x),,则关系为不定(,x,)。,!=:,不等运算符。与相等运算相反,:全等运算符。,把不定态,(x),和高阻态,(z),看作逻辑状态进行比较,,比较结果不存在不定态,一定是,1,或,0,。,!=,:不全等运算符,与全等运算符相反。,例:,a=b=4,b0100,c=d=4,b10 x0,,则:,a=b,为,1,;,a=b,为,1,;,c=d,为,x,;,c=d,为,1,逻辑移位运算符,:逻辑左移、逻辑右移,逻辑移位运算后,空出部分均用,0,填充。,:算术左移、算术右移,算术右移运算后,空出部分填充,1,。,例:,逻辑左移:,(8,b1101_1001 8,b01_1001_,00,逻辑右移:,(8,b1101_10012)-8,b,00,_1101_10,算术左移:,(-10-20;6,b110110-6,b101100,算术右移:,(-31)-2;3,b101-3,b,1,10,连接与复制运算符,连接运算是将多组信号用大括号括起来,拼接成一组新信号。,例:,a=1b1;b=4hf;c=3d4;,a,b,c,3,b101-11b1_1111_100_101,复制运算是重复信号的拼接方法,例:,a,3b,2c,d-,a,b,b,b,c,d,c,d,条件运算符,Verilog,HDL,中唯一的三目运算符。,表达式:,?:,例:,assign,tri_bus,=(,drv_enble,)?data:16,hzzzz,;,若条件表达式为不定态,则结果为后两个表达式的,按位操作,结果。,按位操作的值,:,相同不变,其余情况为,x,。,例,(x)?3,b010:3,b011-3,b01x,数据流建模,结构建模,主要用于模块间的互连和少量逻辑门的电路描述。,复杂电路常用,行为描述建模,。行为建模重点关注模块的输入、输出的功能(行为)描述,对具体的实现电路细节不去过多关注,用于仿真或留待,综合工具,处理。,数据流建模,是基于数据在寄存器间的流动和处理的思想来描述电路。,连续赋值语句用于数据流行为建模主要描述组合逻辑电路。,组合逻辑,行为描述,组合逻辑,行为描述,寄,存,器,寄,存,器,数据流方式描述一位全加器,一位全加器:,module,FA _,Df,(A,B,Cin,Sum,Cout,);,input,A,B,Cin,;,output,Sum,Cout,;,assign,Sum=A B,Cin,;,assign,Cout,=(A&,Cin,)|(B&,Cin,)|(A,endmodule,两个连续赋值语句是,并发执行,的,与其书写的,顺序无关,。,只要连续赋值语句右端表达式中操作数的值变化,(,即有事件发生,),连续赋值语句即被执行。,例如,,A,变化,则两个连续赋值都被计算,即同时对右端表达式求值,并将结果赋给左端目标。,数据流方式描述,4,选,1,多路选择器,module,MUX4x1(Z,D0,D1,D2,D3,S0,S1);,output,Z;/,端口说明,input,D0,D1,D2,D3,S0,S1;/,端口说明,assign,Z=(S1=1b0)?,(,(S0=1b1)?D1:D0,):,(,(S0=1b1)?D3:D2,);,endmodule,s1 s0,z,0 0,D0,0 1,D1,1 0,D2,1 1,D3,真值表:,数据流方式描述,4,位全加器,module fulladd4(sum,c_out,a,b,c_in);,input 3:0 a,b;,input c_int;,output 3:0 sum;,output c_out;,assign c_out,sum=a+b+c_in;,/,左端用连接运算符,endmodule,例:,1 0 0 1 a,0 1 1 0 b,+1 c_in,1,0 0 0 0,线网说明赋值,连续赋值可作为线网说明本身的一部分。这样的赋值被称为线网说明赋值。例如,:,wire,3:0 Sum=4b0;,wire,Clear=b1;,wire,A_GT_B=A B,B_GT_A=B A;,线网说明赋值与连续赋值等效:,wire,Clear;,assign,Clear=b1;,赋值延时与线网延时,如果在连续赋值语句中没有定义延时,如前面的例子,则右端表达式的值立即赋给左端表达式,延时为。,带延时定义的连续赋值语句格式,:,assign,#delay,net_value,=expression,;,例:,assign,#6 Ask=Quiet|Late;,/,规定右边表达式结果的计算到其赋给左边目标需经过,6,个时间单位延时。,赋值延时,如果右端在传输给左端之前变化,会发生什么呢?
展开阅读全文