第3章 Verilog HDL的基本语法.ppt

  1. 1、本文档共156页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2)while循环语句 while语句的语法格式如下:   while(条件表达式)     语句;   条件表达式值为真时,执行语句;否则不执行。条件表达式值为x或z时,也看做假。若语句多于一条,则需要写在begin…end块中。 例如,例3.4.3中二进制乘法器改用 while循环语句,其always块可写为: always@(opAoropB) begin   integerindex;   index=0;   result=0;   while(indexsize)   begin    if(opB[index]==1)      result=result+(opA?index);    index=index+1; //index作为循环变量,需要自增   end end   3)repeat循环语句   repeat循环语句预先指定循环次数,语法格式如下:    repeat(循环次数表达式)     语句;   当循环次数表达式值为0、x或z时,都不执行语句;否则按指定次数循环执行语句。   若语句块不止一条语句,需要写在begin…end块中。 例如,例3.4.3中二进制乘法器改用repeat循环语句,其always块可写为:   always@(opAoropB)   begin     integerindex;     index=0;     result=0;     repeat(8)     begin      if(opB[index]==1)        result=result+(opA?index);      index=index+1; //index作为循环变量,需要自增    end end 3.5 模块化的电路设计 3.5.1 分层次电路设计   采用层次化设计方法,能将复杂的电路系统分层简化实现,具有便于多人协作、故障调试、模块重用的优点,是目前复杂电路系统设计广泛采用的方法。层次化的电路设计分为自顶向下和自底向上两种方法。自顶向下的方法是先设计顶层模块,然后依据顶层模块划分功能,定义顶层模块用到的各个子模块。自底向上的方法是先设计各个子模块,然后由子模块组合起来构成顶层模块。Verilog层次化建模结构如图3.5.1所示。 图3.5.1 VerilogHDL层次化建模示意图   【例3.5.1】 引用半加器模块构成1位全加器。   解 半加器不考虑低位来的进位,是两个1位二进制数相加。全加器考虑低位来的进位,是三个1位二进制数相加。引用半加器构成全加器,需要引用半加器两次,即将A、B半加的结果与Cin再进行半加,电路结构如图3.5.2所示。Verilog代码如代码3.5.1所示。 图3.5.2 本例中,full_adder是顶层模块。full_adder实例化half_adder形成u1,完成外界输入A 与B 的半加生成半加和S1 和半加进位C1,再实例化half_adder为u2,将u1 输出的S1和外界输入的 Cin半加,生成全加和S2 和u2 的半加进位C2。assign语句用于将C1 和C2进行或运算驱动进位输出 Co。 【例3.5.2】 引用1位十进制计数器构成2位十进制计数器。 解 引用1位十进制计数器构成2位十进制计数器的代码如下: modulebcd2Counter(en,clk,rst,one_q,ten_q,zout);  inputen,clk,rst;   outputzout;   output[3:0]one_q,ten_q;   wireone_out;   bcd_counterone(.en(1b1),.clk(clk),.rst(rst),.zout(one_out),.qout(one_q));   bcd_counterten(.en(one_out),.clk(clk),.rst(rst),.zout(),.qout(ten_q));   assignzout=(one_q==4h9 ten_q==4h9); endmodule modulebcd_counter(en,clk,rst,zout,qout);   inputen,clk,rst;   outputzout;   outputreg[3:0]qout;   always@(posedgeclkornegedgerst)   if(~rst)    qout=4b0;   else    if(en)     if(qout==4h9)      qout=4b0;    else    qout=qout+1b1;   assignzout=(qout==4h9); endmodule 3.5.2 任务和函数的使用   1.函数(function)声

文档评论(0)

执着仅一次 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档