gpt4 book ai didi

verilog - 如何将 'assign' 值写入 Verilog 中的输出寄存器?

转载 作者:行者123 更新时间:2023-12-02 02:07:53 27 4
gpt4 key购买 nike

(在此插入非常基本的问题免责声明)

更具体地说,我有以下声明:

output reg icache_ram_rw

在代码的某些地方,我需要将零值放入此寄存器中。以下是我的尝试和结果:

assign icache_ram_rw = 1'b0;
( declarative lvalue or port sink reg icache_ram_rw must be a wire )

icache_ram_rw <= 1'b0;
( instance gate/name for type "icache_ram_rw" expected - <= read )

我到底该怎么做?!

最佳答案

从输出声明中删除“reg”,代码应该可以工作(默认为连线输出类型)。

大多数自学成才或学识较差的工程师在 Verilog 中发现有两件事很难理解:(1) 阻塞-与非阻塞赋值(请参阅我关于此主题的论文:http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf)和 (2) reg - 与 - 电线。现在让我们澄清后一个话题。

左侧 (LHS) 或过程赋值(始终、初始、任务、函数)上的任何内容都必须声明为变量类型(通常是 reg)。该语言中的其他一切都是网络(通常是电线)。没有异常(exception)。真的就是这么简单。我不知道有哪一本 Verilog 书能这么简单地阐述这一点。

这是怎么发生的?我问 Phil Moorby(Verilog 语言的发明者和好 friend )“为什么要使用 reg?” Phil 告诉我,当他发明 Verilog 时,还没有综合工具,他认为来自always block 的所有内容都将成为寄存器。他错了,现在我们被这个“reg”关键字困住了。

十多年来,我一直试图在 Veirlog 和 SystemVerilog 委员会上改变这一点。我想将所有内容声明为电线,并且第一次使用将确定“电线”的行为是否像一个reg(来自程序 block 的第一个分配和最后一个分配获胜)或像一个电线(第一个分配来自驱动源,例如模块输出或连续分配和多个驱动程序的解决方式与今天的 Verilog 一样),并且对同一信号进行程序分配和驱动程序分配是非法的。唉,我在委员会中没有获得足够的票数来成功通过这项提案。

这是我在自己的代码中最常犯的错误。只需习惯“非法 LHS 分配”或“非法连线分配”等错误消息即可。它们的意思是一样的,你忘了声明你的规则。

问候 - Cliff Cummings - Verilog 和 SystemVerilog 大师

关于verilog - 如何将 'assign' 值写入 Verilog 中的输出寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1809749/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com