Добрый вечер всем. Я начну, сказав, что я очень новичок в VHDL. У меня есть проект, который просит меня смоделировать счетчик обновления, который сделан Motorola в VHDL (MC14510B для любого любопытного).VHDL Up/Down Counter
Из таблицы видно, что если входной PE (предустановленное разрешение) переключается высоко, то 4 предустановленных значения на входном контакте p4 ... p1 передаются прямо на выход q4 ... q1.
По какой-то причине, мой код отказывается компилироваться, метание ошибка Ошибка: COMP96_0143: MC14510B.vhd: (56, 13): Объект "р" не может быть написана. Я использую Aldec как компилятор и понятия не имею, что я делаю неправильно. Я не хочу писать на вход, я хочу написать qtemp со значениями, которые хранятся в p.
Может ли кто-нибудь увидеть, что я испортил? В инструкции процесса оператор else в главном if-else - это то, что дает мне проблемы (строка p < = qtemp). Любая помощь будет чрезвычайно оценена.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.std_logic_unsigned.all;
entity MC14510B is
port (
signal pe : in std_logic;
signal ci_not : inout std_logic;
signal reset : in std_logic;
signal updown : in std_logic;
signal clk : in std_logic;
signal p : in std_logic_vector (3 downto 0);
signal q : out std_logic_vector(3 downto 0);
signal co_not : inout std_logic
);
end;
architecture myarch of MC14510B is
begin
process(pe, ci_not, reset, updown, clk)
variable qtemp : std_logic_vector(3 downto 0);
variable cotemp : std_logic;
begin
if reset = '1' then --reset condition
qtemp := "0000";
elsif clk'event and updown = '1' and ci_not = '1' then --count up
if qtemp < 15 then
qtemp := qtemp + 1;
cotemp := '1';
else
qtemp := "0000";
cotemp := '0';
end if;
elsif clk'event and updown = '0' and ci_not = '1' then --count down
if qtemp > 0 then
qtemp := qtemp - 1;
cotemp := '1';
else
qtemp := "0000";
cotemp := '0';
end if;
elsif ci_not = '0' then
qtemp := "1010";
cotemp := '1';
else
if pe = '1' then --enable preset
p <= qtemp; --output = input presets
cotemp := '1';
else
qtemp := qtemp; --output = output
cotemp := '1';
end if;
end if;
q <= qtemp;
co_not <= cotemp;
end process;
end myarch;
Список чувствительности? Боюсь, я не знаю, что это значит:/ –
Отличная возможность изучить фундаментальную концепцию VHDL; попробуйте здесь: [Список чувствительности Google VHDL] (http://www.google.dk/#q=vhdl%20sensitivity%20list) –
В скобках бит: process (pe, ci_not, reset, updown, clk) ' список чувствительности. В конце процесса подразумевается выражение 'wait on pe, ci_not, reset, updown, clk;'. Он приостанавливает выполнение процесса до тех пор, пока транзакция не произойдет на одном из этих сигналов. Наряду с часами все, что влияет на асинхронное назначение, должно быть в списке чувствительности. В этом случае, что произойдет, если P изменится, а PE - 1? Без P в списке чувствительности изменение будет пропущено. – user1155120