Salma El-Sokkary
Salma El-Sokkary

Reputation: 94

Translating a VHDL code to Verilog compilation error

I'm translating a VHDL code to Verilog but I have a question in VHDL: What is the use of the concatenation with the empty string in these lines?

Xp_m5b0 <= XX_m5(23 downto 0) & "";
Yp_m5b0 <= YY_m5(23 downto 0) & "";

It is said that it changes the type, but the types here are the same (std_logic_vector).

Here are the lines that showed the type:

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 ;

In verilog after translation, this concatenation gives a compilation error:

assign Xp_m5b0 = {XX_m5[23:0], 0'b }; 
assign Yp_m5b0 = {YY_m5[23:0], 0'b }; 

So does it have a difference in the meaning if I removed it and made it like this:

assign Xp_m5b0 = XX_m5[23:0]; 
assign Yp_m5b0 = YY_m5[23:0];

Upvotes: 1

Views: 346

Answers (1)

JHBonarius
JHBonarius

Reputation: 11261

"" is not an empty string, but an empty array. I haven't seen it used in this context, but it can be used to convert a literal to an array. I.e. consider the next code:

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;

But since XX_m5(23 downto 0) is already an array (slice), it should not be required here...

Upvotes: 1

Related Questions