将VHDL代码翻译为Verilog

时间:2018-02-12 14:22:56

标签: vector concatenation vhdl verilog

我正在将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];

1 个答案:

答案 0 :(得分:1)

""不是空字符串,而是空的数组。我还没有看到它在此上下文中使用,但它可以用于将文字转换为数组。即考虑下一个代码:

entity e is end entity;
library ieee;
architecture a of e is
    use ieee.std_logic_1164.all;
    signal a : std_logic_vector(0 downto 0);
    signal b : std_logic;
begin
    -- a <= b; -- fails
    a <= b&""; -- works
end architecture;

但由于XX_m5(23 downto 0)已经是一个数组(切片),因此不应该在这里......