当前位置: 首页 > news >正文

Verilog实战学习到RiscV - 2 : wire 和 reg 的区别

Verilog: wirereg 的区别

1 引言

看Verilog例子过程中,总是分不清 wirereg 的区别。这篇文章把两者放在一起总结一下,并且对比何时使用它们。

1.1 wire :组合逻辑

wire 是 Verilog 设计中的简单导线(或任意宽度的总线)。使用 wire 时的语法规则如下:

  1. wire 用于连接模块实例化的输入和输出端口以及设计中的其他元素。
  2. wire 用作实际模块声明中的输入和输出。
  3. wire 必须由其他信号驱动,不能自行存储值。
  4. wire 不能用作 always@ 块中的左值(=<=)。
  5. wireassign 语句左侧的唯一合法类型。
  6. wire 是一种无状态的连接方式,仅用于组合逻辑。

程序 1 显示了 wire 的各种合法用法。

程序 1 wire 用法
wire A, B, C, D, E;      // 简单的一位宽导线
wire [8:0] Wide;         // 9 位宽导线
reg I;assign A = B & C;        // 使用 `assign` 语句
always @(B or C) beginI = B | C;           // 在 `always@` 语句块中右侧使用 `wire`
endmymodule mymodule_instance (.In (D), .Out(E));  // 模块输出使用 `wire`

1.2 reg :组合逻辑和时序逻辑

regwire 类似,但可以像寄存器一样存储信息(“状态”)。使用 reg 的语法规则如下:

  1. reg 可以连接到模块实例化的输入端口。
  2. reg 不能连接到模块实例化的输出端口。
  3. reg 可以用作实际模块声明中的输出。
  4. reg 不能用作实际模块声明中的输入。
  5. regalways@ 块中左值(=<=)的唯一合法类型。
  6. reginitial 块中左值(用于测试平台)的唯一合法类型。
  7. reg 不能用作 assign 语句的左值。
  8. reg 可以与 always@(posedge Clock) 块一起使用来创建寄存器。
  9. 因此,reg 可以用于创建组合逻辑和时序逻辑。

程序 2 显示了 reg 元素的各种合法用法。

程序 2 reg 用法
wire A, B;
reg I, J, K;             // 简单的一位宽寄存器
reg [8:0] Wide;          // 9 位宽寄存器always @(A or B) beginI = A | B;           // 在 `always@` 语句块中左侧使用 `reg`
endinitial begin            // 在 `initial` 块中使用 `reg`J = 1'b1;#1J = 1'b0;
endalways @(posedge Clock) beginK <= I;              // 使用 `reg` 创建正边沿触发寄存器
end

1.3 wirereg 何时可互换

在某些情况下,wirereg 可以互换使用:

  1. 两者都可以出现在 assign 语句和 always@ 块的右侧(=<=)。
  2. 两者都可以连接到模块实例化的输入端口。
http://www.lryc.cn/news/353462.html

相关文章:

  • OpenGL给定直线起点和终点不同的颜色,使用中点Bresenham画线
  • IT行业的现状与未来发展趋势:从云计算到量子计算的技术变革
  • 电脑远程控制另一台电脑怎么弄?
  • 软件设计师备考 | 案例专题之面向对象设计 概念与例题
  • UniApp 2.0可视化开发工具:引领前端开发新纪元
  • 前端调用浏览器录音功能且生成文件(vue)
  • 「大数据」Kappa架构
  • 详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版)
  • Python自动化工具(桌面自动化、Web自动化、游戏辅助)
  • opencv进阶 ——(五)图像处理之马赛克
  • 电机控制系列模块解析(22)—— 零矢量刹车
  • 自定义一个SpringBoot场景启动器
  • UDP的报文结构和注意事项
  • rust语言一些规则学习
  • QML基本语法介绍
  • 学习和分享关于 Vue.js 的路由(vue-router)
  • 小猪APP分发:一站式免费应用推广解决方案
  • 新抖:抖音的数据分析平台,敢用深色系,别的真不敢!
  • 独享IP是原生IP吗?二者有何区别?
  • AI大模型探索之路-实战篇7:Function Calling技术实战:自动生成函数
  • Android14 - 绘制系统 - 概览
  • Add object from object library 从对象库中添加内置器件
  • 天诚公租房/人才公寓WiFi人脸识别物联网智能门锁解决方案
  • JAVA学习-练习试用Java实现“子集”
  • 揭秘《庆余年算法番外篇》:范闲如何使用维吉尼亚密码解密二皇子密信
  • Java进阶学习笔记11——多态
  • 注意力机制篇 | YOLOv8改进之引入用于目标检测的混合局部通道注意力MLCA
  • 百度生成数据库
  • 【SpringBoot】整合百度文字识别
  • Java如何设计一个功能