は、ポートで使用するタイプを宣言したが、私は問題 と思いVHDLパッケージとSTD_LOGIC_VECTOR
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
-- Custom types --
package Common is
type Mem_in is array (2**6 to 0) of STD_LOGIC_VECTOR (11 downto 0);
type DinDout is range 11 downto 0;
end package Common ;
-- Use Custom Type
use work.Common.all;
entity MUX is
Port (
D : in Mem_in;
Q : out DinDout;
SEL : in STD_LOGIC_VECTOR (11 downto 0)
);
end MUX;
STD_LOGIC_VECTORを使用できないのはなぜですか?私がDinDoutに変更した場合は、アーキテクチャ上の別の問題が発生します:to_integerは宣言されていません。索引付けされた名前はdindoutではありません。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
-- Custom types --
package Common is
type Mem_in is array (2**6 to 0) of STD_LOGIC_VECTOR (11 downto 0);
type DinDout is range 11 downto 0;
end package Common ;
とエンティティ使用して、パッケージ共通:
-- Use Custom Type
use work.Common.all;
entity MUX is
Port (
D : in Mem_in;
Q : out DinDout;
SEL : in DinDout
);
end MUX;
architecture Arc of MUX is
begin
Q <= D(to_integer(unsigned(SEL)));
end Arc;
どのように私は私のパッケージにSTD_LOGIC_VECTORを追加したり、これらの2つのエラーを解決することができます:to_integerが宣言されていません。索引付けされた名前は珍しいものではありませんか? (それはあなたが引用されている単一のファイルである場合)
おかげ
上記のコンテキスト節のコンテキスト項目がないMUXエンティティ宣言に加えて、 'Mem_in'配列型は2 \ * \ * 6 + 1(2 \ * \ * 6 ** downto ** 0)の要素を持ちます。 SELのいくつかの値に対して制約違反を引き起こす2 \ * \ * DinDoutの長さではなく、同じ数の別個のインデックスを使用します。あなたのメモリサイズは、SELの長さに匹敵する2の累乗でなければなりません。非常に多くのビット(2 \ * \ * 6 + 1 * 12 - メモリ要素の長さまたは780)をポートに与えることは珍しいようです。このメモリ読み出しMUXは、ブロックメモリ。 – user1155120
タイプDinDoutは、11downto 0の値域を持つ抽象的な数値型であり、D(to_integer(unsigned(SEL)))はインデックスの範囲が11downtoのstd_logic_vectorsの配列であるDのインデックス付き要素ですあなたの受け入れられた答えには対処していないことに注意してください* ...またはこれらの2つのエラーを解決してください:...索引付けされた名前はdindoutではありませんか*複数のエラーがあります – user1155120