【VerilogHDL】循环语句总结

更新时间:2023-07-31 18:41:06 阅读: 评论:0

【VerilogHDL】循环语句总结
推荐书目⽬录
综述
在Verilog HDL中存在四种类型的循环语句,⽤来控制执⾏语句的执⾏次数。
1) forever  连续的执⾏语句。
2) repeat  连续执⾏⼀条语句 n 次。
3) while  执⾏⼀条语句直到某个条件不满⾜。如果⼀开始条件即不满⾜(为假),则语句⼀次也不能被执⾏。
元世祖忽必烈4) for通过以下三个步骤来决定语句的循环执⾏。
a) 先给控制循环次数的变量赋初值。
b) 判定控制循环的表达式的值,如为假则跳出循环语句,如为真则执⾏指定的语句后,转到第三步。
c) 执⾏⼀条赋值语句来修正控制循环变量次数的变量的值,然后返回第⼆步。
从上⾯的描述,可见,for语句和while语句和C语⾔中的语法还是基本⼀致的。
我们在硬件描述语⾔(HDL)中,更需要考虑的是,这些循环语句的应⽤场合,有的循环语句是可以综合的,⽽另⼀些循环语句则是不可以综合的。可以综合的循环语句的使⽤也需要遵循⼀定的规则,循环语句⼀般⽤于写测试⽂件(testbench⽂件),例如产⽣时钟等,使⽤起来⼗分的⽅便。
for,while,repeat是可综合的,但循环的次数需要在编译之前就确定,动态改变循环次数的语句是不可综合的。forever语句是不可综合的,主要⽤于产⽣各种仿真激励。
下⾯分别介绍:
forever语句
丁亚forever语句的格式如下:
forever 语句; 或
forever  begin 多条语句  end
forever循环语句常⽤于产⽣周期性的波形,⽤来作为仿真测试信号。它与always语句不同处在于不能独⽴写在程序中,⽽必须写在initial 块中。
拖地日记例如:
产⽣⼀个时钟信号可以这么写:
`timescale 1ns/1ps
module name;
...
...
//generate clock
initial clk = 1'b0;
always #10 clk = ~clk;
...
...
endmodule
这是其中的⼀种⽅式,我⽐较喜欢使⽤这种⽅式写⼀个时钟。
那么如果⽤forever怎么写⼀个时钟呢?
写时钟之前,我们必须关注上⾯提⽰的⼀句话:forever循环语句常⽤于产⽣周期性的波形,⽤来作为仿真测试信号。它与always语句不同处在于不能独⽴写在程序中,⽽必须写在initial块中。
我们根据这个原则来写⼀个时钟:
`timescale 1ns/1ps
module name;
...
...
//generate clock
initial begin
clk = 1'b0;
forever #10 clk = ~clk;
end
...
...
endmodule
上⾯写的时钟周期都是20ns。
repeat语句
健康中国战略
repeat语句执⾏指定循环数,如果循环计数表达式的指不确定,即为x或z时,那么循环次数按0次处理。repeat语句的语法是为:
repeat(循环次数表达式) begin
语句块;
end
其中,循环次数表达式⽤于指定循环次数,可以是⼀个整数、变量或者数值表达式。如果是变量或者数值表达式,其数值只在第⼀次循环时得到计算,从⽽可以事先确定循环次数,语句快为重复执⾏的循环体。
上⾯的循环次数表达式通常为常量表达式。
青春之歌朗诵关于这个循环语句的应⽤,固然可以⽤来写测试⽂件的时钟,其他⽅⾯的应⽤等我总结了再添加。
下⾯给出⼀个吧,我还没看懂,是《从算法到硬件逻辑的实现》电⼦书上的例⼦:
while语句
while语句实现的是⼀种条件循环,只有在指定的循环条件为真时才会重复执⾏循环体,如果表达式在开始时不为真(假、x或z),那么过程语句将永远不会被执⾏。while循环的语法是:
while(循环执⾏条件表达式) begin
语句块;
end
在上述格式中,循环执⾏条件表达式代表了循环体得以继续重复执⾏时必须满⾜的条件,在每⼀次执⾏循环体之前,都需要对这个表达式是否成⽴进⾏判断。
while语句在执⾏时,⾸先判断循环执⾏条件表达式是否为真,如果真,执⾏后⾯的语句块,然后再重复判断循环执⾏条件表达式是否为真,如此下去,直到循环执⾏条件表达式不为真。
下⾯这个例⼦是⽤while循环语句对rega这个⼋位⼆进制数中值为1的位进⾏计数。
begin:  count1s
reg[7:0] tempreg;
count=0;
tempreg = rega;
while(tempreg)
begin经典情诗
if(tempreg[0]) count = count + 1;
tempreg = tempreg>>1;
end
end
for语句
事实上,这个语句基本上在开头都介绍过了,为了简洁就不多说了,和C语⾔基本⼀致。
下⾯分别举两个使⽤for循环语句的例⼦。
例1⽤for语句来初始化memory。
例2则⽤for循环语句来实现前⾯⽤repeat语句实现的乘法器。
在for语句中,循环变量增值表达式可以不必是⼀般的常规加法或减法表达式。下⾯是对rega这个⼋位
⼆进制数中值为1的位进⾏计数的另⼀种⽅法。见下例:
最后这句话来⾃于:,对我们的实践很具有指导意义。
港行和国行的区别Verilog HDL是⼀种硬件描述语⾔,如果期望在代码中实现,则需要EDA⼯具将其翻译成基本的门逻辑,⽽在硬件电路中并没有循环电路的原型,因此在使⽤循环语句时要⼗分⼩⼼,必须时刻注意其可综合性。
指导原则:虽然基于循环语句的Verilog HDL设计显得相对精简,阅读起来⽐较容易;但⾯向硬件的设计和软件设计的关注点是不⼀样的,硬件设计并不追求代码的短⼩,⽽是设计的时序、⾯积和性能等特征。在设计中应该使⽤计数器来代替for循环。

本文发布于:2023-07-31 18:41:06,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1124989.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:循环   语句   表达式   次数   设计   条件   变量
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图