在Verilog中访问wire/reg维度
在VHDL中,有许多预定义属性可以帮助使代码更通用,例如:在Verilog中访问wire/reg维度,verilog,hdl,Verilog,Hdl,在VHDL中,有许多预定义属性可以帮助使代码更通用,例如: signal sig : std_logic_vector(7 downto 0); -- ... for i in sig'range loop ... 是否有类似的方法访问Verilog导线的尺寸或reg 当然,可以将每条导线或reg的边界定义为参数,如中所示: parameter w_upper = 7; parameter w_lower = 0; wire [w_upper:w_lower] w; 但这似
signal sig : std_logic_vector(7 downto 0);
-- ...
for i in sig'range loop ...
是否有类似的方法访问Verilog导线的尺寸
或reg
当然,可以将每条导线
或reg
的边界定义为参数,如中所示:
parameter w_upper = 7;
parameter w_lower = 0;
wire [w_upper:w_lower] w;
但这似乎需要大量的开销,远不如VHDL优雅
我已经看到SystemVerilog有像
$bits
,$size
,$high
和$low
这样的东西,但是Verilog-2005或更早的版本呢?Verilog-2005没有VHDL属性的等价物('size
,'left
,'right
,'right
,'high
,等等)
正如您在问题中提到的,该功能是在SystemVerilog中引入的,您在SystemVerilog中具有以下属性:
$dimensions
,$unpacketed\u dimensions
,$left
,$right
,$low
,$high
,$increment
,$size
,感谢您的澄清。但是工程师以前是如何实现通用/参数化代码的?我在问题中给出的例子是否是一种按惯例进行的常见方法?我来自VHDL的世界,没有对通用代码的任何内置支持的编码感觉很奇怪;-)@通常,Verilog使用单个参数定义所有相关信号和任何生成代码的宽度(parameter width=8;reg[width-1:0]a;…生成(i=0;i
)。但是,最好有像$bits
、$size
和$clog2
这样的函数,因此他们添加了这些函数以使SV更简单、更通用:)