【问题标题】:Translating a VHDL code to Verilog compilation error将 VHDL 代码转换为 Verilog 编译错误
【发布时间】: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 &lt;= XX_m5(23 downto 0) &amp; ""; 相当于Xp_m5b0 &lt;= XX_m5(23 downto 0); 连接两个具有相同单个数组类型的操作数将产生相同的类型,其长度是长度的总和。 (IEEE Std 1076-2008 9.2.3 添加运算符)。字符串文字 ("") 的类型由上下文(9.3.2 文字)确定。字符串文字的长度是表示的序列中字符值的数量。 (15.7 字符串文字)。

标签: vector concatenation vhdl verilog


【解决方案1】:

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

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)已经是一个数组(slice),所以这里不应该是必需的...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多