2017-05-18 6 views
1

Ich schreibe unten Vhdl Code & Testbench Code für implementieren LFSR auf ISE. Ich hole LFSR-Code von diesem Pfad auf ISE. Sprache Templates - VHDL - Synthese Konstrukten - Coding Beispiele --- Zähler --- LFSRVHDL-Implementieren LFSR

Mein Problem in Simulink ist (isim), i Gesicht immer mit 'U' Zeichen für out_lfsr. Können Sie mir bitte helfen?

VHDL-Code:

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



entity lfsr is 

port(rst,clk,clk_en:in std_logic; 
out_lfsr: inout std_logic_vector(31 downto 0); 
init_value:in std_logic_vector(31 downto 0) 
); 

end lfsr; 

architecture Behavioral of lfsr is 


begin 

process(clk) 
begin 
    if (clk'event and clk ='1') then 
     if (rst = '1') then 
     out_lfsr <= init_value; 
     elsif clk_en='1' then 
     out_lfsr(31 downto 1) <= out_lfsr(30 downto 0) ; 
     out_lfsr(0) <= not(out_lfsr(31) XOR out_lfsr(21) XOR out_lfsr(0)); 
     end if; 
    end if; 
end process; 


end Behavioral; 

Prüfstand:

LIBRARY ieee; 
USE ieee.std_logic_1164.ALL; 



ENTITY tb_lfsr IS 
END tb_lfsr; 

ARCHITECTURE behavior OF tb_lfsr IS 

    -- Component Declaration for the Unit Under Test (UUT) 

    COMPONENT lfsr 
    PORT(
     rst : IN std_logic; 
     clk : IN std_logic; 
     clk_en : IN std_logic; 
     out_lfsr : INOUT std_logic_vector(31 downto 0); 
     init_value : IN std_logic_vector(31 downto 0) 
     ); 
    END COMPONENT; 


    --Inputs 
    signal rst : std_logic := '0'; 
    signal clk : std_logic := '0'; 
    signal clk_en : std_logic := '1'; 
    signal init_value : std_logic_vector(31 downto 0) := (others => '1'); 

    --Outputs 
    signal out_lfsr : std_logic_vector(31 downto 0):=(others => '0'); 

    -- Clock period definitions 
    constant clk_period : time := 10 ns; 

BEGIN 

    -- Instantiate the Unit Under Test (UUT) 
    uut: lfsr PORT MAP (
      rst => rst, 
      clk => clk, 
      clk_en => clk_en, 
      out_lfsr => out_lfsr, 
      init_value => init_value 
     ); 

    -- Clock process definitions 
    clk_process :process 
    begin 
     clk <= '0'; 
     wait for clk_period/2; 
     clk <= '1'; 
     wait for clk_period/2; 
    end process; 



END; 

Antwort

0

Sie haben diesen Block in anderen zurückzustellen, damit es funktioniert. Beim Zurücksetzen lädt es den Eingangswert zum Ausgang.

reset_p: process begin 
    rst <= '1'; 
    wait for 10 * clk_period; 
    rst <= '0'; 
    wait; 
end process; 

Ich denke, es wäre auch besser, nicht zu verwenden inout, da es nicht immer die richtige für die Synthese ist, aber die interne Signal verwenden, in dem Sie out_lfsr Wert speichern.

entity lfsr is 

port(
    rst,clk,clk_en:in std_logic; 
    out_lfsr: out std_logic_vector(31 downto 0); 
    init_value: in std_logic_vector(31 downto 0) 
); 

end lfsr; 

architecture Behavioral of lfsr is 

signal s_out_lfsr : std_logic_vector(31 downto 0); 
begin 

process(clk) 
begin 
    if (clk'event and clk ='1') then 
     if (rst = '1') then 
     s_out_lfsr <= init_value; 
     elsif clk_en='1' then 
     s_out_lfsr(31 downto 1) <= s_out_lfsr(30 downto 0) ; 
     s_out_lfsr(0) <= not(s_out_lfsr(31) XOR s_out_lfsr(21) XOR s_out_lfsr(0)); 
     end if; 
    end if; 
end process; 

out_lfsr <= s_out_lfsr; 

end Behavioral; 

Ich bin nicht ganz sicher darüber, wie Ihr Code in Coding Examples war.

+0

Vielen Dank, es funktioniert! :-) –