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

reg和wire的区别 HDL语言

文章目录

    • 数据类型
    • 根本区别
    • 什么时候要定义wire
    • 小结

数据类型

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


http://www.kler.cn/a/307887.html

相关文章:

  • 工作和学习遇到的技术问题
  • Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解
  • 阿里云centos7.9服务器磁盘挂载,切换服务路径
  • SQL,力扣题目1127, 用户购买平台
  • 群控系统服务端开发模式-应用开发-前端个人信息功能
  • docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled
  • chapter14 数据结构与集合源码 知识点总结Note
  • Kotlin 极简小抄 P2(插值表达式、运算符、选择结构赋值)
  • SpringBoot的Web开发支持
  • AG32 MCU的引脚特点及功耗说明
  • 【python数据处理】保存网页
  • C/C++实现植物大战僵尸(PVZ)(打地鼠版)
  • Transformer-Adaboost多输入单输出回归预测神经网络【MATLAB】
  • Alinx MPSoC驱动开发第11章异步IO实验按下按键报IO Possibile后结束进程
  • 【运维】好用的线上项目运维命令
  • ASPICE培训:打造卓越的汽车软件开发能力
  • 比传统机器学习更先进的深度学习神经网络的二分类建模全流程教程
  • 【网络原理】❤️Tcp 常用机制❤️ —— 延时应答,捎带应答, 面向字节流, 异常情况处理。保姆式详解 , 建议收藏 !!!
  • Kafka支持SSL/TLS协议技术深度解析
  • Android13 下载apk并安装apk
  • 跳出大厂圈子——普通程序员如何开启逆袭之路
  • mac上什么压缩软件没有广告,苹果电脑解压软件BetterZip有广告吗
  • 深入理解MATLAB中的事件处理机制
  • ROS组合导航笔记:融合传感器数据
  • 嵌入式数据库sqlite和rocksdb的介绍以及对比
  • 分治算法归并排序