Я работаю над школьным проектом, и мне нужно разработать машину, которая продает билеты. Есть много требований, и я позаботился о многих из них, но у меня есть небольшая проблема. Я, дизайнер, решает, что такое начальное количество билетов в машине. И затем, после того, как клиенты покупают один билет за раз, это число должно уменьшаться с одной единицы. Это не. Что не так? (Я начинаю, когда речь заходит о написании кода в VHDL).Этот код vhdl не делает то, что я хочу. Что я делаю неправильно?
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity bilete is
port(en1,en2: in std_logic;
init: in std_logic;
B: out std_logic_vector(15 downto 0);
err: out std_logic;
ok: out std_logic);
end bilete;
architecture Bil of bilete is
signal en : std_logic;
constant C: std_logic_vector(15 downto 0):=x"0002";
signal M: std_logic_vector(15 downto 0);
begin
en<= en1 nor en2;
P: process(en,init,M)
variable Verr: std_logic:='0';
variable Vok: std_logic:='0';
variable K: std_logic_vector(15 downto 0):=x"0000";
begin
if init='0' then -- inititialize the number of tickets
K:=C;
M<=K;
if en='0' then
Verr:='0';
B<=K;
Vok:='0';
else if K<0 then
Vok:='0';
B<=x"0000";
Verr:='1';
else if K>0 then
Verr:='0';
Vok:='1';
B<=K-x"0001";
K:=K-x"0001";
M<=K;
end if;
end if;
end if;
else if init='1' then -- decrement
if en='0' then
Verr:='0';
B<=M;
Vok:='0';
else if M<0 then
Vok:='0';
B<=x"0000";
M<=x"0000";
Verr:='1';
else if M>0 then
Verr:='0';
Vok:='1';
B<=M-x"0001";
M<=M-x"0001";
end if;
end if;
end if;
end if;
end if;
err<=Verr;
ok<=Vok;
end process P;
end Bil;
Если я не ошибаюсь, условный синтаксис должен быть 'elsif' вместо' else if'? И почему у вас так много «конца, если»? – annena
Это может быть как. У меня есть конец, если для каждого оператора if. Основная проблема заключается в том, что я не знаю, как обновлять количество билетов (инициализированных определенным значением) после того, как билеты продаются один за другим. –
Во-первых: пожалуйста, отформатируйте и отстудите свой код, либо используйте правильные отступы, либо инструкции elsif. Во-вторых, ваш дизайн не имеет часов. Использование коротких имен идентификаторов делает проект более быстрым или меньшим, это просто мешает нам понять ваш код ... моя последняя заметка: не делайте арифметических вычислений на std_logic_vector, используйте тип подписанный или unsigned. – Paebbels