2016-04-18 12 views
-1
library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.STD_LOGIC_ARITH.ALL; 
use IEEE.STD_LOGIC_UNSIGNED.ALL; 

entity conv_enc is 
    Port (clk : in STD_LOGIC; 
      rst : in STD_LOGIC; 
      inp : in STD_LOGIC; 
      outp : out STD_LOGIC_VECTOR(3 DOWN TO 0)); 
end conv_enc; 

architecture Behavioral of conv_enc is 
begin 
process 
variable ff:std_logic_vector(3 down to 0); 
    begin 
    wait until rising_edge (clk) 
    if rst='1' then 
     ff<="0000"; 
    else 
     for i in 2 down to 0 loop 
     ff(i)<=ff(i+1); 
     end loop; 
     ff(3)<=inp; 
    end if; 
end process; 
outp(0) <= inp xor ff(1) xor ff(0) ; 
outp(1) <= inp xor ff(3) xor ff(2) xor ff(1) ; 
outp(2) <= inp xor ff(3) xor ff(2) xor ff(1) xor ff(0); 
end Behavioral; 

Die Fehlermeldung lautet: HDLParsers: 3481 - Bibliothek Arbeit keine Einheiten hat. Die Referenzdatei "xst/work/hdllib.ref" wurde nicht gespeichert. BITTE HILFEbrauchen Ihre Hilfe für die folgenden VHDL-Code in Xilinx-Tool

+1

Sie sollten nicht 'STD_LOGIC_UNSIGNED' oder' STD_LOGIC_ARITH' verwenden; Ihr Code führt keine Arithmetik durch, und selbst wenn dies der Fall wäre, würden Sie dafür das Paket "numeric_std" verwenden. –

Antwort

0

Die ff(3)<=inp; muss direkt nach der else sein.

3

Während Maria und scary_jeff geben Teillösungen gibt es mehrere Fehler:

Sie erklärt eine Reihe down to statt downto an drei Stellen.

Sie haben ein Semikolon verpasst, bei dem die wait-Anweisung beendet wurde.

Sie versuchen, eine Variable außerhalb eines Prozesses (außerhalb des Gültigkeitsbereichs) zu lesen.

Hier finden Sie Ihren Code diese Korrektur, insbesondere ff ein Signal zu machen:

library ieee; 
use ieee.std_logic_1164.all; 
-- use IEEE.STD_LOGIC_ARITH.ALL; 
-- use IEEE.STD_LOGIC_UNSIGNED.ALL; 

entity conv_enc is 
    port (
     clk: in std_logic; 
     rst: in std_logic; 
     inp: in std_logic; 
     outp: out std_logic_vector(3 downto 0) -- WAS DOWN TO 
    ); 
end entity conv_enc; 

architecture behavioral of conv_enc is 
    signal ff: std_logic_vector(3 downto 0); -- variable used outside process 
begin 
    process 
     -- variable ff: std_logic_vector(3 downto 0); -- was down to 
    begin 
     wait until rising_edge (clk); -- was miaaing terminating semicolon 
     if rst = '1' then 
      ff <= "0000"; 
     else 
      for i in 2 downto 0 loop -- was down to 
       ff(i) <= ff(i + 1); 
      end loop; 
      ff(3) <= inp; 
     end if; 
    end process; 

    outp(0) <= inp xor ff(1) xor ff(0); 
    outp(1) <= inp xor ff(3) xor ff(2) xor ff(1); 
    outp(2) <= inp xor ff(3) xor ff(2) xor ff(1) xor ff(0); 

end architecture behavioral; 

Beachten Sie die nicht benutzte Pakete Synopsys sind kommentiert werden.

Ihr Code wird dann analysiert.

Hinweis es gibt keine Zuweisung zu outp (3).

Ihre convolutionally encoder sieht nicht ganz richtig aus, aber das könnte nur ich sein.

Ohne eine Testbench, die Stimuli und erwartete Ergebnisse liefert, kann die Funktionalität nicht validiert werden.