2012-04-08 26 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

「需要一些幫助」不是問題描述... – 2012-04-08 09:27:52

+0

如果您也發佈計數器模塊的代碼,它可能會有所幫助。 – sonicwave 2012-04-08 09:44:28

+0

我剛剛添加了計數器代碼 – user1320084 2012-04-08 09:53:39

回答

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 2012-04-08 09:40:10

+0

Heh中得到計數器的結果 - 不知道你實際上可以將信號映射到這樣的端口,如果名稱是一樣的話......好吧。 – sonicwave 2012-04-08 09:43:17

+0

哦,男人非常感謝它:) :)))但說實話,我不明白是什麼問題? – user1320084 2012-04-08 10:01:51