Wir haben ein Projekt für die Hochschule, wo wir eine MAC-Einheit für DSP simulieren müssen. Für die Simulation verwende ich Aldec Riviera Pro 2014.06 über EDA Spielplatz. Das Problem ist, dass, obwohl ich ein 32-Bit-signed-Signal mit dem Namen add_res initialisiert hat, wird der Wert während der Simulation als XXXX_XXXX die ganze Zeit angezeigt.Signalwert wird während der Simulation nicht initialisiert
Here's the simulation's result.
Hier ist der Code des design.vhd
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;
Und hier ist der Code des 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;
Ich habe im Allgemeinen hier und in Google gesucht für andere mit dem gleichen Problem, aber die gegebenen Lösungen haben nicht geholfen.
Ich habe versucht und mit einem Reset Variable von Testbench, aber nichts. Es ist so, als würde es überhaupt nicht initialisiert werden, während alles andere normal funktioniert.
Sie versuchen, einen Port des Modus 'out' (' A') zu einem Signal ('add_res') zuzuweisen, was nicht möglich ist – gsm
Das ist, weil ich versuche, ein Feedback zu implementieren, wie es hier gezeigt wird: [link] (http://turbo-cf.narod.ru/docs/MCF5307/MCF5307BUM-MAC.pdf) Seite 2. – jimkats
Das Lesen eines Ports im Modus out ist in IEEE Std 1076-2008 6.5.2 Interface object explizit erlaubt Deklarationen, Abs. 13 "** out **. Der Wert des Schnittstellenobjekts darf aktualisiert werden und, sofern es sich nicht um einen Signalparameter handelt, gelesen werden." Ein Signalparameter bedeutet ein Klassensignalschnittstellenobjekt für ein Unterprogramm, siehe 6.5.2 Abs. 1.Was im Code enthalten ist, ist -2008. – user1155120