我正在为决赛制作一些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;
答案 0 :(得分:1)
通过将空字符串""
连接到std_logic
值,将返回std_logic_vector
。如果在算术表达式中使用std_logic
值,这将非常有用。然后可以将得到的std_logic_vector
转换为所需类型,例如signed
(对于1位宽的数字而言毫无用处),unsigned
,integer
...
因此,在您的示例中,仍然需要类型转换,因为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;