- 1、本文档共58页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 条件语句、循环语句、块语句与生成语句 5.1 条件语句(if_else语句) if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。 Verilog HDL语言提供了三种形式的if语句。 5.5 循环语句 5.6 命名块的禁用 5.7 生成块 forever reg clock; initial begin clock=1’b0; forever #10 clock=~clock; end 产生周期为20个单位时间的时钟信号 repeat语句 repeat语句的格式如下: repeat(表达式) 语句; 或 repeat(表达式) begin 多条语句; end 实现乘法器 module test_repeat; parameter size=8,longsize=16; reg [size:1] opa, opb; reg [longsize:1] result; initial begin opa=8ha2; opb=8h3f; #100; opa=8hf5; opb=8hc6; end always @(opa or opb) begin: mult reg [longsize:1] shift_opa, shift_opb; shift_opa = opa; shift_opb = opb; result = 0; repeat(size) begin if(shift_opb[1]) result = result + shift_opa; shift_opa = shift_opa 1; shift_opb = shift_opb 1; end end endmodule while 语句 while语句的格式如下: while(表达式) 语句; 或用如下格式: while(表达式) begin 多条语句; end 对rega中值为1的位进行计数 begin: count1s reg[7:0] tempreg; count=0; tempreg = rega; while(tempreg) begin if(tempreg[0]) count = count + 1; tempreg = tempreg1; end end for语句 初始化memory型变量 begin: init_mem reg[7:0] tempi; for(tempi=0;tempimemsize;tempi=tempi+1) memory[tempi]=0; end parameter size = 8, longsize = 16; reg[size:1] opa, opb; reg[longsize:1] result; begin:mult integer bindex; result=0; for( bindex=1; bindex=size; bindex=bindex+1 ) if(opb[bindex]) result = result + (opa(bindex-1)); end 对rega这个八位二进制数中值为1的位进行计数的另一种方法。 begin: count1s reg[7:0] tempreg; count=0; for( tempreg=rega; tempreg; tempreg=tempreg1 ) if(tempreg[0]) count=count+1; end Verilog通过关键字disable提供了一种终止命名块执行的方法。可用来从循环中退出、处理错误条件以及根据控制信号来控制某些代码段是否被执行。 对块语句的禁用导致紧接在块后面的那条语句被执行。 //从矢量标志寄存器的低有效位开始查找第一个值为1的位 module ex5_13; reg [15:0] flag; integer i; //用于计数的整数 initial begin flag = 16b 0010_0000_0000_0000; i = 0; begin: block1 //while循环声明中的主模块是命名块block1 while(i 16) begin if (flag[i]) begin $display(Encountered a TRUE
文档评论(0)