私は私のクラスの構造VHDLでROMを書いています。このデザインは6ビットアドレスを取り、6対64のバイナリデコーダーを介して実行します。各デコーダー出力は、トライステートインバーターで構成された単一の6ビットワードラインを有効または無効にします。ワードラインビット入力は、各ビットに対して「1」または「0」のいずれかです。最も重要なことは、すべてのワード行が同じ出力ベクトルに書き込むことです。
ザイリンクス9.2で構文を確認すると問題ありませんが、合成すると次のエラーが発生します。
ERROR:Xst:528 - Multi-source in Unit <ufm6bit> on signal <N0>
Sources are:
Output signal of BUFT instance <rom/word63rom/tri0/Z>
Output signal of BUFT instance <rom/word62rom/tri0/Z>
Output signal of BUFT instance <rom/word...rom/tri0/Z>
Output signal of BUFT instance <rom/word00rom/tri0/Z>
プログラムを使用してデコーダーVHDLを記述したため、ポートマップが大きすぎてここに配置できません(必要に応じてペーストビンに配置します)。単語行は次のようになります。
entity tribuffer6 is
PORT (
A : in std_logic_vector(5 downto 0);
E : in std_logic;
Z : out std_logic_vector(5 downto 0));
end tribuffer6;
使用する6つのトリバッファーは次のようになります。
entity tribuffer is
Port ( A : in std_logic;
E : in std_logic;
Z : out std_logic);
end tribuffer;
architecture Behav of tribuffer is
begin
z <= not a after 120 ps when e = '1' else
'Z' after 120 ps;
end Behav;
最後に、ワードラインは次のように結び付けられます。
SIGNAL dataline : std_logic_vector(5 downto 0);
word00rom : tribuffer6 PORT MAP (
A=>"000000",
Z=>dataline,
E=>word00en );
word01rom : tribuffer6 PORT MAP (
A=>"000000",
Z=>dataline,
E=>word01en );
エラーから、VHDLがその行に複数のドライバーを配置することに満足していないことは明らかですが、64個のバッファーベクトルを作成し、それらをチェーンしてチェックを無効にする方法はありません。また、64層の深さのORツリーも実用的ではありません。これでVHDLを正常にするには、何をする必要がありますか?
更新:いくつかのことを明確にする必要があります。ザイリンクス9.2は無料で、私の大学は安いので、クラスの要件です。唯一の基本的なゲート(および、または、nand、tristateではない)は動作可能であり、他のすべては構造的である必要があります。そして、CでVHDLを生成したのはROMでした。それ以外の場合は、多くの入力が必要だったからです。