2016-05-10 35 views
0

我想設計一個使用d觸發器作爲組件的移位器.. 觸發器工作正常..但移位器輸出仍然未定義,我應該如何解決它? 這是shiftier代碼循環移位使用d觸發器vhdl

entity cyclicSR is -- 3-bit cyclic shift register 
port (CLK: in bit; Qout: out bit_vector(1 to 3)) ; 
end cyclicSR; 
architecture cyclicSR3 of cyclicSR is 
component DFF 
port (D, CLK: in bit; Q: out bit); 
end component; 
signal Q1, Q2, Q3: bit; 
begin 
FF1: DFF port map (Q3, CLK, Q1); 
FF2: DFF port map (Q1, CLK, Q2); 
FF3: DFF port map (Q2, CLK, Q3); 
Qout <= Q1&Q2&Q3; 
end cyclicSR3; 

我應該分配一個值到Q3 ??我怎樣才能做到這一點?

回答

1

雖然您沒有提供Minimal, Complete, and Verifiable example,但在代碼示例中可以看到問題。

您需要爲至少一個觸發器提供一個初始值或'set'。否則,它會愉快地將所有零循環移位 - BIT類型的默認值。

另外,您可以堵塞的投入比方說第一觸發器,當三者都是0:

architecture jam of cyclicsr is 

    component dff is 
     port (
      d, clk: in bit; 
      q:  out bit 
     ); 
    end component; 

    component or2 is 
     port (
      a:  in bit; 
      b:  in bit; 
      y:  out bit 
     ); 
    end component; 

    component nor3 is 
     port (
      a:  in bit; 
      b:  in bit; 
      c:  in bit; 
      y:  out bit 
     ); 
    end component; 

    signal q1, q2, q3: bit; 

    signal inp:  bit; -- added 
    signal all_zero: bit; 

begin 

ff1: dff port map (inp, clk, q1); -- was q3 
ff2: dff port map (q1, clk, q2); 
ff3: dff port map (q2, clk, q3); 

    qout <= q1 & q2 & q3; 

orgate: 
    or2 
     port map (
      a => all_zero, 
      b => q3, 
      y => inp 
     ); 
allzero: 
    nor3 
     port map (
      a => q1, 
      b => q2, 
      c => q3, 
      y => all_zero 
     ); 

end architecture; 

這一點讓:

cyclicsr_tb.png

並注意您可以設置任何模式你想要一個初始值或用一個單獨的反相器將移位寄存器變成Johnson counter