2017-03-15 50 views
0

我正在嘗試使用生成函數使多個觸發器被用作寄存器。我有一個信號位矢量,我希望每一位都是D輸入到它的等效觸發器,但編譯後我得到警告,輸出Q沒有驅動程序。VHDL如何生成多個觸發器實體使用BIT_VECTOR作爲D輸入

在這裏,我限定觸發器

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; 

我然後生成32個觸發器和嘗試將bit_vector信號總和的每個比特設置爲每一個的觸發器的輸入端d的行爲。

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在testbench中卡在'1'? (我們都犯了這個錯誤;))

我想問你爲什麼不使用std_logicstd_logic_vector

相關問題