在Verilog 2001和SystemVerilog中,我可以使用“ +:”运算符对逻辑向量进行切片,如下所示:
module testit;
reg [31:0] avec;
reg [7:0] a0, a1, a2;
initial begin
avec = 32'hABCD1234;
a0 = avec[0*8 +: 8]; //same as: a0 = avec[7:0]
a1 = avec[1*8 +: 8]; //same as: a1 = avec[15:8]
a2 = avec[2*8 +: 8]; //same as: a2 = avec[23:16]
end
endmodule
VHDL在标准IEEE或其他软件包中是否具有类似的功能? 还是有办法将该功能实现为VHDL功能?
答案 0 :(得分:2)
这似乎有点XY Problem。 Verilog :+
(或-:
)运算符有点难以理解,以至于发生以下情况:
S(some_variable to some_other_variable)
在VHDL中是合法的,但这是
S[some_variable:some_other_variable]
在Verilog中是非法的。通常,您想做更多这样的事情:
S[some_variable:some_variable-7]
但这在Verilog中也是非法的。但是您可以做到这一点:
S[some_variable-:8]
相反。因此,在VHDL中,您不需要+:
(或-:
)运算符,只需执行以下操作即可:
S(some_variable downto some_variable-7)