私たちはDSPのMACユニットをシミュレートする必要がある大学向けプロジェクトを行っています。 シミュレーションのために、私はAldec Riviera Pro 2014.06をEDAプレイグラウンドを通して使用しています。 問題は、add_resという名前の32ビット符号付き信号を初期化しても、シミュレーションではその値が常にXXXX_XXXXとして表示されるということです。シミュレーション中に信号値が初期化されない
Here's the simulation's result.
ここ
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.numeric_std.all;
-----------------------------
ENTITY mac IS
PORT (B, C : IN SIGNED (15 DOWNTO 0);
clk : IN STD_LOGIC;
A : OUT SIGNED (31 DOWNTO 0));
END mac;
-----------------------------
ARCHITECTURE mac_rtl OF mac IS
SIGNAL mul_res: SIGNED (31 DOWNTO 0);
SIGNAL add_res: SIGNED (31 DOWNTO 0) := (others => '0');
BEGIN
mul_res <= B * C;
PROCESS (clk)
BEGIN
A <= mul_res + add_res;
add_res <= A;
END PROCESS;
END mac_rtl;
そして、ここでは、私は一般的にこことGoogleで検索したtestbench.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity testbench is
end entity testbench;
architecture BENCH of testbench is
component mac is
port (B, C : in SIGNED (15 DOWNTO 0);
clk : in STD_LOGIC;
A : out SIGNED (31 DOWNTO 0));
end component;
signal StopClock : BOOLEAN;
signal clk : STD_LOGIC;
signal B, C : SIGNED (15 DOWNTO 0);
signal A : SIGNED (31 DOWNTO 0);
begin
ClockGenerator: process
begin
clk <= '0';
wait for 2 ns;
while not StopClock loop
clk <= '0';
wait for 1 ns;
clk <= '1';
wait for 1 ns;
end loop;
wait;
end process ClockGenerator;
Stimulus: process
begin
B <= "0000000000000010";
C <= "0000000000001000";
wait;
end process Stimulus;
DUT : entity work.mac
port map (B, C, clk, A);
end architecture BENCH;
のコードだdesign.vhdのコードです他の人にとっては同じ問題を抱えていますが、与えられた解決策は役に立たなかった。
変数をテストベンチからリセットしましたが、何も試していません。他のものはすべて正常に動作しますが、初期化されないようです。
シグナル( 'add_res')に' out '( 'A')モードのポートを割り当てようとしていますが、これは可能ではありません – gsm
ここに示すようにフィードバックを実装しようとしているからです。 [link](http://turbo-cf.narod.ru/docs/MCF5307/MCF5307BUM-MAC.pdf)ページ2. – jimkats
モードのポートを読み取ることは、IEEE Std 1076-2008で明示的に許可されています。6.5.2インターフェイスオブジェクト宣言、para 13 "** out **。インタフェースオブジェクトの値は更新することが許されています。信号パラメータは、サブプログラムのクラス信号インタフェースオブジェクトを意味する(6.5.2パラ1参照)。コードで暗示される内容は-2008です。 – user1155120