Verilog中forever、repeat、while、for四类循环语句(含Verilog实例)

2023-11-18

        当搭建FPGA逻辑时,使用循环语句可以使语句更加简洁易懂,Verilog中存在四类循环语句,如标题,几种循环语句的具体介绍和用法如下:

(1)forever:连续的执行语句

        语法格式:forever<statement>

        forever循环语句常用于产生周期性的时钟波形作为仿真测试信号。与always语句的区别在于其不能独立存在于程序中,必须搭配initial语句共同使用,示例如下:

initial 
    begin
        clk = 1'b0;  //对时钟赋初值0
        forever begin
            #6.734 clk = ~clk; //每隔6.734个时间单位对时钟信号进行一次翻转
        end
    end

(2)repeat:按照固定的次数执行某个语句

        语法格式:repeat (<expression>)<statement>

        repeat循环语句执行指定的循环次数,如果循环计数判断表达式<expression>的值处于不定态(x或z)时,那么循环次数默认为0。

reg [3:0]    i_a;
reg [3:0]    o_b;
repeat(7) begin //进行7次左移,每次移位1比特
    o_b= i_a<<1;
end

(3)while: 当给定符合条件时执行该循环,不符合则跳过

        语法格式:while(<expression>)begin.....end

        while循环执行过程赋值语句,直到指定的条件<expression>为假。如果表达式条件由真跳转至假(包括假、x及z),那么过程语句将永远不被执行。

wire       judge_single;
while (judge_single) begin //当judge_single拉高时,执行循环
    count = count+1;
end

(4)for: 通过给次数变量不断赋值,来控制循环步长、初值和终止值

        语法格式:(循环变量赋初值;循环结束条件;循环变量步进值)

integer k;
reg [7:0] data_in;
reg [7:0] data_out;
for(k=0,k<8,k=k+1) //从0到7之间循环计数
always @(posedge clk)begin
    if(data_vld)
        data_out[k] <= data_in[7-k] //实现字节转换
    else
        data_out[k] <= 'd0
end

总结:forever语句:多用于在仿真中生成周期性的时钟信号(仿真必用);

           repeat语句:可以指定次数的循环,在指定循环次数方面和for循环语句有一定的相似性,但其局限之处在于不能指定步进长度,应用场景较少(本人不常用);

            while语句:通过判断条件成立与否确定循环次数,个人感觉和if的在判断功能上有些重复。(本人不常用);

           for循环语句:可用于实现位宽转换、生成循环矩阵、或在同一时钟周期下生成多个相同功能模块等情况,在实际工程实现中有较多的应用场景(个人较常用);

说明:以上总结均为个人观点,若有批判性意见,欢迎批评指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Verilog中forever、repeat、while、for四类循环语句(含Verilog实例) 的相关文章

  • 8x8LED点阵

    点量这个只需要把9高电平 13低电平就可以了 共阳极点阵 行线是led的正极 列线是led的列线 左上角点亮 显示多个灯是动态扫描的 一个一个显示的 然后间隔速度要快就可以造成显示 点阵由两篇74Hc595级联在一起驱动的 只需要三个io口
  • PLL时钟约束

    方法 1 自动创建基时钟和 PLL 输出时钟 例 derive pll clocks 这一方法使您能够自动地约束 PLL 的输入和输出时钟 ALTPLL megafunction 中指定的 所有 PLL 参数都用于约束 PLL 的输入和输出
  • J-Link仿真器与JTAG和SWD下载与接线

    目录 1 JTAG 1 1JTAG今天被用来主要的三大功能 1 2JTAG引脚 1 3可选引脚 2 SWD 2 1 SWD引脚 2 2 可选择引脚 2 3 JTag和SWD模式引脚定义 3 J Link仿真器 4 IAR与MDK配置两种下载
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • 用Vscode编辑verilog代码配置

    这篇教程感觉很详细了 我这里分享一下vscode和插件的安装包链接 都是官网下载的 放心食用 用VSCode编辑verilog代码 iverilog编译 自动例化 自动补全 自动格式化等常用插件 链接 https pan baidu com
  • 跨时钟域处理方法(一)——打拍

    一 说明 处理跨时钟域的数据可以分为单bit数据和多bit数据 而打拍的方法主要常见于处理单bit数据的跨时钟域问题 打拍的本质是通过添加寄存器 对输入的数据进行延拍 其主要目标是消除亚稳态的影响 常见的是打2拍 也就是添加2级寄存器 二
  • FIFO读写控制

    如果在两个模块之间传输数据 两个模块之间的处理速率不同 会导致采集数据的遗漏或错误 在他们之间加一个数据缓存器 所有数据先经过缓存器缓存 再输入数据接送模块 创建两个模块 一个 作为发送模块 一个作为接受模块 发送模块检测到 fifo为空开
  • Verilog实现两路组相联cache

    cache代码 timescale 1ns 1ps cache共32块 分为16组 每组2块 即两路组相联 1块 4字 1字 4字节 主存共1024块 4096个字 主存地址共12位 1 0 为块内偏移 5 2 为组地址 11 6 为Tag
  • FPGA提示产生latch的报错

    在fpga的设计中有时会遇到 latch 的报错 1 latch是什么 Latch 就是锁存器 是一种在异步电路系统中 对输入信号电平敏感的单元 用来存储信息 锁存器在数据锁存使能时 数据被锁存 输入信号不起作用 这违背了组合逻辑中输出随输
  • FPGA硬件工程师Verilog面试题(基础篇二)

    作者简介 大家好我是 嵌入式基地 是一名嵌入式工程师 希望一起努力 一起进步 个人主页 嵌入式基地 系列专栏 FPGA Verilog 习题专栏 微信公众号 嵌入式基地 FPGA硬件工程师Verilog面试题 二 习题一 多功能数据处理器
  • 吃透Chisel语言.18.Chisel模块详解(五)——Chisel中使用Verilog模块

    Chisel模块详解 五 Chisel中使用Verilog模块 上一篇文章讲述了用函数实现轻量级模块的方法 可以大幅度提升编码效率 Chisel中也提供了一些好用的函数 方便我们编写代码 也方便Chisel编译器优化生成的硬件电路 在Chi
  • IC数字后端

    在 innovus 里面 有时候我们需要控制 tie cell 的 fanout 和 net length 来避免 tie cell 可能出现 max transition 或者 max fanout 的违例 一般来说 只要 fanout
  • 【DDR3 控制器设计】(3)DDR3 的写操作设计

    写在前面 本系列为 DDR3 控制器设计总结 此系列包含 DDR3 控制器相关设计 认识 MIG 初始化 读写操作 FIFO 接口等 通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO 接口设计等 附上汇总博客直达链接 DD
  • 【FMC141】基于VITA57.4标准的4通道2.8GSPS 16位DA播放子卡(2片DAC39J84)

    FMC141是一款基于VITA57 4标准的4通道2 8GSPS 2 5GSPS 1 6GSPS采样率16位DA播放FMC子卡 该板卡为FMC 标准 符合VITA57 4与VITA57 1规范 16通道的JESD204B接口通过FMC 连接
  • 【ZYNQ学习】PL第一课

    这节课讲什么 这节课的名字本来是想写为LED 但这一课里除了LED也有按键 又想换为GPIO控制 但关于PL的GPIO控制 不应该这么草率和简单 而且这一课有很多和ZYNQ或者PL关联性不强的东西要说 所以我写了删删了写改了好几遍 终于定为
  • 串口通信知识点总结

    串口是串行接口 serial port 的简称 也称为串行通信接口或COM接口 串口通信是指采用串行通信协议 serial communication 在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式 串口按电气标准及协议来划分
  • 时序约束理解

    异步配置信息 跨时钟域 配置信息一般set max delay按照3delay来约束 2 异步回读 rst clear信号 设置set false path 放松时序约束要求 不应分析设计中的逻辑路径 因为不关心点到点时序要求
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • MINI-UTDE 10 BASE-T 集成控制器

    MINI UTDE 10 BASE T 集成控制器 MINI UTDE 10 BASE T 拥有多达三个本地I O板和远程I OS总线通信 为用户提供了一系列生产单元功能的单一控制点 包括诸如夹头 反馈器和辅助机器等外围生产设备 支持所有主
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573

随机推荐

  • 解决ElementUI table表格的边框隐藏

    解决ElementUI table表格的边框隐藏 发现问题 解决 写在最后 发现问题 我方产品将于五秒后到达战场 刚在对照原型做项目的时候突然发现了这样一个表格 产品说他的这个数据表表格不要周边的边框 但是中间要边框分隔 嗯 这是什么需求
  • python语言核心技术_python核心技术

    基本语法 Python的设计目标之一是让代码具备高度的可阅读性 它设计时尽量使用其它语言经常使用的标点符号和英文单字 让代码看起来整洁美观 它不像其他的静态语言如C Pascal那样需要重复书写声明语句 也不像它们的语法那样经常有特殊情况和
  • Socket 与 Webservice 的区别

    Socket 与 Webservice 的区别 socket是一种协议 采用tcp或udp协议通信 Tcp udp属于网络层 上边各层的应用都需要我们自己实现 例如端口的定义 数据包的定义 数据包的加密解密等 webservice是一种服务
  • JAVA超大量数据入库

    快速插入1000W万条数据 背景 步骤1 数据库连接 步骤2 插入数据方法 步骤3 调用他就完事了 背景 产品需求 生成一串不重复的号码0 19999999且不能有超过3位以上的豹子号连号 当消耗一半后需要多少秒才能插入一条数据 首先的问题
  • microsoft store 微软应用商店打不开?所有教程都尝试了一遍,居然是因为这个

    所有教程都尝试了一遍 居然是因为这个 此方法适用于 1 平时爱用梯子 2 下面这个浏览器已经不能上网了 3 网上其他教程均不管用的情况 弄了好久 没想到还能弄好 网上的教程我都试了一遍 真的哭笑不得 原理 微软的应用商店联网靠的就是inte
  • 以一个最简单的例子把OO的JavaScript说明白

    OO的JavaScript并不高深 麻烦就麻烦在google出来的国人介绍文章经常罗罗嗦嗦 而且之间的说法还各有不同 摆在一起就让人看了头大 这里重拾简单主义 以一个最简单的例子把OO Javascript说明白 1 一个颇为精简的例子 只
  • 页面点击锚点后不改变URL的方法

    前端简单地锚点实现方法无非就是在把 a 标签的 href 写成想要跳到的元素的id 比如点击 a href box a 页面就会自动滚动到 div div 元素的位置 这样会导致url会改变 浏览器默认的行为会将 id 放在 url 后面
  • vue-cli3中解决在ie中报语法错误问题导致白屏

    1 一般报语法错误时因为部分浏览器不支持ES6 so 我们就应该下载 npm install babel polyfil 判断此插件是否成功 查看项目中是否有babel config js这个文件 2 在vue config js里配置引入
  • 【PTA 题目详解】 例题5-7 计算2个复数之和与之积

    题目 分别输入2个复数的实部与虚部 用函数实现计算2个复数之和与之积 若2个复数分别为 c1 x1 y1 i c2 x2 y2 i 则 c1 c2 x1 x2 y1 y2 i c1 c2 x1 x2 y1 y2 x1 y2 x2 y1 i
  • Java 内部类

    静态内部类 demo1 public class StaticInnerClassTest public static void main String args StaticInner Inner inner new StaticInne
  • python求一个数的阶乘_python如何计算数的阶乘

    python计算数的阶乘的三种方法 1 使用 for i in range 循环语句求阶乘 2 使用 reduce 函数求阶乘 3 通过递归求阶乘 方法一 普通的for循环语句 a 1 n 5 for i in range 1 n 1 a
  • java根据关键字搜索_java 抓取百度根据关键词搜索域名

    packagebaidusearch importcom sun glass ui SystemClipboard import java util importjava util HashMap importjava io Buffere
  • futureTask RunnableFuture Future 三者关系认知

    对于这三者首先我们看下源码 之后在分别写几个demo讲解下用法 public interface RunnableFuture
  • HTML5中的引用标记是什么元素?

    HTML5提供了多种元素用于引用文本内容 其中最常用的是 blockquote 元素和 blockquote
  • (二)TestNG 基础概念和执行时机注解

    入门的篇幅会写的比较长 毕竟基础要理解好 在学习TestNG注解前 我们先了解基本的名词 留个印象 TestNG名词解释 1 TestNG方法 method 是一个在代码内使用 Test注解标注的方法 下面代码中的isDuckMeal 就是
  • 机器学习常识 14: 半监督学习

    摘要 半监督学习强调的是一种学习场景 在该场景下 无标签数据可以协助带标签数据提升预测质量 1 基本概念 监督学习 训练数据都有标签 相应的任务为分类 回归等 无监督学习 训练数据都没有标签 相应的任务为聚类 特征提取 如 PCA 等 半监
  • MySQL索引篇

    目录 MySQL索引 一 怎么知道一条SQL语句有没有使用索引 二 如何排查慢查询 三 索引失效以及为什么失效 四 索引为什么能提高查询性能 五 为何选择B 树而不是B树 六 索引分类 七 什么时候创建以及什么时候不需要索引 八 索引优化
  • Python PyQt5(三)添加控件,绑定简单事件处理函数

    coding utf 8 Author BlueSand Email slxxfl000 163 com Web www lzmath cn Blog https blog csdn net weixin 41810846 Date 201
  • Leetcode 160. 相交链表 解题思路及C++实现

    解题思路 先将两个链表构建成一个环 定义两个快慢指针 当它们相遇时 将fast指针从头结点往后遍历 每次走一步 当这两个指针再次相遇时 该节点就是相交节点 Definition for singly linked list struct L
  • Verilog中forever、repeat、while、for四类循环语句(含Verilog实例)

    当搭建FPGA逻辑时 使用循环语句可以使语句更加简洁易懂 Verilog中存在四类循环语句 如标题 几种循环语句的具体介绍和用法如下 1 forever 连续的执行语句 语法格式 forever