2017-03-15 9 views
0

複数のフリップフロップをレジスタとして使用するためにgenerate関数を使用しようとしています。私は信号ビットベクトルを持っています。これは、各ビットが等価なフリップフロップへのD入力であることを望みますが、コンパイル後、出力Qにはドライバがないという警告が表示されます。VHDL BIT_VECTORをD入力として使用するために複数のフリップフロップエンティティを生成する方法

ここで私はその後、32フリップフロップを生成し、フリップフロップのD入力のそれぞれにbit_vector信号和の各ビットを設定しようとするフリップフロップ

entity flipflop is 
    port( 
     D,CLK,RST: in BIT; 
     Q: out BIT 
    ); 
    end entity; 
architecture behavioral of flipflop is 
begin 
    P1: process(RST,CLK) 
    begin 
     if(RST='1')then 
      Q <= '0'; 
     elsif(CLK='1' and CLK'EVENT) then 
      Q <= D; 
     end if; 
    end process; 
end behavioral; 

の動作を定義します。

SIGNAL Q,D: BIT_VECTOR (31 DOWNTO 0); 
    SIGNAL SUM: BIT_VECTOR (31 DOWNTO 0); 
BEGIN 
    register_maker : for i in 0 to 31 generate 
    BEGIN 
     flipflop_inst : ENTITY work.flipflop port map 
      (Q => Q(i), 
      CLK => CLK, 
      RST => RST, 
      D => D(i) 
     ); 
    end generate register_maker; 

    process (D,SUM) 
    begin 
     for i in 0 to 31 loop 
      D(i) <= SUM(i); 
     end loop; 
    end process; 

私は間違っているとは思うが、フリップフロップの出力は変わらない。

おかげ

+1

'if(CLK = '1'とCLK'EVENT)'の代わりに 'if(rising_edge(CLK))'を使用してください。 –

+0

申し訳ありませんが、私の間違いです、私はあなたのコードを誤解しました。私は一般的にbit_vectorが使われているのを見ていませんが、すべて – gsm

+0

です。コンパイル後に*書くと出力Qにドライバがないという警告が出ます*あなたはシミュレーションのためのコンパイルについて話しています。最初に 'flipflop'をコンパイルし、次に他のデザインをコンパイルしてもよろしいですか?そして、それはあなたがシミュレートしようとした他のデザインですか? –

答えて

0

process (D,SUM)はD.すなわちに依存すべきではありません合計が変化したときにのみDを変更したいとします。彼らは同じ長さを持っているように、これは単純に行うことができます。

D <= SUM; 

その後、フリップフロップの出力が変更されていないと言います。テストベンチでRST'1'に固執している可能性がありますか? (私たちはすべて間違っていました;))

std_logicstd_logic_vectorはなぜ使用していないのですか?

関連する問題