0

構造的プログラミングでこれを行う方法がわかりません...

「4つのDフリップフロップで構成された4ビットのバイナリカウンタ(リセット信号付き)。」

イン/アウトを接続するには?

エンティティ宣言は次のとおりです。問題の核心は最後の行にあります。

                    --FFD
            entity FFD is
            port( CLK, D, reset : in STD_LOGIC;
                Q : out STD_LOGIC
               );
            end FFD;
            
            architecture behaviour of FFD is
            begin
                process(CLK, reset)
                begin
                if reset='1' then Q<='0';  
                elsif (clk'event and clk='1') then Q<=D;
                else null;
                end if;
                end process;
            end behaviour;
        ----------------------------------------------------------  
            
        --counter

        library IEEE;
        use IEEE.std_logic_1164.all;
        use IEEE.numeric_std.all;

            entity counter is
            port(clk : in std_logic;
               reset : in std_logic;
               count : out std_logic_vector(3 downto 0));
            end entity counter;

                architecture rtl of counter is
            
            --
            component FFD 
            port (CLK, D, reset : in STD_LOGIC;
                       Q : out STD_LOGIC);
            end component;
            
            signal q0,q1,q2: std_logic:='0';
            signal q3: std_logic:='1';
            
            begin
            -- 

            ---
            inst1: FFD port map (CLK=>clk, D=>q3, reset=>reset, Q=>q0);
            inst2: FFD port map (CLK=>clk, D=>q0, reset=>reset, Q=>q1);
            inst3: FFD port map (CLK=>clk, D=>q1, reset=>reset, Q=>q2);
            inst4: FFD port map (CLK=>clk, D=>q2, reset=>reset, Q=>q3);
            inst5: count<=q3&q2&q1&q0;
            end architecture rtl;

私の問題は、この最後の行にあります。

4

2 に答える 2

3

接続に問題はありません (正しくリング カウンターを形成します) が、多くのことが起こることはありません。リセット後、すべてのフリップフロップにはゼロが含まれており、各クロックパルスでリングを循環しますが、実際に出力に変化を引き起こすことはありません. 信号を宣言するときのq3のデフォルト値「1」の割り当ては、回路が動作(またはシミュレーション)を開始するとすぐにフリップフロップの実際の出力によって上書きされ、一般にハードウェアを初期化する間違った方法です.

リセット信号をアサートしたときに、ハードウェアが適切な状態に移行することを確認する必要があります (つまり、1 つのビットがセットされ、他のすべてがクリアされます)。これを行う 1 つの方法は、Q3 の入力が設定された FF を使用することです。セットされた (リセットではなく) 信号を持つフリップフロップがない場合は、入力と出力にインバーターを配置することでフリップフロップをシミュレートできます。リセットを適用します。また、いくつかの中間信号を作成し、D 入力用のマルチプレクサを作成して、ロード可能なカウンター、またはその他のさまざまなソリューションのいずれかを構築することもできます...

于 2012-01-07T01:14:01.217 に答える