VHDL - 分配默认值(VHDL - Assigning Default Values)

2019-10-17 15:35发布

我有以下结构:

architecture datapath of DE2_TOP is

begin
  U1: entity work.lab1 port map ( --error on this line
    clock => clock_50,
    key => key,
    hex6 => hex6,
    hex5 => hex5,
    hex4 => hex4
  );

end datapath;

这种架构显然取决于lab1中的实体。 这是我lab1中的实体和架构:

entity lab1 is
    port(
        clock : in std_logic;
        key : in std_logic_vector(3 downto 0);
        hex4, hex5, hex6 : out std_logic_vector(6 downto 0);
        value_counter   : in unsigned(7 downto 0);
        register_counter : in unsigned(3 downto 0)
        );
end lab1;

architecture up_and_down of lab1 is
    signal hex5_value : unsigned(7 downto 0);
        begin
    process(clock)
        begin
            value_counter<="00000000"; --default values?
            register_counter<="0000";
            if rising_edge(clock) then
                if (key(3)='0' and key(2)='0' and key(1)='1' and key(0)='0') then
                    value_counter <= value_counter + "1";   
                elsif (key(3)='0' and key(2)='0' and key(1)='0' and key(0)='1') then  
                    value_counter <= value_counter - "1";   
                end if;
            end if;
            hex5_value <= (value_counter - (value_counter mod 10))/10;
    end process;

end architecture up_and_down;

我收到以下错误: Error (10346): VHDL error at DE2_TOP.vhd(280): formal port or parameter "value_counter" must have actual or default value的指示线。 在我看来,我已经在我的lab1中的建筑已经设置的默认值。 任何人都知道是什么问题?

Answer 1:

这不是一个“默认值”,但分配给其初始化。 它也分配给这是非法的输入端口。 而且,所以(非法)的分配尚不存在的实体架构之前编译。

signal value_counter : unsigned(7 downto 0) := (others => 'X'); 

是一个缺省值(或初始值),在声明供给

port (
   value_counter   : in unsigned(7 downto 0) := (others => '1'); 

将是一个输入端口上的默认值,但我从来没有看到完成的。 我一直连接所有输入端口的端口映射。 如果这工作我(略)留下深刻的印象,但可能不足以值得高兴的事情未连接的输入; 它似乎太容易忽略某些错误的方式。



Answer 2:

你是不是驾驶技术到value_counter输入。 所有实体的投入必须有一个信号驱动它们,或者在实体声明中指定的默认值。

后者对于其是可选输入有用:

entity lab1 is
    port(
        clock : in std_logic;
        key : in std_logic_vector(3 downto 0);
        hex4, hex5, hex6 : out std_logic_vector(6 downto 0);
        value_counter   : in unsigned(7 downto 0) := (others => '-');
        register_counter : in unsigned(3 downto 0)
        );
end lab1;

将确保value_counter变得无关位( -分配给它,如果你不连线起来。 或者,如果你能喜欢它是全零,

        value_counter   : in unsigned(7 downto 0) := (others => '0');


文章来源: VHDL - Assigning Default Values