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

信号用wire类型还是reg类型定义

        wire类型就是一根线,线有两端,一端发生改变,经过线传递的信号当然也会发生改变,reg类型则不同,可以把reg类型理解为存储数据的寄存器,当满足一定条件时,数值才被激活发生改变。

那么,信号和输入输出端口何时用wire类型,何时使用reg类型呢?请看下图:

首先介绍一下模块的内部和外部,见代码:

module led_breath(//模块外部input	wire	rst_n,input	wire	clk,output	reg	    led);//模块内部reg	[15:0]	timer	[2:0];reg	[1:0]	breath_type;endmodule

        输入输出(input output)端口常定义于模块的外部(我认为是额外定义的,即input output端口也属于信号),用于和其他模块交互,最终需要我们配置相关的约束文件,将引脚和他们相连进而运行代码。在括号之外的属于模块的内部的信号,属于模块的内部逻辑实现部分。

        所以对于模块内部来说,端口定义为wire或reg信号就比较好理解:我认为就可以把它们看作是变量,wire类型就是需要一次次assign赋值,例如说:规定了呼吸灯闪烁的频率为 wire 类型等于1/T,reg类型就是在always循环中自动赋值,例如说:reg类型,计时器当每次时钟翻转的时候激活,使加一。
        这也是很多教程所说的连续赋值(例如assign)是wire类型,过程赋值(例如always)是reg类型

        那么对于模块外部来说,input端口不是模块能改变的,只能接收外部引脚的输入所以只能定义为wire类型,对于output端口来说,模块可以让信号经过内部不同的操作之后,输出自己想要的值,所以可以定义为wire或reg类型,原理类似于模块内部的wire和reg类型。

        可以尝试着看以下代码:因为需要output端口的信号在模块中的操作不同,所以定义的wire/reg类型也就可以不同。

module example_module(input [3:0] a,         // 输入端口,隐含 wire 类型input [3:0] b,         // 输入端口,隐含 wire 类型output reg [3:0] sum,  // 输出端口定义为 reg 类型,因为它在 always 块中被赋值output wire carry      // 输出端口定义为 wire 类型,因为它是通过 assign 驱动的
);// 内部信号wire [4:0] result;  // result 是一个内部信号,用于存储加法结果// 组合逻辑assign result = a + b;// 时序逻辑,用于生成 sumalways @(*) beginsum = result[3:0];  // 在 always 块中赋值,sum 必须是 reg 类型end// 组合逻辑生成 carryassign carry = result[4];  // carry 是通过 assign 语句赋值,因此是 wire 类型endmodule

        总的来说,在模块内部,需要进行什么样的操作,就定义什么类型的信号(wire/reg),在模块外部,定于input端口就使用wire类型,定义ouput端口,原理类似于模块内部,根据信号的操作定义wire或者reg信号。

        本文权当记录自己对于verilog中wire类型和reg类型的理解。如有错误请一定指出,感谢阅读。

http://www.lryc.cn/news/456256.html

相关文章:

  • 与鸿蒙同行,Java Solon v3.0 正式发布(向下兼容)
  • 数据驱动投资:AI在股票市场的应用
  • Tita使用小技巧:项目类型自定义,业务管理个性化
  • 国药准字:您购药的可靠指南
  • Python类学习(2)——未完待续
  • 微前端框架 qiankun 全面解析到源码实现
  • 初始化数据的正确方式?
  • Flutter平台嵌入器
  • 微信小程序——婚礼邀请函
  • WebRTC Connection Negotiate解决
  • Redis面试篇1
  • Debezium系列之:Debezium 3.0.0.Final发布
  • 一文解决jQuery表格插件DataTable导出PDF中文乱码问题
  • 使用pytorch进行迁移学习的两个步骤
  • ChatGPT相关参数示例
  • OWASP发布大模型安全风险与应对策略(QA测试重点关注)
  • 【HarmonyOS开发笔记 2 】 -- ArkTS语法中的变量与常量
  • UI自动化测试示例:python+pytest+selenium+allure
  • C/C++ 编程小工具
  • 第四十二章 使用 WS-ReliableMessaging
  • 利士策分享,婚姻为何被称为大事?
  • malloc源码分析之 ----- 你想要啥chunk
  • 软考系统分析师知识点五:数据通信与计算机网络
  • windows客户端SSH连接ubuntu/linux服务器,三种网络连接:局域网,内网穿透(sakuraftp),虚拟局域网(zerotier)
  • Python 工具库每日推荐【openpyxl 】
  • 本地生活服务项目入局方案解析!本地生活服务商系统能实现怎样的作业效果?
  • ML 系列:【13 】— Logistic 回归(第 2 部分)
  • 45岁被裁员的程序员,何去何从?
  • 云计算Openstack Neutron
  • PointNet++网络详解