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