第7讲Verilog设计的层次.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7讲Verilog设计的层次

第7讲 Verilog描述方法 在Verilog程序中可通过如下方式描述电路的结构 ◆ 调用Verilog内置门元件(门级结构描述) ◆ 调用开关级元件(晶体管级结构描述) ◆ 用户自定义元件UDP(也在门级) Verilog的 内置门元件 门元件的调用 调用门元件的格式为: 门元件名字 <例化的门名字>(<端口列表>) 其中普通门的端口列表按下面的顺序列出: (输出,输入1,输入2,输入3……); 比如: and a1(out,in1,in2,in3); //三输入与门 对于三态门,则按如下顺序列出输入输出端口: (输出,输入,使能控制端); 比如: bufif1 mytri1(out,in,enable); //高电平使能的三态门 门级结构描述的2选1MUX module MUX1(out, a, b, sel); output out; input a, b, sel; not (sel_, sel); and (a1, a, sel_), (a2, b, sel); or (out, a1, a2); endmodule 2. 行为描述 就是对设计实体的数学模型的描述,其抽象程度远高于结构描述方式。行为描述类似于高级编程语言,当描述一个设计实体的行为时,无需知道具体电路的结构,只需要描述清楚输入与输出信号的行为,而不需要花费更多的精力关注设计功能的门级实现。 行为描述的2选1MUX 3. 数据流描述 数据流描述方式主要使用持续赋值语句,多用于描述组合逻辑电路,其格式为: assign LHS_net=RHS_expression; 右边表达式中的操作数无论何时发生变化,都会引起表达式值的重新计算, 并将重新计算后的值赋予左边表达式的net型变量。 数据流描述的2选1MUX module MUX3(out, a, b, sel); output out; input a, b, sel; assign out = sel ? b : a; endmodule 4. 不同描述风格的设计 对设计者而言,采用的描述级别越高,设计越容易; 对综合器而言,行为级的描述为综合器的优化提供了更大的空间,较之门级结构描述更能发挥综合器的性能,所以在电路设计中,除非一些关键路径的设计采用门级结构描述外,一般更多地采用行为建模方式。 不同描述风格的设计举例 分别用三种描述方式设计1位全加器 分别用三种描述方式设计4位全加器 结构描述的一位全加器 module full_add1(a, b, cin, sum, cout); input a, b, cin; output sum, cout; wire s1,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位全加器(方法1) module full_add2(a, b, cin, sum, cout); input a, b, cin; output sum, cout; assign sum = a ^ b ^ cin; assign cout = (a & b ) | (b & cin ) | (cin & a ); endmodule 数据流描述的1位全加器(方法2) module full_add2(a, b, cin, sum, cout); input a, b, cin; output sum, cout; assign {cout,sum}=a+b+cin; endmodule 行为描述的1位全加器 module full_add4(a,b,cin,sum,cout); input a,b,cin; output sum,cout; reg sum,cout,m1,m2,m3; always @(a or b or cin) begin m1=a&b; m2=b&cin; m3=a&cin; sum=(a^b)^cin; cout=(m1|m2)|m3; end endmodule 结构描述的4位级连全加器 `include " full_add1.v" module add4_1(sum, cout, a, b, cin); output [3:0] sum; output cout; input [3:0] a, b; input cin; ? full_add1 f0 (a[0],b[0],cin,sum[0],cin1);

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档