reg和wire的区别 HDL语言

文章目录

数据类型

HDL语言有三种数据类型:寄存器数据类型(reg)、线网数据类型(wire)、参数数据类型(parameter)。

根本区别

  • reg:

    寄存器类型,要有触发,才会响应。变量可以保持它们自身的数值,直到该变量被指定了新的值为止。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。

  • wire:

    -只要输入有变化,输出就无条件的立即发生变化。表示元件间的物理连线,不能保存数据。使用在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。

什么时候要定义wire

  • assign 语句的输出
    wire为无逻辑连线。只做连线,wire本身是不带逻辑性的,所以输入什么输出就是什么。所以你尝试着用always语句对wire变量赋值。综合器就会报错。
    assign c =a&&b:综合器综合时将a&&b综合成ab经过一个与门。而c只是连接到与门输出的线。真正综合出与门的是&&。而不是c。

  • 元件例化时候的顶层输出
    (例如这里的rst_filter)

    //将呼吸灯模块通过例化到顶层
    module top_breath_led(
    input clk,
    input rst,

    复制代码
      output  led1,    //2s
      output  led2    //4s

    );

    wire rst_filter; // 按键消抖后的值

    // 实例化按键消抖模块
    keydebounce u_keydebounce (
    .clk(clk),
    .rst(rst),
    .rst_filter(rst_filter)
    );

    // 实例化呼吸灯模块
    // 2s
    breath_led #(
    .CNT_2US_MAX(7'd100),
    .CNT_2MS_MAX(10'd1000),
    .CNT_2S_MAX(10'd1000)
    ) u_breath_led1(
    .clk(clk),
    .rst(rst_filter),
    .led(led1)
    );

    // 4s
    breath_led #(
    .CNT_2US_MAX(8'd200),
    .CNT_2MS_MAX(10'd1000),
    .CNT_2S_MAX(10'd1000)
    ) u_breath_led2(
    .clk(clk),
    .rst(rst_filter),
    .led(led2)
    );

    endmodule

  • 输入信号
    输入信号一般来说你是不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。

小结

简单介绍了一下wire和reg类型的区别,对于新手来说很容易混淆。

如有任何问题可以联系邮箱:zelinliu@nuaa.edu.cn

相关推荐
156082072198 小时前
PCIE-403 Pro VU13P+47DR信号处理板
fpga开发·信号处理
156082072191 天前
基于7VX690T FPGA实现万兆TCP/IP资源和性能测试
网络协议·tcp/ip·fpga开发
nuoxin1141 天前
GSV1011-富利威-HDMI芯片选型
arm开发·驱动开发·fpga开发·ffmpeg·射频工程
ChipCamp1 天前
FPGA开发入门----1. Mux的三种写法,RTL的认知大提升!
fpga开发·时序逻辑·组合逻辑
XINVRY-FPGA2 天前
XCVP1802-2MSILSVC4072 AMD Xilinx Versal Premium Adaptive SoC FPGA
人工智能·嵌入式硬件·fpga开发·数据挖掘·云计算·硬件工程·fpga
9527华安3 天前
国产安路FPGA开发设计培训课程,提供开发板+工程源码+视频教程+技术支持
fpga开发·fpga·安路·视频教程·培训·安路fpga
UVM_ERROR3 天前
硬件设计实战:解决Valid单拍采样失效问题(附非阻塞赋值与时序对齐核心要点)
驱动开发·fpga开发·github·芯片
brave and determined3 天前
可编程逻辑器件学习(day36):从沙粒到智能核心:芯片设计、制造与封装的万字全景解析
fpga开发·制造·verilog·fpga·芯片设计·硬件设计·芯片制造
步达硬件4 天前
【FPGA】FPGA开发流程
fpga开发
我爱C编程4 天前
【仿真测试】基于FPGA的完整16QAM通信链路实现,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计
fpga开发·16qam·帧同步·卷积编码·viterbi译码·维特比译码·频偏锁定