VHDL,混淆语法“”&

时间:2013-06-23 14:30:22

标签: syntax concatenation vhdl

我正在为决赛制作一些VHDL代码并遇到一些令人困惑的语法。我知道这是因为类型差异,但并不真正理解发生了什么。 我只会发布代码的相关部分和使用的库

USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;

count : IN std_logic;
SIGNAL qi : unsigned(w downto 0);

qi <= qi + ("" & count);

基本上我的问题是,'“”&amp; '是什么,与“”的连接会自动转换为其他类型吗?

提前致谢

修改

类型转换混淆的原因是这里的其余代码

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;

ENTITY counter_alt IS
GENERIC (w : integer := 8);
PORT (clk, load, count : IN std_logic;
        d : IN unsigned(w-1 downto 0);
        q : OUT unsigned(w-1 downto 0);
        co : OUT std_logic);
END counter_alt;


ARCHITECTURE bhv OF counter_alt IS
SIGNAL qi : unsigned(w downto 0);

BEGIN
    PROCESS(clk)
        BEGIN
        IF rising_edge(clk) THEN

        IF load='1' THEN 
        qi <= '0' & d;
        ELSE qi <= qi + ("" & count);
        END IF;
        END IF; 

    END PROCESS;
q <= qi(w-1 downto 0);
co <= qi(w); 
END bhv;

3 个答案:

答案 0 :(得分:1)

通过将空字符串""连接到std_logic值,将返回std_logic_vector。如果在算术表达式中使用std_logic值,这将非常有用。然后可以将得到的std_logic_vector转换为所需类型,例如signed(对于1位宽的数字而言毫无用处),unsignedinteger ...
因此,在您的示例中,仍然需要类型转换,因为VHDL不会自动从std_logic_vector转换为unsigned

答案 1 :(得分:1)

空字符串""在该上下文中是空的无符号向量,因为包含USE ieee.numeric_std.ALL;,相关表达式涉及无符号类型的信号。

因此("" & count)的结果具有无符号类型,因此可以在没有任何进一步类型转换的情况下使用。在这种情况下,带有""的concat用作对无符号的隐式类型转换。

答案 2 :(得分:0)

“”只是指定一个空字符串文字。通过将它与std_logic连接,它变成了一些基于std_logic的数组类型。由于用于添加无符号的“+”运算符仅支持无符号或自然类型的值(pre-vhdl-2008),因此字符串值将解析为unsigned。

使用字符串文字值添加时会发生相同类型的分辨率:

qi <= qi + "0101" ;

使用VHDL-2008,您现在可以添加带有std_ulogic的unsigned(结果也是std_logic):

qi <= qi + count;