2

私は次のアーキテクチャを持っています:

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 アーキテクチャーではすでにデフォルト値を設定しているように思えます。誰が問題が何であるか知っていますか?

4

2 に答える 2

1

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 に don't care ビット ( -) が割り当てられます。または、すべてゼロにしたい場合は、

        value_counter   : in unsigned(7 downto 0) := (others => '0');
于 2013-02-01T13:13:49.293 に答える
1

これは「デフォルト値」ではなく、初期化するための割り当てです。また、不正な入力ポートに割り当てています。また、エンティティはアーキテクチャの前にコンパイルされるため、(不正な) 割り当てはまだ存在しません。

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

宣言で指定されたデフォルト値 (または初期値) です。

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

入力ポートのデフォルト値になりますが、それが行われたことはありません。ポートマップのすべての入力ポートを常に接続しています。これが機能する場合、私は(少し)感銘を受けましたが、接続されていない入力について満足するほどではないでしょう。そのように間違いを見逃すのは簡単すぎるようです。

于 2013-01-25T18:16:51.650 に答える