2017-01-25 5 views
0

しばらくこの問題が発生しました。もし誰かが助けてくれれば、本当に感謝しています。何の解決策もなく大部分のコードを何度も繰り返してきました。使用中のコードがあります。このbcdカウンタは、私のプロジェクトの残りの部分でさらに使用されます。定数の8桁VHDL警告:(vcom-1263)構成仕様「all:bcd」はコンポーネントのインスタンス化ステートメントには適用されません

LIBRARY IEEE; 
    USE IEEE.STD_LOGIC_1164.ALL; 
    USE IEEE.NUMERIC_STD.ALL; 
    USE WORK.mypackage_p.ALL; 

    ENTITY bcd_8counter_e IS 
    PORT(
    res_i, clk_i, enable_i, counter_res_i  : IN STD_LOGIC; 
     bcd_array_o      : OUT bcd_array_t 
    ); 
    END bcd_8counter_e; 

    ARCHITECTURE bcd_8counter_a OF bcd_8counter_e IS 

    COMPONENT bcd 
    PORT(
     res_i, clk_i, enable_i, counter_res_i : IN STD_LOGIC; 
     bcd_o     : OUT STD_LOGIC_VECTOR(bcd_width_c-1 DOWNTO 0); 
     carry_o     : OUT STD_LOGIC 
    ); 
    END COMPONENT; 

    SIGNAL bcd_array_s : bcd_array_t; 
    SIGNAL enable_s  : STD_LOGIC_VECTOR(no_of_digits_c-1 DOWNTO 0); 
    SIGNAL carry_s : STD_LOGIC_VECTOR(no_of_digits_c-1 DOWNTO 0); 

    FOR ALL : bcd USE ENTITY WORK.bcd_e (bcd_a); 

    BEGIN 

    carry_s(0) <= enable_i; 

    gen_carry : FOR i IN 1 TO (no_of_digits_c-1) GENERATE 
     carry_s(i) <= carry_s((i-1)) AND enable_s((i-1)); 
    END GENERATE gen_carry; 

    gen_bcd : FOR i IN 0 TO (no_of_digits_c-1) GENERATE 
    digitx : bcd PORT MAP(res_i, clk_i, carry_s(i), counter_res_i, bcd_array_s(i), enable_s(i)); 
    END GENERATE gen_bcd; 

    bcd_array_o <= bcd_array_s 

    END bcd_8counter_a; 

私のパッケージファイルを作成するために、上記のBCDカウンタを使用して

LIBRARY IEEE; 
    USE IEEE.STD_LOGIC_1164.ALL; 
    USE IEEE.NUMERIC_STD.ALL; 
    USE WORK.mypackage_p.ALL; 

    ENTITY bcd_e IS 
    PORT(
    res_i, clk_i, enable_i, counter_res_i : IN STD_LOGIC; 
    bcd_o     : OUT STD_LOGIC_VECTOR(bcd_width_c-1 DOWNTO 0); 
    carry_o     : OUT STD_LOGIC 
    ); 
    END bcd_e; 
    ARCHITECTURE bcd_a OF bcd_e IS 

    SIGNAL count_s : INTEGER RANGE bcd_cnt_c DOWNTO 0; 

    BEGIN 

    PROCESS(res_i, clk_i) 
    BEGIN 
    IF (res_i = '1') THEN 
     count_s <= 0; 
    ELSIF (clk_i = '1' AND clk_i'EVENT) THEN 
     IF (enable_i = '1') THEN 
      IF(count_s >= bcd_cnt_c) THEN 
       count_s <= 0; 
      ELSE 
       count_s <= count_s + 1; 
      END IF; 
     END IF; 
     IF (counter_res_i = '1') THEN 
      count_s <= 0; 
     END IF; 
    END IF; 
    END PROCESS; 

    bcd_o <= STD_LOGIC_VECTOR(to_unsigned(count_s, bcd_width_c)); 
    carry_o <= '1' WHEN (count_s = bcd_cnt_c) ELSE '0'; 

    END bcd_a; 

8桁のBCD:1桁のため

BCDカウンタ:私は、以下の必要なコードを追加しました:

LIBRARY IEEE; 
    USE IEEE.STD_LOGIC_1164.ALL; 
    USE IEEE.NUMERIC_STD.ALL; 

    PACKAGE mypackage_p IS 

    CONSTANT freq_20k_c   : INTEGER := 2500; 
    CONSTANT bcd_cnt_c  : INTEGER := 9; 
    CONSTANT bcd_width_c  : INTEGER := 4; 
    CONSTANT no_of_digits_c  : INTEGER := 8; 

    TYPE bcd_array_t IS ARRAY(7 DOWNTO 0) OF STD_LOGIC_VECTOR(3 DOWNTO 0); 
    END PACKAGE; 

次の警告が表示されます。

警告:/home/stud/mr-131416/Desktop/VHDL_Project_Latest/src/bcd_counter8_a.vhd(15):(VCOM-1263)の設定仕様 "のすべて:BCD" noコンポーネントのインスタンス化ステートメントに適用されます。

この警告のため、コードはテストベンチのテスト/シミュレーションに合格しません。ヘルプは本当に感謝しています。

+0

あなたは、エンティティのインスタンスに適用しているので、それはコンポーネントのインスタンスには適用されません!エンティティ作業を削除し、何が起こるかを見てください。 –

+0

セミコロンがありません: 'bcd_array_o <= bcd_array_s'。 – user1155120

答えて

2

これは範囲の問題です。コンポーネント構成は、コンポーネントのインスタンス化を構成します。 generateステートメントは、ブロックステートメント(またはポートマップが指定されている場合はネストされたブロックステートメント)を生成します。

ブロックステートメント(内部ブロックまたは外部ブロック用)は、構成宣言でのみ検出されるブロック構成を使用します。

-- for all : bcd use entity work.bcd_e (bcd_a); 

begin 

    carry_s(0) <= enable_i; 

gen_carry : 
    for i in 1 to (no_of_digits_c-1) generate 
     carry_s(i) <= carry_s((i-1)) and enable_s((i-1)); 
    end generate gen_carry; 

gen_bcd : 
    for i in 0 to (no_of_digits_c-1) generate 
     for all: bcd use entity work.bcd_e (bcd_a); 
    begin 

    digitx : bcd port map (res_i, clk_i, carry_s(i), 
          counter_res_i, bcd_array_s(i), enable_s(i)); 
    end generate gen_bcd; 

    bcd_array_o <= bcd_array_s; -- CHANGED WAS MISSING SEMICOLON 

end bcd_8counter_a; 

注セミコロン:

バインディングの表示は、設定宣言を使用するか、構成仕様を移動することができますいずれかのコンポーネントのインスタンスを指定するためのブロックにダウン達する能力なしに、階層的ではありませんbcd_array_oの代入文が追加されました。

これらの変更により、デザインは分析され、警告なしで詳述されます。

ほとんどの合成ツールで構成宣言がサポートされているのに対して、合成ツールでは構成宣言がサポートされているわけではありません。

参照IEEE STD 1076年から2008年7.3コンフィギュレーション仕様、3.4コンフィギュレーション宣言、3.4.2ブロック構成

シミュレートまたはBCDの実体がないためdistxコンポーネントのインスタンス化は、未結合しているためだろう合成に失敗作業ディレクトリにあります。同期リセットを起動しない単純なテストベンチ、10ナノ秒周期でクロックを使用し、10 msの実行書き込み

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 
use work.mypackage_p.all; 

entity tb is 
end entity; 

architecture foo of tb is 
    signal reset:  std_logic;   -- '1' for RESET 
    signal clk:   std_logic := '0'; 
    signal en:   std_logic;   -- '1' for ENABLE 
    signal syn_reset: std_logic;   -- '1' for SYNCHRONOUS RESET 
    signal bcd_array: bcd_array_t; 

begin 
DUT: 
    entity work.bcd_8counter_e 
     port map (
      res_i => reset, 
      clk_i => clk, 
      enable_i => en, 
      counter_res_i => syn_reset, 
      bcd_array_o => bcd_array 
     ); 
CLOCK: 
    process 
    begin 
     wait for 5 ns; 
     clk <= not clk; 
     if now > 10 ms then 
      wait; 
     end if; 
    end process; 
STIMULI: 
    process 
    begin 
     wait for 10 ns; 
     reset <= '0'; 
     en <= '0'; 
     syn_reset <= '0'; 
     wait for 10 ns; 
     reset <= '1'; 
     wait for 20 ns; 
     reset <= '0'; 
     wait for 20 ns; 
     en <= '1'; 
     wait; 
    end process; 
end architecture; 

カウンタがイネーブルに依存することを示している第6ことを示しています数字の仕事:

bcd_8counter_e_tb.png

+0

コンパイラ警告は消えましたが、テストベンチを使用してテストすると、U出力が得られます。これは、入力がbcd_eに送られないことを意味します。 テストベンチコードが長すぎてここに入力できません。 –

+0

目に見えないコードについては、洞察力のあるコメントを提供することはできないようです。あなたはすべての入力を役に立つ状態にしていますか? – user1155120

+0

「Uは複数のドライバを持っています。アウトプットも別のプロセス(潜在的に外部ブロック(コンポーネント)内)によって駆動されていますか? – user1155120

関連する問題