找回密码
 注册
关于网站域名变更的通知
查看: 246|回复: 2
打印 上一主题 下一主题

关于Reg和wire型的区别

[复制链接]
  • TA的每日心情
    难过
    2025-4-9 15:22
  • 签到天数: 47 天

    [LV.5]常住居民I

    跳转到指定楼层
    1#
    发表于 2022-8-16 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 wang20030608 于 2022-8-16 10:50 编辑
    , N! y4 V( s9 k0 s" q5 D$ B( j" N, b# d) ^0 H+ f) |& E# `
    原文地址
    reg wire
    基本概念1.是存储单元,用于时序电路/ L6 \+ [3 |7 a5 c, B% Q9 D* q# C; k
    2.默认初始值为X
    1.是一条线,用于组合电路
    7 [  ^+ ~0 E" r7 P+ d2.默认初始值为Z
    % v' U$ K! {. C9 W3.模块的输入输出端口都是wire型
    赋值语句的差异1.右侧的计算结果在某一条件触发后才赋给左侧
    . C6 X7 K. [) p. S- Z, ~2.用在always/initial语句中6 x! J. I+ Q2 D. {' t3 w
    0 R- l1 `) b  X6 ]
    1.右侧的计算结果立即更新到左侧0 `- i  h. k+ i/ U, e- |- O
    2.用在assign语句中8 h6 H/ Y) S5 B* W2 X% V  n

    ) a8 z7 ~$ t9 }% x, Z

    9 U# o; T( |9 i. J
    % ~9 S) h2 S; g- n7 H* G
    端口信号和内部信号:
    " H+ \, e2 W9 N" P信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。
    $ H7 c/ \: [$ x$ g3 \/ L+ R7 B/ P1 @, e5 v% R
    对于端口信号,一旦定义位input或者output端口,默认就定义成了wire类型,输入端口只能是net类型(wire/tri)。输出端口可以是net类型,也可以是reg类型。若输出端口在过程块中赋值则为register类型;若在过程块外赋值(包括实例化语句),则为net类型。
    1 {5 h4 m, ]* |
    6 O3 q6 H* }2 \( d/ W, }内部信号类型与输出端口相同,可以是net或reg类型。判断方法也与输出端口相同。若在过程块中赋值,则为reg类型;若在过程块外如assign赋值,则为net类型。
    2 q& ^: Y. k8 i2 e& P. ^/ X
    + h: P; O' E" c% m9 v+ i3 G7 {若信号既需要在过程块中赋值,又需要在过程块外赋值。这种情况是有可能出现的,如决断信号。这时需要一个中间信号转换。
    1 P2 V% Y. i+ z2 c$ G- ^
    7 w. I3 m8 p! cinout是一个双向端口, inout端口不能声明为reg类型,只能是wire类型。地址* p+ Z! P  m6 B; d& F0 r) x  l
    关于 wire (可描述组合逻辑)
    在Verilog中, wire 可以纯粹看作一根导线(或者任意位宽的总线)。在使用 wire 时需要注意以下几点语法规则:
    • wire 类型用于将模块例化时的输入输出端口连接到你设计的电路的其他地方。
    • wire 类型在模块声明也作为输入输出。
    • wire 类型必须被其他东西驱动而不能用于存储数据。
    • wire 类型在 always@ 块中不能作为 = 或 <= 的左值。
    • wire 类型是 assign 语句中左值的唯一合法类型。
    • wire 类型可以将两个基于Verilog的设计相结合,是一种无状态的方法(并不是很明白这里指的是什么意思)。
    • wire 类型只能用于组合逻辑建模。3 ?& V9 S# N6 h0 ?  |5 I  ]
    下面这段程序给出了几种 wire 类型合法使用的例子
    关于 reg (既可描述组合逻辑也可描述时序逻辑)
    reg 和wire有点类似,但能够存储信息(状态),类似寄存器。在使用 reg 时有以下这些语法规则:
    • reg 类型可以用于在模块例化时连接其输入。
    • reg 类型不能用于在模块例化时连接其输出。
    • reg 类型可以在模块声明时作为输出。
    • reg 类型不能在模块声明时作为输入。
    • reg 类型是 always@ 块中作为 = 或 <= 左值的唯一合法类型。
    • reg 类型是 initial 块中作为 = 左值的唯一合法类型(用于Test Bench)。
    • reg 类型不能作为 assign 语句的左值。
    • reg 类型能用于创建寄存器,以用于 always@(posedge Clock) 块。
    • reg 类型既可以描述组合逻辑也可以描述时序逻辑。
      1 V1 U& [/ v9 c' G$ y
    下面这段程序给出了几种 reg 类型合法使用的例子

    + m3 R6 \2 }# M

    该用户从未签到

    2#
    发表于 2022-8-16 13:39 | 只看该作者
    内部信号有所不同' O% q/ ~. W! K* j! \. B4 L

    该用户从未签到

    3#
    发表于 2022-8-19 15:45 | 只看该作者
    他们的区别其实还是有一些的,如何记住这么多,其实很难记住的,最好的方式还是在写代码的过程中慢慢理解他们。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-1 13:22 , Processed in 0.140625 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表