1. VHDL程序編譯出錯,報錯can't determine definition of operator ""+"" -- found 0 possible definitions
修改後的code如下:
1:將你程序中的bit_vector改為 std_logic_vector,USE IEEE.STD_LOGIC_UNSIGNED.ALL以及USE IEEE.STD_LOGIC_SIGNED.ALL可以使得「+」兩方具有不同的數據類型,但不支持bit_vector。
2:USE IEEE.STD_LOGIC_UNSIGNED.ALL以及USE IEEE.STD_LOGIC_SIGNED.ALL用一個就可以了,刪除了USE IEEE.STD_LOGIC_SIGNED.ALL。
請採納!!
library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDERCTL IS
PORT( in1 : in std_logic_vector(2 downto 0);
in2 : in std_logic_vector(2 downto 0);
cntl : in std_logic;
pout : out std_logic_vector(2 downto 0));
END entity ADDERCTL;
ARCHITECTURE FUNC OF ADDERCTL IS
BEGIN
PROCESS(cntl)
BEGIN
if (cntl='1') then pout<=in1+in2;
end if;
end process;
end ARCHITECTURE FUNC;
2. 崩潰了!VHDL程序老是編譯通不過!
你的原始程序做了少許的修改,其實你的程序沒有錯誤。應該是在編寫代碼的時候改變了輸入法,導致編譯錯誤的,以後要注意了。
把那個coi1_out統統刪除在敲一遍就好了。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY PULSE IS
PORT ( RESET : IN STD_LOGIC;
CP : IN STD_LOGIC;
direction : IN STD_LOGIC;
A_A : OUT STD_LOGIC;
n_A : OUT STD_LOGIC;
B_B : OUT STD_LOGIC;
n_B : OUT STD_LOGIC );
END PULSE;
ARCHITECTURE behv OF PULSE IS
TYPE states IS (s0,s1,s2,s3);
signal current_state,next_state : states :=s0;
BEGIN
REG : PROCESS(CP,RESET)
BEGIN
IF (RESET = '1')THEN
current_state <= s0;
ELSIF (CP = '1' AND CP'EVENT) THEN
current_state <= next_state;
END IF;
END PROCESS;
CORN:PROCESS (current_state,direction)
variable coi1_out:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
CASE current_state IS
WHEN s0 => coi1_out:="1100";
IF direction = '1' THEN
next_state <= s1;
ELSE
next_state <= s3;
END IF;
WHEN s1 => coi1_out:= "0110";
IF direction = '1' THEN
next_state <= s2;
ELSE
next_state <= s0;
END IF;
WHEN s2 => coi1_out:= "0101";
IF direction = '1' THEN
next_state <= S3;
ELSE
next_state <= s1;
END IF;
WHEN s3 => coi1_out:= "1001";
IF direction = '1' THEN
next_state <= s0;
ELSE
next_state <= s2;
END IF;
WHEN others => coi1_out:= "1100";
IF direction = '1' THEN
next_state <= s1;
ELSE
next_state <= s3;
END IF;
END CASE;
A_A <= coi1_out(3);
n_A <= coi1_out(1);
B_B <= coi1_out(2);
n_B <= coi1_out(0);
END PROCESS;
END behv;
3. quartus怎麼不能開始編譯我打開了下載的一個vhdl 語言的一個文件,怎麼不能開始編譯
首先看看這個vhdl語言文件是不是在一個工程中,並且實體名必須和工程名相同,這樣才可編譯。第二是模擬,建立了波形文件,要打開模擬工具,進行功能模擬,輸出模擬圖才可正確模擬。
4. vhdl編譯出錯
就是說你在你的DESIGN中已經將pn定義為一個信號或者一個邏輯IO口了,這個檢查下有沒重復命名的變數就行
至於"inst"檢測出重復,這是你畫一個.bdf文件經常會出現的問題,只需要你把.bdf文件中的所有使用元件重新命名就行,特別是名字為inst,inst0,inst1這幾個元件,後面多加幾個數,就能解決問題
5. VHDL編譯錯誤 Error (10465)
你已經在埠聲明中聲明了埠goal_speed,就不能再將其聲明為常數了。
另外,賦值語句並無規定要將雙引號去掉。是否使用雙引號,要看你的賦值類型,字元串文字才需要用雙引號將其括在其中。
6. VHDL 四人搶答器程序哪錯了,編譯不出來,錯誤不知道咋那麼該
你的程序能夠編譯,在MAXPLUS裡面是可以編譯的。如果你使用MAXPLUS不能編譯,需要檢查編譯的是否為當前文件,選擇File-Project-Set project to current file。如果你用的是quartus,檢查一下你的文件是否設為頂層文件,否則一定報錯。
但是需要說的是,你的程序不能實現搶答器的功能。
從模擬來看,Dout搶答結果不能正確顯示第一個搶答的序號。上圖S4第一個搶答,輸出為8(正確),但是當S3第二個按下搶答器後,輸出變成了C(1100),四個人都按下之後編程了F(1111)。
建議你思考:
使用時序電路(觸發器)來做這個任務。因為組合電路不能實現搶答器的功能。雖然你使用了Process過程,但是達不到信號鎖存的功能。