【发布时间】:2018-02-12 14:22:55
【问题描述】:
我正在将 VHDL 代码翻译成 Verilog,但我对 VHDL 有疑问: 在这些行中与空字符串连接有什么用?
Xp_m5b0 <= XX_m5(23 downto 0) & "";
Yp_m5b0 <= YY_m5(23 downto 0) & "";
说是改了类型,但是这里的类型是一样的(std_logic_vector)。
以下是显示类型的行:
entity IntMultiplier_LogicOnly_24_24_48_unsigned_F400_uid4 is
port ( clk, rst : in std_logic;
X : in std_logic_vector(23 downto 0);
Y : in std_logic_vector(23 downto 0);
R : out std_logic_vector(47 downto 0) );
end entity;
signal XX_m5 : std_logic_vector(23 downto 0);
signal YY_m5 : std_logic_vector(23 downto 0);
signal Xp_m5b0 : std_logic_vector(23 downto 0);
signal Yp_m5b0 : std_logic_vector(23 downto 0);
XX_m5 <= X ;
YY_m5 <= Y ;
在翻译后的verilog中,这种连接给出了编译错误:
assign Xp_m5b0 = {XX_m5[23:0], 0'b };
assign Yp_m5b0 = {YY_m5[23:0], 0'b };
那么如果我把它去掉,变成这样,意思有区别吗:
assign Xp_m5b0 = XX_m5[23:0];
assign Yp_m5b0 = YY_m5[23:0];
【问题讨论】:
-
删除具有 0
0'b长度值的串联不会影响结果。 -
在 VHDL 中
Xp_m5b0 <= XX_m5(23 downto 0) & "";相当于Xp_m5b0 <= XX_m5(23 downto 0);连接两个具有相同单个数组类型的操作数将产生相同的类型,其长度是长度的总和。 (IEEE Std 1076-2008 9.2.3 添加运算符)。字符串文字 ("") 的类型由上下文(9.3.2 文字)确定。字符串文字的长度是表示的序列中字符值的数量。 (15.7 字符串文字)。
标签: vector concatenation vhdl verilog