我在Quartus的conv_std_logic_vector
函數中遇到了一些問題。我正在使用該函數將整數變量轉換爲std_logic_vector
。當我編譯下面的代碼中,Quartus顯示以下錯誤消息:VHDL:conv_std_logic_vector參數錯誤
錯誤(10344):VHDL表達錯誤在counter_Wbits.vhd(32):表達式具有3個元素,但必須有4個元件。
我在互聯網上搜索了這個功能,人們總是使用2個參數,發生了什麼?
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
use IEEE.std_logic_arith.ALL;
ENTITY counter_Wbits IS
GENERIC(W : NATURAL := 4);
PORT (portae : IN BIT;-- data input
portas : IN BIT;-- data input
clk : IN BIT; -- clock
clrn: IN BIT; -- clear
ena : IN BIT; -- enable
q : BUFFER STD_LOGIC_VECTOR(W-1 DOWNTO 0));-- data output
END counter_Wbits;
ARCHITECTURE arch_1 OF counter_Wbits IS
BEGIN
PROCESS(clk,clrn)
variable cont : integer range 0 to 15;
BEGIN
IF (clrn='0') THEN
q <= (OTHERS => '0');
ELSIF (clk'EVENT AND clk='1') THEN
IF (ena='1') THEN
IF(portae='1') THEN
cont := cont+1;
ELSIF (portas='1') THEN
cont := cont-1;
END IF;
END IF;
END IF;
q <= conv_std_logic_vector(cont, W-1); -- LINE 32
END PROCESS;
END arch_1;
W = 4所以W-1 = 3。你不能以3位來適應(範圍從0到15),這正是錯誤信息所說的。 (注意,如果你用任何其他的通用值來實例化這個實體,它將會被破壞,修復這個) –
謝謝你,我在想這是一個參數錯誤!它正在工作! –
我對使用'std_logic_arith'的SO例子數量感到驚訝。 「numeric_std庫已經存在了十多年,自2002年以來,我們的內部編碼標準已經要求它。自2002年以來,我所能想到的每個合成器都支持它。誰在教這個東西? – PlayDough