我在一個學校項目工作,我不得不設計出售門票的機器。有很多要求,我照顧了很多人,但我有一個小問題。我,設計師決定機器中的票數是多少。然後,客戶一次購買一張票後,這個數字應該減少一個單位。它不是。哪裏不對? (當談到以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進行算術計算,使用signed或unsigned類型。 – Paebbels