第8讲Verilog设计的层次导论.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Verilog描述电路的方法 Verilog允许设计者用三种方式来描述逻辑电路: 结构描述——调用电路元器件来构建电路; 行为描述——从行为和功能的角度来描述某一个电路; 数据流描述——使用持续赋值语句assign来描述组合电路,有时表示电路的行为,有时也含有结构信息; 采用行为描述方式时需注意 用行为描述模式设计电路,可以降低设计难度。行为描述只需表示输入与输出之间的关系,不需要包含任何结构方面的信息。 设计者只需写出源程序,而挑选电路方案的工作由EDA软件自动完成。 在电路的规模较大或者需要描述复杂的逻辑关系时,应首先考虑用行为描述方式设计电路,如果设计的结果不能满足资源占有率的要求,则应改变描述方式。 数据流描述 用数据流描述模式设计电路与用传统的逻辑方程设计电路很相似。设计中只要有了布尔代数表达式就很容易将它用数据流方式表达出来。表达方法是用Verilog中的逻辑运算符置换布尔逻辑运算符即可。 比如,如果逻辑表达式为:f=ab+cd,则用数据流方式描述为: assign F=(ab)|(~(cd))。 采用层次化方式设计1位全加器 【例】 半加器定义 module half_add(a,b,so,co); input a,b; output so,co; assign co=ab; assign so=a^b; endmodule 【例】 用模块例化方式设计的1位全加器顶层设计 module full_add(ain,bin,cin,sum,cout); input ain,bin,cin; output sum,cout; wire d,e,f; //用于内部连接的节点信号 half_add u1(ain,bin,e,d); //半加器模块调用,采用位置关联方式 half_add u2(e,cin,sum,f); or u3(cout,d,f); //或门调用 endmodule module add4_2(cout,sum,a,b,cin); output[3:0] sum; output cout; input[3:0] a,b; input cin; assign {cout,sum}=a+b+cin; endmodule 数据流描述的4位加法器 行为描述的4位加法器 module add4_3(cout,sum,a,b,cin); output[3:0] sum; output cout; input[3:0] a,b; input cin; reg[3:0] sum; reg cout; always @ ( a or b or cin ) begin {cout,sum}=a+b+cin; end endmodule 5 多层次结构电路的设计 如果数字系统比较复杂,可采用“Top-down”的方法进行设计。首先把系统分为几个模块,每个模块再分为几个子模块,以此类推,直到易于实现为止。这种“Top-down”的方法能够把复杂的设计分解为许多简单的逻辑来实现,同时也适合于多人进行分工合作,如同用C语言编写大型软件一样。Verilog语言能够很好地支持这种“Top-down”的设计方法 多层次结构电路的描述既可以采用文本方式,也可以用图形和文本混合设计的方式。用一个8位累加器的设计为例来说明这两种设计方式。 (1)图形与文本混合设计 (累加器设计) 8位全加器 module add8(sum,cout,b,a,cin); output[7:0] sum; output cout; input[7:0] a,b; input cin; assign {cout,sum}=a+b+cin; endmodule 8位寄存器 module reg8(qout,in,clk,clear); output[7:0] qout; input[7:0] in; input clk,clear; reg[7:0] qout; always @(posedge clk or posedge clear) begin if(clear) qout=0; //异步清0 else qout=in; end endmodule (2)文本设计 `include “add8.v `include “reg8.v” module acc(accout,cout,accin,cin,clk,clear); output[7:0] accout; output cout; input[7:0] accin; input cin,clk,clear; wire[7:0] sum; add8 accadd8(sum,cout,accout,accin,cin)

文档评论(0)

过各自的生活 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档