2014-05-21 4 views
0

저는 VHDL로 LFSR을 작성했습니다. 난 시뮬레이션에서 그것을 테스트하고 예상대로 작동합니다 (1과 512 사이의 임의의 정수를 생성). 나는 하드웨어에 넣을 때 항상 다음과 같이 "000000000"VHDL의 LFSR은 항상 0을 생성합니다

코드가 생성

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity LFSR is 
    port(clk, reset : in bit; 
     random  : out std_logic_vector (8 downto 0)); 
end entity LFSR; 

architecture behaviour of LFSR is 
    signal temp : std_logic_vector (8 downto 0) := (8 => '1', others => '0'); 
begin 

    process(clk) 
    begin 
     if(clk'event and clk='1') then 
      if(reset='0') then --reset on signal high, carry out normal function 
       temp(0) <= temp(8); 
       temp(1) <= temp(0); 
       temp(2) <= temp(1) XOR temp(8); 
       temp(3) <= temp(2) XOR temp(8); 
       temp(4) <= temp(3) XOR temp(8); 
       temp(8 downto 5) <= temp(7 downto 4); 
      else 
       --RESET 
       temp <= "100000000"; 
      end if; 
     end if; 
     random <= temp; 
    end process; 

end architecture behaviour; 

그것은 ModelSim을 테스트하고 사이클론 III DE0의 보드는 Quartus II 컴파일했다. 누구나 왜 작동하지 않는지 볼 수 있습니까? (실제로, 시뮬레이션은 괜찮습니다) 작동하게하려면 무엇을 바꾸어야합니까?

+0

'end if;'안에'random <= temp;'문을 이동하거나 민감도 목록에'temp'를 추가하고'random'가 시계의 하강 에지에서 업데이트되고있는 것을 다시 시뮬레이션하십시오. 시뮬레이션. LFSR의 기간은 186 클럭이며, 1 ~ 511 사이의 '의사'난수가 생성됩니다. 합성 중에 경고가 표시됩니까? 핀을 바르게 끝냈습니까? – user1155120

+0

나는 무작위 <= 임시 이동했다; 제안했지만 출력은 같습니다. 186 개의 의사 난수가 내 용도로 충분합니다. 이 구성 요소 또는 신호와 관련된 경고는 없습니다. 핀이 맞습니다. – Francis

+0

이것은 VHDL/시뮬레이션 문제가 아니라, Quartus II 합성/구현 문제와 유사합니다. – user1155120

답변

0

reset이 FPGA 핀에서 직접 나온 경우 과 clk이 동기화되지 않을 수 있으므로 올바른 동기 재설정 작업이 보장되지 않습니다.

에서 clk까지의 동기화를 위해 두 개의 플립 플롭을 추가하여 프로세스에서 에 사용합니다. 이 작업은 수행 할 수 있습니다 :

... 
    signal reset_meta : bit; -- Meta-stable flip-flop 
    signal reset_sync : bit; -- Synchronized reset 

begin 

    process(clk) 
    begin 
     if(clk'event and clk='1') then 
      reset_meta <= reset; 
      reset_sync <= reset_meta; 
      if (reset_sync = '0') then -- Normal operation 
... 

알테라는 External Reset Should be Correctly Synchronized이에 대한 몇 가지 의견이있다. 설명에는 비동기식 재설정이 포함 된 플립 플롭이 포함되지만 외부 재설정 동기화를 위해 두 개의 플립 플롭을 사용하면 동등하게 적용됩니다.

random <= tempif 안에 있으니 David은 을 가리킨다는 것을 기억하십시오.

+0

QuartusII가 FFs에 대한 기본값을 설정하면 재설정 없이도 실행되어야합니다. 물론 다른 하나는 외부에서 리셋의 극성이 맞습니까? 너무 빨리 달리고있어 아무것도 볼 수 없나요? 이 GPIO 출력은 무엇입니까? 출력을 어떻게 평가하고 있습니까? 사용자 메뉴얼은 [DE0 Debounce Project] (https://www.terasic.com.tw/cgi-bin/page/archive_download.pl?Language=)를 볼 때 74HC245 'debounce'버튼을 보여줍니다. 영어 & 아니오 = 364 & FID = 9ff7cfce6a1d936ac012c5454546ee8d "DE0 Debounce Project"). – user1155120

-1

행운이 없다면 합성 된 회로도를 보거나 합성 후 시뮬레이션을 수행 할 수 있습니다. 행동 시뮬레이션에서 명확하지 않은 부분이있을 경우, 종종 post-synth 모델을 위해 RTL 모델을 스왑합니다. -Jerry

관련 문제