信号用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;

    // 时序逻辑,用于生成 sum
    always @(*) begin
        sum = result[3:0];  // 在 always 块中赋值,sum 必须是 reg 类型
    end

    // 组合逻辑生成 carry
    assign carry = result[4];  // carry 是通过 assign 语句赋值,因此是 wire 类型

endmodule

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

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

相关推荐
郝旭帅电子设计团队6 小时前
图像处理是什么
图像处理·fpga开发·郝旭帅电子设计团队·郝旭帅
weixin_4526006914 小时前
D2632大电流低差压可调线性稳压器介绍,D2632可替换MIC29302
fpga开发·机器人·无人机·电动工具·车载摄像头
ARM|X86+FPGA工业主板厂家16 小时前
基于ARM+FPGA平台在精密测控领域的应用:ZYNQ千兆以太网高速数据记录仪
arm开发·fpga开发
cmc102817 小时前
275.需要双边沿触发时,直接对时钟取反会不会出问题
fpga开发
ARM|X86+FPGA工业主板厂家19 小时前
基于ARM+FPGA平台在精密测控领域的应用:ZYNQ FPGA图像预处理加速系统
arm开发·fpga开发
LCMICRO-133108477462 天前
国产长芯微LPS7118完全pin-pin替代ADP7118,是一款采用 CMOS 技术设计的低噪声、高 PSRR、快速瞬态响应、低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·adp7118
LCMICRO-133108477462 天前
国产长芯微LM3042完全P2P替代LT3042,是一款高性能低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·lt3042
ARM|X86+FPGA工业主板厂家2 天前
基于ARM+FPGA平台在精密测控领域的应用:ZYNQ高精度温振压多参融合采集系统
fpga开发
辰丁电子3 天前
PCB设计:EMMC设计规范
fpga开发·pcb设计·pcb工艺·layout·pcb layout
小蘇的FPGA4 天前
FPGA远程更新升级和测试(MultiBoot)
fpga开发