资源描述:
《《设计层次与风格》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Verilog设计的层次与风格主要内容◆结构(Structural)描述◆行为(Behavioural)描述◆数据流(DataFlow)描述◆基本组合电路设计◆基本时序电路设计Verilog设计的层次结构(Structural)描述行为(Behavioural)描述数据流(DataFlow)描述在Verilog程序中可通过如下方式描述电路的结构◆调用Verilog内置门元件(门级结构描述)◆调用开关级元件(晶体管级结构描述)◆用户自定义元件UDP(也在门级)结构(Structural)描述Verilog的内置门元件门元件的调用调用门元件
2、的格式为:门元件名字<例化的门名字>(<端口列表>)其中普通门的端口列表按下面的顺序列出:(输出,输入1,输入2,输入3……);比如:anda1(out,in1,in2,in3);//三输入与门对于三态门,则按如下顺序列出输入输出端口:(输出,输入,使能控制端);比如:bufif1mytri1(out,in,enable);//高电平使能的三态门门级结构描述的2选1MUXmoduleMUX21a(out,a,b,sel);outputout;inputa,b,sel;not(sel_,sel);and(a1,a,sel_),(a2,b,
3、sel);or(out,a1,a2);endmodule行为描述就是对设计实体的数学模型的描述,其抽象程度远高于结构描述方式。行为描述类似于高级编程语言,当描述一个设计实体的行为时,无需知道具体电路的结构,只需要描述清楚输入与输出信号的行为,而不需要花费更多的精力关注设计功能的门级实现。行为描述的2选1MUXmodulemux21b(out,a,b,sel);outputout;inputa,b,sel;regout;always@(aorborsel)beginif(sel)out=b;elseout=a;endendmodule7.
4、4数据流描述数据流描述方式主要使用持续赋值语句,多用于描述组合逻辑电路,其格式为:assignLHS_net=RHS_expression;右边表达式中的操作数无论何时发生变化,都会引起表达式值的重新计算,并将重新计算后的值赋予左边表达式的net型变量。数据流描述的2选1MUXmoduleMUX21c(out,a,b,sel);outputout;inputa,b,sel;assignout=sel?b:a;endmodule不同描述风格的设计对设计者而言,采用的描述级别越高,设计越容易;对综合器而言,行为级的描述为综合器的优化提供了更
5、大的空间,较之门级结构描述更能发挥综合器的性能,所以在电路设计中,除非一些关键路径的设计采用门级结构描述外,一般更多地采用行为建模方式。结构描述的一位全加器modulefull_add1(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;wires1,m1,m2,m3;and(m1,a,b),(m2,b,cin),(m3,a,cin);xor(s1,a,b),(sum,s1,cin);or(cout,m1,m2,m3);endmodule数据流描述的1位全加器modulefull_add2(a,
6、b,cin,sum,cout);inputa,b,cin;outputsum,cout;assignsum=a^b^cin;assigncout=(a&b)
7、(b&cin)
8、(cin&a);endmodule行为描述的1位全加器modulefull_add4(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;regsum,cout,m1,m2,m3;always@(aorborcin)beginm1=a&b;m2=b&cin;m3=a&cin;sum=(a^b)^cin;cout=(m1
9、m2)
10、
11、m3;endendmodule4位加法器4-bitadder`include"full_add1.v"moduleadd4_1(sum,cout,a,b,cin);output[3:0]sum;outputcout;input[3:0]a,b;inputcin;full_add1f0(a[0],b[0],cin,sum[0],cin1);full_add1f1(a[1],b[1],cin1,sum[1],cin2);full_add1f2(a[2],b[2],cin2,sum[2],cin3);full_add1f3(a[3],b[3
12、],cin3,sum[3],cout);endmodule结构描述的4位级连全加器moduleadd4_2(cout,sum,a,b,cin);output[3:0]sum;outputcout;input