使用d触发器vhdl进行循环移位

时间:2016-05-10 18:54:38

标签: vhdl hdl

我正在尝试使用d触发器作为组件来设计一个移位器。 触发器工作正常..但移位器输出仍未定义,我该如何解决? 这是移位代码

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 个答案:

答案 0 :(得分:1)

虽然您没有提供Minimal, Complete, and Verifiable example,但问题在您的代码示例中可见。

您需要提供初始值或设置&#39;到至少一个触发器。否则它会愉快地循环移动所有零 - 类型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