Verilog中的 条件语句\多路分支语句\循环语句

news2024/11/22 23:06:30

Verilog中的条件语句\多分支语句\循环语句

文章目录

    • Verilog中的条件语句\多分支语句\循环语句
      • 一、背景
      • 二、if-else
        • 2.1 标准结构
        • 2.2 例子
      • 三、case-endcase
        • 3.1 标准结构
        • 3.2 例子
          • 3.2.1 三路选择器的`case`部分,如下:
          • 3.2.2 `casez`的四路选择器,如下:
      • 四、for
        • 4.1 标准结构
        • 4.2 例子
      • 五、repeat
        • 5.1 标准结构
        • 5.2 例子
          • 5.2.1 循环11次
          • 5.2.2 存储8个数据
      • 六、forever
        • 6.1 标准结构
        • 6.2 例子
          • 6.2.1 产生一个时钟
          • 6.2.2 实现一个时钟边沿控制的寄存器间数据传输功能

一、背景

由于初学Verilog,故写篇笔记记录Verilog中的 if-elsecase-endcaseforwhilerepeatforever语法,以及例子。

二、if-else

定个标准,每个if-else的出现都要有begin-end语句。

2.1 标准结构

条件语句标准使用结构:


if (condition1) begin
    true_statement1 ;
end
else if (condition2) begin
    true_statement2 ;
end
else if (condition3) begin
    true_statement3 ;
end
else begin
    default_statement ;
end

2.2 例子

二输入选择器:

if(en) begin
    if(sel == 2'b1) begin
        sout = p1 ;
    end
    else begin
        sout = p0 ;
    end
end

三、case-endcase

case 语句是一种多路条件分支的形式,可以解决 if 语句中有多个条件选项时使用不方便的问题。casexcasez 语句是 case 语句的变形,用来表示条件选项中的无关项。

3.1 标准结构

case(case_expr)
    condition1: true_statement1 ;
    condition2: true_statement2 ;
    ……
    default: default_statement ;
endcase

casex 用 “x” 来表示无关值,casez 用问号 “?” 来表示无关值。

两者的实现的功能是完全一致的,语法与 case 语句也完全一致。

但是 casexcasez 一般是不可综合的,多用于仿真。

例如用 casez 语句来实现一个 4bit 控制端的 4 路选择选择器。

3.2 例子

3.2.1 三路选择器的case部分,如下:
case(sel)
    2'b00:  sout_t = p0 ;
    2'b01:  sout_t = p1 ;
    2'b10:  sout_t = p2 ;
    default:    sout_t = p3 ;
endcase
3.2.2 casez的四路选择器,如下:
module mux4to1(
    input [3:0]     sel ,
    input [1:0]     p0 ,
    input [1:0]     p1 ,
    input [1:0]     p2 ,
    input [1:0]     p3 ,
    output [1:0]    sout);
 
    reg [1:0]     sout_t ;
    always @(*)
        casez(sel)
            4'b???1:     sout_t = p0 ;
            4'b??1?:     sout_t = p1 ;
            4'b?1??:     sout_t = p2 ;
            4'b1???:     sout_t = p3 ;  
        default:         sout_t = 2'b0 ;
    endcase
    assign      sout = sout_t ;
 
endmodule

四、for

4.1 标准结构

for 循环语法格式如下:

for(initial_assignment; condition ; step_assignment)  begin
    …
end

4.2 例子

// for 循环语句
integer      i ;
reg [3:0]    counter2 ;
initial begin
    counter2 = 'b0 ;
    for (i=0; i<=10; i=i+1) begin
        #10 ;
        counter2 = counter2 + 1'b1 ;
    end
end

五、repeat

repeat的功能是执行固定次数的循环,它不能像 while循环那样用一个逻辑表达式来确定循环是否继续执行。repeat循环的次数必须是一个常量、变量或信号。如果循环次数是变量信号,则循环次数是开始执行 repeat循环时变量信号的值。即便执行期间,循环次数代表的变量信号值发生了变化,repeat执行次数也不会改变。

5.1 标准结构

repeat循环语法格式如下:

repeat (loop_times) begin
    …
end

5.2 例子

5.2.1 循环11次
// repeat 循环语句
reg [3:0]    counter3 ;
initial begin
    counter3 = 'b0 ;
    repeat (11) begin  //重复11次
        #10 ;
        counter3 = counter3 + 1'b1 ;
    end
end
5.2.2 存储8个数据
always @(posedge clk or negedge rstn) begin
    j = 0  ;
    if (!rstn) begin
        repeat (8) begin
            buffer[j]   <= 'b0 ;      //没有延迟的赋值,即同时赋值为0
            j = j + 1 ;
        end
    end
    else if (enable) begin
        repeat (8) begin
            @(posedge clk) buffer[j]    <= counter3 ;       //在下一个clk的上升沿赋值
            j = j + 1 ;
        end
     end
end

仿真结果如下图。
由图可知,rstn 拉高时,buffer的 8 个向量同时赋值为 0。

第二个时钟周期后,buffer依次被counter3赋值,实现了连续存储 8 个数据的功能。
在这里插入图片描述

六、forever

forever语句表示永久循环,不包含任何条件表达式,一旦执行便无限的执行下去,系统函数$finish可退出forever
forever相当于while(1)
通常,forever 循环是和时序控制结构配合使用的。

6.1 标准结构

forever循环语法格式如下:

forever begin
    …
end

6.2 例子

6.2.1 产生一个时钟
reg          clk ;
initial begin
    clk       = 0 ;
    forever begin
        clk = ~clk ;
        #5 ;
    end
end
6.2.2 实现一个时钟边沿控制的寄存器间数据传输功能
reg    clk ;
reg    data_in, data_temp ;
initial begin
    forever @(posedge clk)      data_temp = data_in ;
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/905160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.6.webrtc三大线程

那今天呢&#xff1f;我们来介绍一下web rtc的三大线程&#xff0c;那为什么要介绍这三大线程呢&#xff1f;最关键的原因在于web rtc的所有其他线程都是由这三大线程所创建的。那当我们将这三个线程理解清楚之后呢&#xff1f;我们就知道其他线程与它们之间是怎样关系&#xf…

14.磁盘的管理

第四章 文件管理 14.磁盘的管理 自举程序比较复杂&#xff0c;所以无法保证自举程序相关的数据永远不改变&#xff0c;这个问题该如何解决&#xff1f; 自举装入程序的复杂度不高&#xff0c;很小&#xff0c;所以可以保证自举装入程序是不会出错的&#xff0c;不需要更改的&…

C语言小白急救 整型与浮点型在内存中的存储

文章目录 一、有无符号整型的存储1.整形家族2.整形在内存中的存储3.大小端介绍4.unsigned 类型存储 二、浮点型的存储1.浮点型家族2.浮点型的存储 一、有无符号整型的存储 1.整形家族 字符在内存中存储的是字符的ASCII码值&#xff0c;ASCII码值是整形&#xff0c;所以它也归于…

【C++】做一个飞机空战小游戏(十一)——游戏过关、通关、结束的设置

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…

数据结构(Java实现)-集合与时间和空间复杂度

什么是集合框架 Java 集合框架 Java Collection Framework &#xff0c;又被称为容器 container &#xff0c;是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之…

第6章 性能分析相关的CPU特性

性能分析的终极目标是找到性能瓶颈&#xff0c;并定位到与之相关的代码段。 性能剖析可以快速让人了解应用程序热点。有时&#xff0c;性能剖析是开发者解决性能问题的唯一手段&#xff0c;尤其是针对较高层次性能问题。然而&#xff0c;即使解决了所有的主要性能问题&#xf…

Spring练习---环境搭建步骤分析27,这里要找老师的素材

1、Spring现在各层都有解决方案了&#xff0c;web层有springMVC,Dao层有jdbcTemplate 1.1 纯静态的还得转换一下 2、老师给的素材在文件里了 3、导入的坐标导入到文件里 4、包结构给你讲一下&#xff0c;这个包是controller层&#xff1a; 4.1 Serive业务层&#xff0c;Dao数…

使用 Node.js 生成优化的图像格式

使用 Node.js 生成优化的图像格式 图像是任何 Web 应用程序的重要组成部分&#xff0c;但如果优化不当&#xff0c;它们也可能成为性能问题的主要根源。在本文中&#xff0c;我们将介绍如何使用 Node.js 自动生成优化的图像格式&#xff0c;并以最适合用户浏览器的格式显示它们…

QT 基本对话框

包括&#xff1a; 1.标准文件对话框 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QTextCodec> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QGridLayout> #include <QFr…

Vscode详细安装教程

Vscode官网下载 官网地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 通过链接可以直接跳转到下面的页面当中&#xff0c;支持的版本有Windows、Linux、Mac&#xff0c;可以选择适配自己电脑的版本&#xff0c;一般来说应该是Windows x64的。不要直接点W…

C++图形界面编程-MFC

C控制台程序是命令行黑框&#xff0c;如果要写一个图形界面&#xff0c;VS也提供了图形界面编程MFC。建项目的时候选如下选项&#xff1a; 类似于QT。 问&#xff1a;那么MFC项目的运行入口main()或WinMain()在哪里呢&#xff1f; 答&#xff1a;其实&#xff0c;在MFC应用程…

Kubernetes 使用 Rancher 管理

K8S集群管理工具 只能管理单个K8S集群 kubectl命令行管理工具 dashboard&#xff08;K8S官方的UI界面图形化管理工具&#xff09; &#xff08;管理多集群很麻烦&#xff0c;切换不同集群每次需要更改kube-config文件[kubectl配置文件]&#xff0c;如果kubeadm部署每次都需…

字符设备驱动实例(PWM和RTC)

目录 五、PWM 六、RTC 五、PWM PWM(Pulse Width Modulation&#xff0c;脉宽调制器)&#xff0c;顾名思义就是一个输出脉冲宽度可以调整的硬件器件&#xff0c;其实它不仅脉冲宽度可调&#xff0c;频率也可以调整。它的核心部件是一个硬件定时器&#xff0c;其工作原理可以用…

15.配置资源管理

文章目录 配置资源管理Secret陈述式创建声明式创建存储卷挂载变量引用创建tls类型创建dockerconfigjson类型安装docker&#xff0c;创建 harbor仓库pod节点设置 ConfigMap创建挂载目录挂载文件以环境变量引用通过打补丁的方式修改配置 总结 配置资源管理 Secret Secret 是用来…

项目实战 — 博客系统③ {功能实现}

目录 一、编写注册功能 &#x1f345; 1、使用ajax构造请求&#xff08;前端&#xff09; &#x1f345; 2、统一处理 &#x1f384; 统一对象处理 &#x1f384; 保底统一返回处理 &#x1f384; 统一异常处理 &#x1f345; 3、处理请求 二、编写登录功能 &#x1f345; …

Android 10.0 SystemServer进程读写sdcard权限的修改

1.前言 在10.0的系统开发中,在一些系统进程中,也就是在SystemServer的进程中,其中系统服务中会要求读写Sdcard的一些功能,然后 默认是没有读取sdcard权限的,而在app中可以申请sdcard读写权限在系统服务中就不能申请权限,接下来看怎么授权实现sdcard授权 如图: 2.Sy…

计算机网络(9) --- 数据链路层与MAC帧

计算机网络&#xff08;8&#xff09; --- IP与IP协议_哈里沃克的博客-CSDN博客IP与IP协议https://blog.csdn.net/m0_63488627/article/details/132155460?spm1001.2014.3001.5502 目录 1.MAC帧 1.MAC地址 2.MAC帧报头 3.资源碰撞 4.MTU 1.对IP协议的影响 2.对UDP协议…

【docker】基于dockerfile编写LNMP

目录 一、基础环境准备 二、部署nginx&#xff08;容器IP为172.18.0.10&#xff09; 1、整个Dockerfile文件内容 2、配置nginx.conf文件 3、构建镜像 ​编辑 三、部署mysql 1、整个Docker文件内容 2、准备my.conf文件 3、生成镜像 4、启动镜像容器 5、验证mysql 四、PH…

视频局部区域移动检测, 删除相似帧

视频局部区域移动检测, 删除相似帧 完整方案在本文最后, 不想听故事的直接跳转到完整方案即可 起因 老板的一个东西找不到了, 让查监控 场景 东西放在一个架子上, 由一个海康威视全天候录像的摄像头监控, 但是巧就巧在这个要找的东西被放在了摄像头的死角里, 正好被柜子的隔…

nginx crlf+xss漏洞组合拳

1.crlf漏洞概述 CRLF是指回车和换行符的组合&#xff0c;它们的十六进制编码分别为0x0d和0x0a。在HTTP协议中&#xff0c;HTTP头和HTTP正文之间使用两个CRLF来进行分隔。如果攻击者能够注入恶意的换行符&#xff0c;就能够向HTTP消息中插入恶意的代码或会话Cookie。CRLF漏洞通常…