Нужна ваша помощь для следующего кода 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).
Ваш сверточный кодер выглядит не совсем правильно, но это может быть только я.
Без испытательного стенда, обеспечивающего стимулы и ожидаемые результаты, функциональность не может быть проверена.