2014-02-14 20 views
0

我是一個西班牙語用戶VHDL編程的新手我試圖使CASE機器狀態,但不工作的問題。那麼我決定做ELSIF指令所有它的工作完美,但國家0010它不工作我不知道爲什麼它是一個非常簡單的程序,但不明白爲什麼y不工作EXCUSE我貧窮英語,但我盡我所能感謝我顯示下​​一個程序:爲什麼不能使用我的VHDL程序工作使用ELSIF無法識別一個狀態

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_unsigned.all; 

--definimos identidad de la interfaz 
entity interfaz is 
port(
    sen:in std_logic_vector(3 downto 0);--entrada de sensor bus de 4 bits 
    clk:in std_logic; 
    mda, mdr, mia, mir:out std_logic);--mdr,mda=motor derecho retroceso,avance == mia,mir=motor izquiero avance,retroceso 
end interfaz; 
--comenzando arquitectura de interfaz 
architecture behavior of interfaz is 
---------------------------------------------------- 
--Instruccion con herramienta elseif 
process 
begin 
wait until clk'event and clk='1'; 
if (sen=(0000)) then --alto 
mda<='0'; 
mdr<='0'; 
mia<='0'; 
mir<='0'; 
elsif (sen=(0001)) then --retroceso 
mda<='0'; 
mdr<='1'; 
mia<='0'; 
mir<='1'; 
elsif (sen=0010) then --avance 
mda<='1'; 
mdr<='0'; 
mia<='1'; 
mir<='0'; 
elsif (sen=(0100)) then --izquierda 
mda<='0'; 
mdr<='1'; 
mia<='1'; 
mir<='0'; 
elsif (sen=(1000)) then --derecha 
mda<='1'; 
mdr<='0'; 
mia<='0'; 
mir<='1'; 
end if; 

end process; 
end behavior; 

回答

2

sen=0010看起來像sen進行比較的4位向量,但它是 實際與十進制值0010 = 10 = 10比較,由於缺乏 ""周圍的值爲0010。通過添加""來解決這個問題,如 "0010"

VHDL基本上是強類型,但use ieee.std_logic_unsigned.all;增加 功能,允許std_logic_vectorinteger之間的比較,以及 爲此問題通過語法檢查。

另外:

  • process之前加入begin修復一個語法錯誤,因爲這是在architecture
  • 需要 考慮使用如果rising_edge(clk)代替wait until clk'event and clk='1'
  • case
請考慮重寫
+0

嗨莫滕感謝您的快速答覆呃我要檢查修復,並告訴它是如何goog運氣朋友 – Miguelon

+0

嗨再次莫滕謝謝你的幫助,我能夠解決我的問題是工作精細我會嘗試重寫使用的情況下,但現在它的罰款和GOODLUCK – Miguelon

相關問題