Нужна ваша помощь для следующего кода VHDL в инструменте Xilinx

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;

ОШИБКА ГОВОРИТ: HDLParsers:3481 - Работа библиотеки не имеет единиц измерения. Не сохранил ссылочный файл "xst/work/hdllib.ref" для него. ПОЖАЛУЙСТА ПОМОГИ

2 ответа

Хотя Мария и scary_jeff дают частичные решения, есть несколько ошибок:

Вы объявили диапазон down to вместо downto в трех местах.

Вы пропустили точку с запятой, завершающую оператор ожидания в процессе.

Вы пытаетесь прочитать переменную вне процесса (вне его области действия).

Ниже приведен код, исправляющий их, в частности, подающий сигнал:

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;

Обратите внимание, что неиспользованные пакеты Synopsys закомментированы.

Ваш код затем анализирует.

Обратите внимание, что нет назначения для outp(3).

Ваш сверточный кодер выглядит не совсем правильно, но это может быть только я.

Без испытательного стенда, обеспечивающего стимулы и ожидаемые результаты, функциональность не может быть проверена.

ff(3)<=inp; должен быть сразу после else,

Другие вопросы по тегам