数字逻辑实践5->Verilog语法 | wire 与 reg 的选择与特性
2024-08-31 02:12:02
问题起因:最初学习数字逻辑设计理论的时候还没有注意到,在实验课上写代码的时候发现了一个问题:
对于源码模块的变量定义,何时定义为reg、何时定义为wire?它们各自又有什么特性和物理意义?
1. wire
wire是网络数据类型的关键字。
网络数据类型表示结构实体(例如门)之间的物理连接(线)。网络类型的变量不能储存值。
语言特性
wire型数据常用来表示用于
结构化定义
assign为代表的连续赋值描述
也叫数据流描述方式、RTL级描述方式
指定的组合逻辑信号。
程序模块中,输入输出信号类型缺省时,自动定义为wire型。
wire型信号可以用作任何表达式的输入,也可以用作“assign”语句或实例元件的输出。
示例:
1 wire a;
2 //定义了一个一位的wire型数据
3 wire [7:0] b;
4 //定义了一个八位的wire型数据
5 wire [4:1] c, d;
6 //定义了两个四位的wire型数据
7 //注意是两个
物理意义
表示线。
上面的
wire [7:0] b;
就表示一组编号从7到0的八条线。
从这个层次可以理解为什么
1 wire [0:7] b;
2
3 wire [1:8] b;
4
5 wire [8:1] b;
都是符合定义不会报错的;
也可以理解其可以作为任何表达式的输入和输出。
2. reg
reg是寄存器数据类型的关键字。而寄存器是数据存储单元的抽象。
语言特性
reg型数据常用来表示用于always模块内的指定信号,常代表触发器。即常用在行为描述语句中。
在always块内被赋值的每一个信号都必须定义成reg型。
示例:
1 reg rega;
2 //定义了一个一位的名为rega的reg型数据
3 reg [3:0] regb;
4 //定义了一个四位的名为regb的reg型数据
5 reg [4:1] regc, regd;
6 //定义了两个四位的名为regc和regd的reg型数据
reg型数据可以赋正值,也可以赋负值。
物理意义
表示类寄存器(registor)的存储单元。
联系上面的语言特性,赋值语句的作用就是改变一组触发器存储的值。
另外强调一点:
reg型只表示被定义的信号将用在always块内,理解这一点很重要。并不是说reg型信号一定是寄存器或触发器的输出。虽然reg信号常常是寄存器、触发器的输出。
最新文章
- 《饥荒游戏》SW BUG 刷猴子 &; 刷淘气值 办法
- 实时控制软件设计第一周作业-汽车ABS软件系统案例分析
- 3.使用git提交项目到开源中国(gitosc)
- Lua知识备忘录
- Unity中的协程是什么?
- php排序 sort、rsort、asort、arsort、ksort、krsort
- 汉企C#面向对象——继承
- argparse 命令含参数模块
- CAGradientLayer颜色渐变器
- Jmeter-基于Ubuntu运行
- 模拟Paxos算法及其简单学习总结
- 小强的HTML5移动开发之路(16)——神奇的拖放功能
- 安卓开发笔记(十九):异步消息处理机制实现更新软件UI
- oracle根据某个字段的值进行排序
- ASP.NET Core 2.0系列学习笔记-NLog日志配置文件
- Robot Framework 自动化测试--部署篇
- 雷林鹏分享:jQuery EasyUI 窗口 - 创建简单窗口
- RecyclerView 使用指南
- iOS开发-- 使用NSNumber将int、float、long等数据类型加入到数组或字典中
- sql 字段别名里包含特殊字符
热门文章
- 分享一份软件测试项目实战(web+app+h5+小程序)
- Wireshark 过滤器的使用
- [对对子队]会议记录5.25(Scrum Meeting11)
- [no code][scrum meeting] Alpha 9
- Beta阶段第一次会议
- 北航OO第四单元总结
- (三)、Docker常用基础命令
- Noip模拟34 2021.8.9
- stm32直流电机驱动与测速学习总结
- (转)linux下错误的捕获:errno和strerror的使用,以及perror和strerror的区别