2012-04-08 17 views
0

私は既約多項式を使用しているかどうかを調べるためのカウンタを備えた疑似乱数生成器に問題があります。 geenratorは問題なく動作していますが、カウンタを使用してサブモジュールとして使用しようとするとカウンタは使用できません。何か案が ??助け擬似乱数生成器が必要です

-- x^6 + x^5 + x^3 + x^2 + 1 

Library IEEE; 
use ieee.numeric_std.all; 

use IEEE.STD_LOGIC_1164.ALL; 

use ieee.std_logic_unsigned.all; 


entity EPZG is 
    port (CLK:  in std_logic;      
     EQ:  out bit_vector(5 downto 0); 
      A :  out bit); 
end EPZG; 

architecture behaviour of EPZG is 
component Counter is port (CLK, RESET : in std_logic; 
    result: out bit_vector(5 downto 0)); 
end component; 

signal SZ: bit; 
signal SEQ : bit_vector(5 downto 0); 
signal CNT_RESET : std_logic; 
signal CNT_RESULT : bit_vector(5 downto 0); 
begin 
    SZ <= '1'; 
    PZG : process(CLK) 
    begin 
    CNT_RESET <= '1'; 

    if (CLK'event and CLK ='1') then 
     SEQ(0) <= SZ xor SEQ(5); 
     SEQ(1) <= SEQ(0); 
     SEQ(2) <= SEQ(1) xor SEQ(5); 
     SEQ(3) <= SEQ(2) xor SEQ(5); 
     SEQ(4) <= SEQ(3); 
     SEQ(5) <= SEQ(4) xor SEQ(5); 
    end if; 
end process PZG; 
EQ <= SEQ; 
CNT: Counter port map (CLK , RESET =>CNT_RESET,result =>CNT_RESULT); 
end behaviour; 

カウンタコード

  1. ライブラリIEEE。 IEEE.STD_LOGIC_1164.ALLを使用します。 ieee.std_logic_unsigned.allを使用します。

    entity Counter is port 
    (CLK, RESET : in std_logic; 
        result: out bit_vector(5 downto 0)); 
    end Counter; 
    
    architecture BEHAVIOUR of Counter is 
        signal pre_counter: std_logic_vector(5 downto 0); 
        begin 
        REG : process(CLK, RESET) 
        begin 
        if(CLK'event and CLK = '1') then 
        if (RESET = '0') then 
         pre_counter <= (others =>'0'); 
        else 
        pre_counter <= pre_counter +1 ; 
        end if; 
        end if; 
    end process; 
    result <= To_bitvector (pre_counter); 
    end BEHAVIOUR; 
    
+0

「何か助けが必要です」問題の説明ではありません... –

+0

カウンターモジュールのコードも投稿すると役に立ちます。 – sonicwave

+0

私はカウンタコード – user1320084

答えて

0

さて、もう一つは、試してみてください。あなたのカウンターモジュールは決してリセットされないので、pre_counterは決して初期化されません - 少なくともあなたはシミュレーションで未定義の結果を与えます。あなたのトップレベルのコードでそれのためのリセットを生成し、またはとしてそれを初期化し、次のいずれか

signal pre_counter: std_logic_vector(5 downto 0) := (others => '0'); 

また、あなたのカウンタモジュールでのプロセスコードはいくつかの調整を使用することができます。プロセス感度リストにはclkresetが含まれていますが、プロセスでは同期リセットが使用されています。あなたは同期リセットでのみclkセンシティビティリストのいずれかで、あなたのプロセスを行う必要があります

process(clk) 
begin 
    if(rising_edge(clk)) then 
    if(reset = '1') then 
    (...) 

または非同期リセットとセンシティビティリストの両方のclkresetと:

process(clk, reset) 
begin 
    if(reset = '1') then 
    (...) 
    elsif(rising_edge(clk)) then 
    (...) 

も気づきますrising_edge()関数の使用。これは、エッジをチェックする「現代的な」方法です。

+0

を追加しました。うまくいきませんでした。私の問題は、CNT_RESULTのカウンタの結果が得られないということです。 – user1320084

+0

Hehは、名前がまったく同じであれば、実際には信号をそのようなポートにマッピングできるかどうかわかりませんでした。 – sonicwave

+0

ああ、ありがとうございます:) :)))しかし、正直言って私は何が問題なのか理解していませんか? – user1320084