我正在使用Xilinx在verilog中的vivado进行编程。
我想知道为什么某些输出我们使用reg
例如reg [3:0] encoder_output
我们使用它,因为我们的16到4编码器有4个输出吗?我假设每当我们需要“STORE SOMETHING”时我们都会使用reg
我的想法是对的吗?
答案 0 :(得分:3)
尽管存在所有的挫折,但这实际上并不是一个愚蠢的问题。在The Beginning中,Designer创建了网络和寄存器。网络旨在作为硬件元素之间的连接,并将值驱动到它们上面;他们没有坚持这些价值观。网络通常被声明为wire
。寄存器是数据存储元素, 保存值;它们通常被声明为reg
。随着时间的推移,很明显,这种划分(看起来像硬件"硬件")没有意义,并且至少提出了一项建议,以降低网络/寄存器的区别。语言。这从未发生过(除非你认为SystemVerilog是' Verilog',我不会这样做。)
所以,你的问题在30年前是有道理的,而你的回答将是"正确的"。
然而,在实践中,使用它并不重要。真正的区别在于,您只能从顺序代码(reg
/ etc)中分配always
,否则分配给wire
。此要求完全是任意的,仅出于历史原因而存在。你只需要学习规则。