導航:首頁 > 源碼編譯 > vhdl程序無法編譯怎麼回事

vhdl程序無法編譯怎麼回事

發布時間:2024-12-19 15:21:24

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過程,但是達不到信號鎖存的功能。

閱讀全文

與vhdl程序無法編譯怎麼回事相關的資料

熱點內容
阿里android面試題 瀏覽:318
程序員描述工作內容 瀏覽:719
cmdip命令 瀏覽:745
程序員入職無學歷 瀏覽:660
android虛擬按鍵背景 瀏覽:750
android引用module 瀏覽:887
安卓程序佔用內存如何查看 瀏覽:160
java秒轉date 瀏覽:623
單片機da的用法 瀏覽:407
javareturnbreak 瀏覽:512
石化網約車優惠app怎麼申請 瀏覽:64
qq怎麼填寫伺服器 瀏覽:896
解壓詭異事件 瀏覽:221
掛淘寶店用什麼伺服器 瀏覽:889
演算法中遞歸函數的是什麼意思 瀏覽:140
我是程序員演員表路景文 瀏覽:149
乘車碼要與app互通怎麼辦 瀏覽:820
安卓手機怎麼顯示beats耳機的電量 瀏覽:617
unity安卓ui怎麼做 瀏覽:988
pdf字體變亂 瀏覽:611