Verilog HDL数字系统设计及其应用第7章.pptVIP

Verilog HDL数字系统设计及其应用第7章.ppt

  1. 1、本文档共116页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Verilog HDL数字系统设计及其应用第7章

  因此,for循环语句实际上等价于由while循环语句构建的如下循环结构: begin 语句1; while (条件表达式) begin 循环体语句或语句块; 语句2; end end   这样,对于使用while循环语句时需要3条语句才能完成的一个循环控制,for循环语句只需一条语句就可以实现。 下面使用for循环语句来描述与例7-11相同的功能。   【例7-12】for循环语句。 initial for(count=0;count100;count=count+1) begin //循环体语句块 $display (count = %d,count); #5; end   上例中for循环语句的执行过程是:首先执行“count=0;”,给循环变量count赋初值0;然后判断条件表达式“count 100”是否成立,根据判断结果确定是否要继续执行循环体语句块:   ? 如果条件表达式成立,则执行循环体语句块,然后语句“count=count+1”得到执行,实现循环变量count的增值操作,然后再重新转回到判断条件表达式那一步。   ? 如果条件表达式“count 100”不成立,则循环体语句块不被执行,结束循环过程,退出for循环语句的执行。   所以循环变量count将由初值0开始,在每次循环后其值增1。这样条件表达式在前100次循环时始终是成立的,而在开始第101次循环前,count取值为100,此时条件表达式“count 100”不再成立,因此这时将结束循环并退出for循环语句的执行。   下面再举两个使用for循环语句的例子。例7-13所示模块利用for循环语句实现了在例7-10中用repeat语句来实现的乘法器功能,而例7-14则用for循环语句实现了一个4位左移器。   【例7-13】用for循环语句来实现一个8位乘法器。 module 8_bits_multiplier(result,opa,opb); parameter SIZE=8,LONGSIZE=16; input [SIZE:1] opa,opb; output [LONGSIZE:1] result; reg[SIZE:1] opa,opb; reg[LONGSIZE:1] result; always @(opa or opb) begin: mult integer index; //循环变量(index)定义 result=0; for (index =1; index=SIZE; index=index+1) //?for循环语句 if (opb[index]==1) //循环体语句是一条if语句 result=result+(opa(index-1)); end endmodule   【例7-14】4位左移器。 module four-bit_left_shifter(result,a,ctrl); input[7:0] a; input ctrl; output [7:0] result; reg [7:0] result; always @(a or ctrl) begin : DRIFT integer i; //循环变量(i)定义 result =a; if (ctrl == 1) //判断控制信号ctrl是否为1 begin //如ctrl为1, 则执行4位左移操作 for (i = 4; i = 7; i = i + 1) result[i] = result[i-4]; //循环体语句 result[3:0] = 0; //低4位赋值为0 end end endmodule 7.3 任务(task)与函数(function)   除了在前面已经讨论过的过程块和连续赋值语句这两部分以外,行为描述模块内还可以包含任务定义和函数定义这两部分。这两部分在行为描述模块中都是可选的,它们是存在于模块中的一种“子程序”结构。引入任务和函数的目的是为了对需要多次执行的语句进行描述,使之便于理解和调试,引入任务和函数还可以简化程序的结构,增强代码的易读性。 7.3.1 任务(task)   “任务(task)”类似于其它编程语言中的“过程”。任务的使用包括任务定义和任务调用。   1. 任务的定义   任务定义的语法如下: task 任务名 ; 端口与类型说明 局部变量说明 begin 行为语句1; 行为语句2; …… 行为语句n; end endtask 其中:

文档评论(0)

ligennv1314 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档