Verilog中if- else if语句和case语句用法:

2023-11-20

一、if语句:

1.两种情况

if(条件语句)begin
    ……
end else begin
    ……
end

2.多种情况

if(条件语句)begin
    ……
end else if(条件语句)begin
    ……
end else if(条件语句)begin
    ……
end else if(条件语句)begin
    ……
end

if语句总结:

1)条件语句必须在过程块中使用。所谓过程块语句是指由initial、always引导的执行语句集合。除了这两个语句块引导的begin end块中可以编写条件语句外,模块中的其他地方都不能编写。

2)if语句中的表达式一般为逻辑表达式或者关系表达式。系统对表达式的值进行判断; 若为0,z,X;按照假处理;若为1按照真处理,执行指定的语句;

3)if(a)等价于if(a == 1);

4)if语句可以·嵌套·使用,end总是与离它最近的一份else配对。

二、case语句:

case(控制表达式/值)

    分支表达式1:执行语句
    分支表达式2:执行语句
    分支表达式3:执行语句
    default:执行语句

endcase







使用注意事项:
(1)每一个分支表达式的值必须互不相同,否则就会出现问题,即对表达式的同一个值出现多种执行方案,产生矛盾;
(2)执行完一个case的分支语句之后跳出该case语句体结构中止此case语句的执行;
(3)case语句表达式的比较过程中的表达式值必须相同(位宽、数值)才能正确;
         例如:‘bx。‘bz与n‘bx,n‘bz比较,‘bx。‘bz默认计算机位宽,一般为32位,n不等于32时就会出现错误。
 4、casez:
        casez语句的分支表达式在与表达式比较时不考虑高阻值z
        casex语句的分支表达式在与表达式比较时不考虑高阻值z  和不定值x

示例:

`timescale 1ns / 1ps
//

 
module case_test(
input [1:0]sel,
output reg [3:0]dout
    );
always@(*)
begin
    case(sel)
        2'b00:begin
            dout = 4'b0000;
        end
        2'b01:begin
            dout = 4'b0001;
        end
        2'b10:begin
            dout = 4'b0011;
        end
        2'b11:begin
            dout = 4'b0111;
        end
        default:begin
            dout = 4'b1111;
        end
    endcase
end
endmodule

注意⚠️!!!

if 和 case 语句使用不当会造成出现锁存器局面:

if示例:

always@(al or b)
          begin
             if(a)q <= d;
          end
 

上述的代码,只写出了a==1时q应该的取值,a==0时的情况并不知道
在always块里面,如果在给定的条件下变量没有被赋值,这个变量将会保持原来的值,也就是说会生成一个锁存器。
 

case:

另外一种情况会生成意想不到的锁存器时当case语句中没有default语句时的情况。

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

Verilog中if- else if语句和case语句用法: 的相关文章

  • nodejs+vue+elementui电子数码产品商城推荐系统vscode毕业设计

    基于vue的电子产品推荐系统分为前台和后台两部 前台部分主要是让用户购买和查看商品使用的 后台主要是让管理员人员发布商品相关信息和管理订单使用的 前台部分包括用户注册登录 查看商品相关信息 查看公告信息 查看热卖产品 查看精品产品 将商品加
  • 如何使用 Verilog 宏模拟 $display?

    我想创建一个具有多个参数的宏 就像 display 一样 我的代码看起来像这样 但它不起作用 define format macro A write s sformatf A 这就是我调用 format macro 的方式 format m
  • 如何在 verilog 中不使用 while() 循环(用于综合)?

    我已经养成了开发大量测试平台并使用 for 和 while 循环进行测试的习惯 没关系 问题是我已经将这种习惯用于对应该可综合的电路进行编码 XST等拒绝合成代码 无需对合成参数进行额外修改 例如 while num lt test num
  • Verilog、FPGA、统一寄存器的使用

    我有一个问题 关于我正在开发的 AGC SPI 控制器在我看来奇怪的行为 它是用 Verilog 完成的 针对的是 Xilinx Spartan 3e FPGA 该控制器是一个依赖外部输入来启动的 FSM FSM的状态存储在状态寄存器它没有
  • 为什么这个 verilog 关系语句返回 true?

    我有一条名为 sin hall2 的 9 位签名线 该语句返回 true sin hall2 8 0 gt 9 d1 当我查看模拟时 sin hall2 169 我假设这是 verilog 处理比较负数的方式 但我做错了什么 当我执行 si
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 如何在verilog中逐行读取文本文件?

    我有一个 SREC 文件 它是一个简单的文本文件 我想在 verilog 中逐行读取它 我怎样才能做到这一点 以下读取文件 每个时钟周期 1 行 预期的数据格式是每行一个十进制数 integer data file file handler
  • Verilog 最佳实践 - 递增变量

    我绝不是 Verilog 专家 我想知道是否有人知道这些增加值的方法中哪一种更好 抱歉 如果这个问题太简单了 Way A 在组合逻辑块中 可能在状态机中 some condition count next count 1 然后在一个连续块中
  • NVIDIA Jetson环境VSCode安装记录,前期失败问题在于英伟达使用的是arm64架构

    1 安装失败及原因探索 1 1 报错 Unable to install code The following packages have unmet dependencies 搜索一个链接就开始上手 Ubuntu 22 04安装Visua
  • verilog 中的“<<”运算符

    我有一个verilog代码 其中有一行如下 parameter ADDR WIDTH 8 parameter RAM DEPTH 1 lt lt ADDR WIDTH 这里将存储什么RAM DEPTH以及什么是 lt lt 操作员在这里做
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • 如何在 Verilog 中综合 While 循环?

    我尝试设计一个 Booth 乘法器 它在所有编译器中运行良好 包括 Modelsim Verilogger Extreme Aldec Active Hdl 和 Xilinx Isim 我知道模拟和综合是两个不同的过程 而且只有少数Veri
  • verilog $readmemh 对于 50x50 像素 RGB 图像花费太多时间

    我正在尝试编译用于 FPGA 编程的 verilog 代码 我将在其中实现 VGA 应用程序 我使用 QuartusII 和 Altera 我正在尝试正确使用 readmemh 来逐像素获取图片 现在 我已经使用 matlab 将图片转换为
  • 对象 <名称> 未声明

    这是我的代码 据我所知 LEDs被定义为 module sevenseg LEDs in output reg 6 0 LEDs input 3 0 in always in begin case in 0 LEDs 7 b1000000
  • 在 Verilog 中判断总线是否包含单个 x 的最佳方法是什么?

    我有一个监控总线的测试台 总线内的一些信号 位 可以是 1 bx 由于多种原因 我需要知道总线内是否有任何信号是 1 bx 如果总线包含任何 x 测试 不用于综合 仅用于模拟目的 的最佳方法是什么 我曾希望我可以使用减少或然后使用 但这似乎
  • 在 Verilog 设计中产生时钟故障

    我正在使用 Verilog 设计芯片 我有一个 3 位计数器 我希望当计数器处于第 8 次循环时 应该有一个时钟故障 之后就可以正常工作了 在 Verilog 设计中产生时钟故障的可能方法是什么 在时钟信号上注入毛刺的一种方法是使用forc
  • 具有 +1 逻辑的 4 位计数器 D 触发器

    我正在尝试通过 Verilog 实现带有 1 逻辑的 D 触发器计数器 但是我收到了很多有关网络多个常量驱动程序的错误代码 有人可以帮我吗 这是到目前为止的代码 module LAB clk clear Enable Q input clk
  • 我怎样才能让我的verilog移位器更通用?

    这里我有一个移位器 但现在它最多只能工作 3 位 我一直在寻找 但不知道如何让它工作最多 8 位 module shifter a b out input 7 0 a b output 7 0 out wire 7 0 out1 out2
  • 如何在 Verilog 中推断 Block RAM

    我在一个项目中遇到了一个非常具体的问题 这个问题已经困扰我好几天了 我有以下 RAM 模块的 Verilog 代码 module RAM param clk addr read write clear data in data out pa
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更

随机推荐

  • Python 输入圆半径,计算圆周长和面积

    用 Python 编写程序 输入圆半径 计算圆周长和面积 功能 输入圆半径 计算圆周长和面积 作者 Fulling 时间 2021年10月15日 import math 输入部分 r float input 输入圆的半径 处理部分 c 2
  • 开源P2P视频流媒体源代码研究

    1 Azureus http azureus sourceforge net 这是java版的betorrent 最新版本2 4 0 2 从网上直接下载的源代码是没法构建的 所用的库没有在包里面 可以到 http azureus cvs s
  • undefined reference to错误

    1 一种报错情景 编译静态库没有报错 而编译引用静态库的程序时 报undefined reference to静态库里面函数错误时 可能原因 函数声明和定义命名不一致 这种错误不好发现 编译静态库不报错是因为在头文件中能找到函数 而在使用静
  • Android 13 - Media框架(7)- NuPlayer::Source

    Source 在播放器中起着拉流 Streaming 和解复用 demux 的作用 Source 设计的好坏直接影响到播放器的基础功能 我们这一节将会了解 NuPlayer 中的通用 Source GenericSource 关注本地播放架
  • crm系统服务器要求,crm系统需要配备什么云服务器

    crm系统需要配备什么云服务器 内容精选 换一换 登录云服务器的用户名和密码 Windows操作系统用户名 AdministratorLinux操作系统用户名 root如忘记登录密码 可通过控制台提供的 重置密码 功能设置新密码 重置密码
  • docker中设置容器健康检查

    文章目录 一 docker compose方式 二 Dockerfile方式 三 docker run方式 四 查看检查日志 一 docker compose方式 在docker compose中加入healthcheck healthch
  • c语言图案代码简单,求个用最简单的的代码来实现图形界面…

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 include Declare Windows procedure LRESULT CALLBACK WindowProcedure HWND UINT WPARAM LPARAM Make t
  • 大雨

    大雨生彷徨 以为天人兮溯鎏妆 轰鸣兮悠远 望长水东来去也 长生共兴
  • ImportError: C extension: No module named 'pandas._libs.tslibs.timestamps' not built.解决方法

    想用一下pandas遇到了这个情况 错误的意思是没有名叫 pandas libs tslibs timestamps 的模块 网上说要这样做 进入pyinstaller包的安装目录 在python安装目录的Lib site packages
  • ubuntu 18.04.5中flow, smarts & xingtian 多智能体RL环境构建

    ubuntu 18 04 5中flow smarts xingtian 多智能体RL环境构建 Flow 虚拟环境构建 由于需要在同一个主机上运行多个环境 不同的环境具有不同的依赖包 因此每个智能体环境单独构建一个虚拟python环境 首先安
  • AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

    写在前面 先推荐一下另一篇关于使用AutoDL的教程 AutoDL使用教程 1 创建实例 2 配置环境 上传数据 3 PyCharm2021 3专业版下载安装与远程连接完整步骤 注意 在AutoDL的终端键入命令运行时 通常是一定要先cd进
  • 华为OD机试 - 密室逃生游戏(Java)

    题目描述 小强正在参加 密室逃生 游戏 当前关卡要求找到符合给定 密码K 升序的不重复小写字母组成 的箱子 并给出箱子编号 箱子编号为 1 N 每个箱子中都有一个 字符串s 字符串由大写字母 小写字母 数字 标点符号 空格组成 需要在这些字
  • 随手学习笔记

    1 正点原子zynq视频教程 真人版 P128 P132讲解ADDA 第30 1讲高速ADDA实验 ADC芯片简介 哔哩哔哩 bilibili 2 正点原子zynq视频教程 真人版 关于zynq FPGA讲解非常详细 可逐个详细学习 第1讲
  • 使用QZXing生成并解析二维码

    QZxing 是对 zxing 的一个封装 用于在 Qt 程序中加入条形码和二维码识别的功能 这里就讲讲如何编译和使用这个库 前几年 QZXing 的代码是放到 sourceforge net 上的 现在迁移到了 github com 所以
  • sql手工注入

    information schema 系统数据库 包含所有数据库相关信息 information schema schemata中schema name列 字段为所有数据库名称 information schema tables中table
  • 中山大学App校园地图功能分析

    中山大学App校园地图简单功能分析介绍 用户入口 进入中山大学App首页 即可看到校园地图 点击后进入校园地图主界面 校区选取 进入地图主界面后 即可呈现出校园地图 顶上正中间是选取校区的功能按钮 单击后出现全部4个校区可供选择 路线导航
  • 如何在手机上打开xmind文件_如何高效率整理电脑上的文件 ?

    个人电脑 01 没有时间整理 也不想整理 怎么办 1 1 只整理电脑桌面 电脑桌面放着各种文件 已经成为多数人的习惯 一打开电脑 就可以从电脑桌面上看见自己有哪些文件等着处理 当天处理的文件存放在桌面 第二天要用的时候 直接在桌面打开就可以
  • python遍历文件夹中的图片

    import cv2 import os mainFolder Images RectSmall myFolders os listdir mainFolder print myFolders for folder in myFolders
  • jre jdk更改目录后Java无法运行问题解决方案

    问题 在将Java文件 包含jdk jre 由C盘直接剪贴到D盘后 所有Java程序无法运行 且其Java图标不再显示 解决方案 首先更改环境变量 当我们单纯地将Java文件更改位置后 我们计算机的环境变量仍未改变 依旧是当时安装Java时
  • Verilog中if- else if语句和case语句用法:

    一 if语句 1 两种情况 if 条件语句 begin end else begin end 2 多种情况 if 条件语句 begin end else if 条件语句 begin end else if 条件语句 begin end el