我只是在学习VHDL的语法我想将'1'
的初始值分配给Qout(0)
,其余的'0'
。
我找不到显示正确语法的参考。
这给了我一个错误:
signal Qout: Std_Logic_Vector (4 downto 0) :='1';
正如user1155120所说,在VHDL中,右侧的宽度必须与赋值运算符的左侧的宽度(<=
或:=
)匹配。
因此,您可以使用与std_logic_vector
对应的literal,它是string
:
signal Qout: Std_Logic_Vector (4 downto 0) := "00001";
(VHDL中的string
文字用双引号引起来)。或者(这是经验丰富的VHDL用户会做的)使用aggregate:
signal Qout: Std_Logic_Vector (4 downto 0) := (0 => '1', others => '0');
右侧的结构是一个聚合。聚合是一种表示composite data types的构造,例如arrays(即std_logic_vector
是什么)和record types(如C中的结构)。上面的示例说:“使元素0等于'1'
,并使所有其他元素等于'0'
。元素0是右侧,因为该数组被声明为(4 downto 0)
(而不是(0 to 4)
)。” >
使用汇总可能被认为是一种更好的方法,因为虽然不必让初学者了解,但代码更易于维护:如果信号的宽度发生变化,则不必修改汇总。” >
您可能要认真考虑为什么要完全初始化此信号。如果使用的是FPGA,则可能会根据需要初始化相应的触发器。 (由于您选择的名称,我假设该信号Qout
将变为5个触发器。)在芯片上永远不会这样-您的初始化将被忽略。您可能需要考虑是否为触发器提供复位比初始化信号更好的解决方案,例如高电平有效同步复位
process (Clock)
begin
if Reset = '1' then
Qout <= (0 => '1', others => '0');
elsif rising_edge(Clock) then
...