Quartusのconv_std_logic_vector
関数に問題があります。私は整数変数をstd_logic_vector
に変換する関数を使用しています。VHDL:conv_std_logic_vectorパラメータのエラー
エラー(10344):counter_Wbits.vhd(32)でVHDL式エラー:私は以下のコードをコンパイルするとき、のQuartusは、次のエラーメッセージを示す式は、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'ライブラリは10年以上にわたって利用されており、私たちの内部のコーディング標準は2002年以来それを必要としています。私が2002年以来考えているすべてのシンセサイザはそれをサポートしています。誰がこのことを教えていますか? – PlayDough