在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6410|回复: 11

[求助] Verilog语言中reg变量和wire变量的问题

[复制链接]
发表于 2015-7-9 14:38:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 cxbtiger 于 2015-7-9 14:40 编辑

最近在看一些书籍上的Verilog代码时,发现一个小问题,如下。如果一个module的某个输出端口需要在always块中赋值,很多代码的做法是将该信号定义为wire类型,而同时在程序中再定义一个对应的reg型变量,在always模块中对后面这个定义的reg型变量赋值,而使用assign将reg型变量的值赋给输出端口。
举例如下:
module tx
    (
    input clk,
    input rst_n,
    output txd
    ...
    );
    reg txd_reg;
    ...
    always @(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
            txd_reg <= 1'b1;
            ...
        end
        else begin
             ...
        end
    end
    assign txd = txd_reg
    ...
endmodule

请问,这样处理有什么优点呢?为什么不将需要赋值的输出端口直接定义为reg型变量,在always块中直接对其赋值呢?
发表于 2015-7-9 14:44:34 | 显示全部楼层
有意思,我也想知道為什麼?
 楼主| 发表于 2015-7-13 10:04:29 | 显示全部楼层
请教了一个同事,他给出的解释如下,贴出来供大家参考和讨论:
这种代码风格常见于对FPGA代码的编写过程中,目的是为了更好的利用FPGA的资源。
如果将输出端口直接定义为reg型变量,在FPGA在综合时会将该变量映射到output register上;
如果按照上面给出的例子,将输出端口定义为默认的wire型,而是在代码中重新定义一个reg型变量,那么output pin只是一根线,而reg型变量则是使用了FPGA内部的逻辑资源。
发表于 2015-8-22 11:11:07 | 显示全部楼层
回复 3# cxbtiger


    不明觉厉啊
发表于 2015-8-22 11:58:52 | 显示全部楼层
学习学习
发表于 2015-8-22 13:19:18 | 显示全部楼层
最近在看跨时钟域的数据传输,在一个时钟域中输出一般都要进过寄存器打一拍,这样是数据的宽度至少为本时钟域的一个时钟宽度。这是不是也是一个原因呢?
发表于 2015-8-22 18:39:29 | 显示全部楼层
为了不使用output register?
发表于 2015-8-23 00:57:09 | 显示全部楼层
没有区别。
发表于 2015-8-23 19:14:38 | 显示全部楼层
综合结果无区别,个人喜好不同。
发表于 2015-8-26 16:51:22 | 显示全部楼层
习惯用VHDL的就看看。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-26 03:47 , Processed in 0.027911 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表