目录

综述

forever语句

repeat语句

while语句

for语句


综述

在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 clockinitial clk = 1'b0;always #10 clk = ~clk;...
...endmodule

这是其中的一种方式,我比较喜欢使用这种方式写一个时钟。

那么如果用forever怎么写一个时钟呢?

写时钟之前,我们必须关注上面提示的一句话:forever循环语句常用于产生周期性的波形,用来作为仿真测试信号。它与always语句不同处在于不能独立写在程序中,而必须写在initial块中。

我们根据这个原则来写一个时钟:

`timescale 1ns/1ps
module name;...
...
//generate clockinitial beginclk = 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:  count1sreg[7:0] tempreg;count=0;tempreg = rega;while(tempreg)beginif(tempreg[0]) count = count + 1;tempreg = tempreg>>1;end
end

for语句

事实上,这个语句基本上在开头都介绍过了,为了简洁就不多说了,和C语言基本一致。

下面分别举两个使用for循环语句的例子。

例1用for语句来初始化memory。

例2则用for循环语句来实现前面用repeat语句实现的乘法器。

在for语句中,循环变量增值表达式可以不必是一般的常规加法或减法表达式。下面是对rega这个八位二进制数中值为1的位进行计数的另一种方法。见下例:

最后这句话来自于: Verilog中循环的使用,对我们的实践很具有指导意义。

Verilog HDL是一种硬件描述语言,如果期望在代码中实现,则需要EDA工具将其翻译成基本的门逻辑,而在硬件电路中并没有循环电路的原型,因此在使用循环语句时要十分小心,必须时刻注意其可综合性。

指导原则:虽然基于循环语句的Verilog HDL设计显得相对精简,阅读起来比较容易;但面向硬件的设计和软件设计的关注点是不一样的,硬件设计并不追求代码的短小,而是设计的时序、面积和性能等特征。在设计中应该使用计数器来代替for循环。

【 Verilog HDL 】循环语句总结相关推荐

  1. (25)Verilog HDL循环语句:forever

    (25)Verilog HDL循环语句:forever 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL循环语句:forever 5)结语 1.2 ...

  2. (26)Verilog HDL循环语句:repeat

    (26)Verilog HDL循环语句:repeat 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL循环语句:repeat 5)结语 1.2 FP ...

  3. (27)Verilog HDL循环语句:while

    (27)Verilog HDL循环语句:while 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL循环语句:while 5)结语 1.2 FPGA ...

  4. (28)Verilog HDL循环语句:for

    (28)Verilog HDL循环语句:for 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL循环语句:for 5)结语 1.2 FPGA简介 F ...

  5. Verilog HDL——循环语句

    循环语句 Verilog HDL中4种循环语句 for循环:指定循环次数 while循环:设置循环条件 repeat循环:连续执行语句N次 forever循环:连续执行某条语句(不可综合,多用于仿真激 ...

  6. (23)Verilog HDL条件语句:if-else语句

    (23)Verilog HDL条件语句:if-else语句 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL条件语句:if-else语句 5)结语 ...

  7. (24)Verilog HDL条件语句:case语句

    (24)Verilog HDL条件语句:case语句 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL条件语句:case语句 5)结语 1.2 FP ...

  8. C语言的for循环转verilog,Verilog for 循环语句

    Verilog for 循环语句 在Verilog 语法中,定义了多种循环语句,其中for是应用最广泛的一种语句,不仅可以在顺序语句中使用,在并发语句中也有相应的模型.for 循环语句可以用在实体模块 ...

  9. 数字集成电路设计(三、Verilog HDL程序设计语句和描述方式)(一)

    文章目录 1. 数据流建模 1.1 连续赋值语句 2. 行为级建模 2.1 过程语句 2.2 语句块 2.3 过程赋值语句 **!!!小结** 2.4 过程连续赋值语句 2.5 条件分支语句 2.5. ...

  10. 【Verilog HDL】语句的并发执行

    1. 实践得到的启发 先从一个简单的现象得出结论,Verilog语句是并发执行的! 同时,这也是**$monitor系统任务为全局有效**的一个重要支持因素,如果没有并发,它是完不成这项功能的实现的. ...

最新文章

  1. 《JAVA编程思想》学习笔记——第三章 操作符
  2. iPhone Three20软件引擎之构建开发环境与HelloWorld
  3. html中本页面路径怎么写,HTML之绝对路径与相对路径
  4. Android Studio Butter Knife —— 快速开发
  5. 扫地机器人划伤地板_扫地机器人哪个牌子好?会选的才能买到好产品
  6. The meta-data is invalid or is corrupt
  7. 制作Oracle dockerfile镜像
  8. 安卓开机画面_只需三招,电视/盒子开机启动不再是问题
  9. 基于有道API的命令行词典(golang版)
  10. HTML列表、表格与媒体元素
  11. 20个高效阅读小技巧
  12. xp镜像文件的product key
  13. 生成android 证书
  14. 计算机应用技术 快捷键,几个实用的电脑使用技巧和快捷键
  15. Pboot插件-包含所有Pboot插件功能
  16. Android-茫茫9个月求职路,终于拿满意offer
  17. Flink-DataStream快速上手
  18. 带你入门多目标跟踪(一)领域概述
  19. tidymodels搞定二分类资料多个模型评价和比较
  20. ThnBoV1.3.0一款针对WordPress开发的缩略图美化插件

热门文章

  1. 软件项目经理新手上路9 - 谁是你的敌人?
  2. 如何使‘CREATE TABLE AS SELECT’能支持ORDER BY ?
  3. 数据备份_「Cassandra实战」Cassandra数据备份
  4. 国防科大 linux教程,国防科大《嵌入式系统》肖侬视频教程
  5. MySQL表的key怎么设置为yes_MySQL 修改账号密码方法
  6. 高职扩招有计算机专业吗,高职扩招计算机专业
  7. 修改所有列_宝塔面板安装完的一些列操作
  8. oracle rman imp exp,Oracle-client支持exp|imp|rman
  9. 你们的竞赛更需要你们的参与
  10. 线上比赛投诉:同一赛点两支队伍比赛车模是否相同?