저는 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 컴파일했다. 누구나 왜 작동하지 않는지 볼 수 있습니까? (실제로, 시뮬레이션은 괜찮습니다) 작동하게하려면 무엇을 바꾸어야합니까?
'end if;'안에'random <= temp;'문을 이동하거나 민감도 목록에'temp'를 추가하고'random'가 시계의 하강 에지에서 업데이트되고있는 것을 다시 시뮬레이션하십시오. 시뮬레이션. LFSR의 기간은 186 클럭이며, 1 ~ 511 사이의 '의사'난수가 생성됩니다. 합성 중에 경고가 표시됩니까? 핀을 바르게 끝냈습니까? – user1155120
나는 무작위 <= 임시 이동했다; 제안했지만 출력은 같습니다. 186 개의 의사 난수가 내 용도로 충분합니다. 이 구성 요소 또는 신호와 관련된 경고는 없습니다. 핀이 맞습니다. – Francis
이것은 VHDL/시뮬레이션 문제가 아니라, Quartus II 합성/구현 문제와 유사합니다. – user1155120