问题起因:最初学习数字逻辑设计理论的时候还没有注意到,在实验课上写代码的时候发现了一个问题:

对于源码模块的变量定义,何时定义为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信号常常是寄存器、触发器的输出。

最新文章

  1. 《饥荒游戏》SW BUG 刷猴子 & 刷淘气值 办法
  2. 实时控制软件设计第一周作业-汽车ABS软件系统案例分析
  3. 3.使用git提交项目到开源中国(gitosc)
  4. Lua知识备忘录
  5. Unity中的协程是什么?
  6. php排序 sort、rsort、asort、arsort、ksort、krsort
  7. 汉企C#面向对象——继承
  8. argparse 命令含参数模块
  9. CAGradientLayer颜色渐变器
  10. Jmeter-基于Ubuntu运行
  11. 模拟Paxos算法及其简单学习总结
  12. 小强的HTML5移动开发之路(16)——神奇的拖放功能
  13. 安卓开发笔记(十九):异步消息处理机制实现更新软件UI
  14. oracle根据某个字段的值进行排序
  15. ASP.NET Core 2.0系列学习笔记-NLog日志配置文件
  16. Robot Framework 自动化测试--部署篇
  17. 雷林鹏分享:jQuery EasyUI 窗口 - 创建简单窗口
  18. RecyclerView 使用指南
  19. iOS开发-- 使用NSNumber将int、float、long等数据类型加入到数组或字典中
  20. sql 字段别名里包含特殊字符

热门文章

  1. 分享一份软件测试项目实战(web+app+h5+小程序)
  2. Wireshark 过滤器的使用
  3. [对对子队]会议记录5.25(Scrum Meeting11)
  4. [no code][scrum meeting] Alpha 9
  5. Beta阶段第一次会议
  6. 北航OO第四单元总结
  7. (三)、Docker常用基础命令
  8. Noip模拟34 2021.8.9
  9. stm32直流电机驱动与测速学习总结
  10. (转)linux下错误的捕获:errno和strerror的使用,以及perror和strerror的区别