Forum: FPGA, VHDL & Co. 4-bit_ALU


von Andreas H. (forrester)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe hier eine 4-Bit ALU die eigentlich nur ein paar
Grundrechenarten berechnen soll, je nachdem welcher Eingangsbefehlssatz
anliegt.

Jetzt hab ich aber das Problem, wenn ich es simulieren lasse liegt
überall nur 0 an den Ein- und Ausgängen.

Vielleicht kann ja jemand mal schauen ob er einen Fehler endeckt, hab
bis jetzt selber nichts gefunden.

MfG

forrester

von Falk (Gast)


Lesenswert?

Sieht erstmal gut aus. Bedenke, dass du erstmal Daten in A und B landen 
musst. Du brauchst dazu auch einen Takt. Sind in der Testbench alle 
Eingangssignale mit gültigen Werten versehen?
Solche Sachen wie

ELSIF a_IEN='0' THEN qA<=qA;

kannst du dir in VHDL sparen.

Du betreibst auch ein wenig zuviel Aufwand, die Extrazuweiseung von A 
und B kannst du dir sparen und gleich in die Prozesse reinschreiben.

MFG
Falk


von Andreas H. (forrester)


Lesenswert?

Danke erstmal für schnelle Antwort

Falk wrote:
>... erstmal Daten in A und B landen

Dachte ich wird eigentlich Mit folgenden Code gemacht:

temp_reg_a: PROCESS(clk,D)
BEGIN
    IF clk'EVENT AND clk='1' THEN
      IF   a_ien='1' THEN qA<=D;
      ELSIF a_IEN='0' THEN qA<=qA;
      END IF;
    END IF;
END PROCESS temp_reg_a;

temp_reg_b: PROCESS(clk,D)
BEGIN
    IF clk'EVENT AND clk='1' THEN
      IF   b_ien='1' THEN qB<=D;
      ELSIF b_IEN='0' THEN qB<=qB;
      END IF;
    END IF;
END PROCESS temp_reg_b;

A<= qA;
B<= qB;

Aber wenn du so fragst scheine ich mich getäuscht zu haben oder?

Falk wrote:
>in der Testbench alle Eingangssignale mit gültigen Werten versehen?

Das ist ja das Problem in der testbench sind alle Eingangssignale NULL

von Falk (Gast)


Lesenswert?

> >... erstmal Daten in A und B landen
> Dachte ich wird eigentlich Mit folgenden Code gemacht:

Ähhh, das VHDL-Modul beschreibt das Innere der ALU. Was du aber 
brauchst, ist die Ansteuerung (Testbench) drum herum. Ist wie ein 
Glühlampe und Sockel, ohne den und Strom drauf leuchtet die Glühlampe 
nicht.

> Aber wenn du so fragst scheine ich mich getäuscht zu haben oder?

Sehr wohl. Diese beiden Prozesse beschreiben zwei Speicher für A und B. 
Innerhalb der ALU. Diese Speicher müssen über clk, b_ien und D von 
aussen in der Testbensch gesteuert werden.

> Das ist ja das Problem in der testbench sind alle Eingangssignale NULL

Wo ist deine Testbench? Der VHDL-Code in deinem Postig ist das Modul. 
Eine Testbench ist ein weiteres VHDL-Modul, in welchem das zu testende 
Modul (ALU) als Komponente eingefügt wird.

MFG
Falk








von Andreas H. (forrester)


Angehängte Dateien:

Lesenswert?

Hab in der Testbench eigentlich nur den Takt "aktiviert" und das nach 
120 ns "addiert" werden soll.

Was auch funktioniert.

Ich hab schon versucht A und B Werte zuzuweisen was allerdings nicht 
funktionierte , hast vielleicht ein Tipp.

MfG

Andreas

von Andreas H. (forrester)


Lesenswert?

Ich bekomme das irgendwie mit dem Wertzuweisen nicht hin.

Wenn ich z.B. schreibe:

A <="0001"; kommt als Fehlermeldung "unexpected IDENTIFIER". Wobei A als 
SIGNAL deklariert wurde.

Hat vielleicht jemand einen Tipp, es wurde zwar gesagt das man die Daten 
mittels eines Tages laden muss, aber ich stehe etwas auf der Leitung wie 
ich das realisieren muss.

MfG

Andreas



von Andreas H. (forrester)


Lesenswert?

> mittels eines Tages laden

Ich meine Taktes, schneller gedacht als geschrieben :-)

von Falk (Gast)


Lesenswert?

Du kannst von der Testbench aus nicht auf interne Signale zugreifen, ist 
auch sinnlos. Du kannst nur auf die IO Signale des Moduls zugreifen.
Probier mal das.


------------------------------------------------------------------------ 
--------
-- Company:
-- Engineer:
--
-- Create Date:   19:53:54 12/07/2006
-- Design Name:   alu_4bit
-- Module Name: 
L:/Schaltkreisentwurf/Fach_Beleg/4bit_prozessor/tp_alu_4bit.vhd
-- Project Name:  4bit_prozessor
-- Target Device:
-- Tool versions:
-- Description:
--
-- VHDL Test Bench Created by ISE for module: alu_4bit
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
-- Notes:
-- This testbench has been automatically generated using types std_logic 
and
-- std_logic_vector for the ports of the unit under test.  Xilinx 
recommends
-- that these types always be used for the top-level I/O of a design in 
order
-- to guarantee that the testbench will bind correctly to the 
post-implementation
-- simulation model.
------------------------------------------------------------------------ 
--------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;

ENTITY tp_alu_4bit_vhd IS
END tp_alu_4bit_vhd;

ARCHITECTURE behavior OF tp_alu_4bit_vhd IS

    -- Component Declaration for the Unit Under Test (UUT)
    COMPONENT alu_4bit
    PORT(
        D : IN std_logic_vector(3 downto 0);
        F : IN std_logic_vector(3 downto 0);
        a_ien : IN std_logic;
        b_ien : IN std_logic;
        clk : IN std_logic;
        S : OUT std_logic_vector(3 downto 0)
        );
    END COMPONENT;

    --Inputs
    SIGNAL a_ien :  std_logic := '0';
    SIGNAL b_ien :  std_logic := '0';
    SIGNAL clk :  std_logic := '0';
    SIGNAL D :  std_logic_vector(3 downto 0) := (others=>'0');
    SIGNAL F :  std_logic_vector(3 downto 0) := (others=>'0');

    --Outputs
    SIGNAL S :  std_logic_vector(3 downto 0);

    -- constants
    constant t_clk : time := 100 ns;


BEGIN

    -- Instantiate the Unit Under Test (UUT)
    uut: alu_4bit PORT MAP(
        D => D,
        F => F,
        S => S,
        a_ien => a_ien,
        b_ien => b_ien,
        clk => clk
    );

-- clock generation
    tb : PROCESS
    BEGIN

        CLK <= '0';
        wait for t_clk/2;
        CLK <= '1';
        wait for t_clk/2;

    END PROCESS;

    process
    begin
      wait for t_clk/2;
      wait for 20 ns;

      d <= x"5";
      a_ien <= '1';
      wait for t_clk;

      d <= x"7";
      a_ien <= '0';
      b_ien <= '1';
      wait for t_clk;

      b_ien <= '0';
      wait for t_clk;

      F <= "0010";

    end;

END;


von Falk (Gast)


Lesenswert?

uuuups, die letzte Zeile sollte eher heissen

F <= "0100";     -- Addition
wait;            -- wait forever

MfG
Falk

von Andreas H. (forrester)


Lesenswert?

Danke das klappt, hatte es mittlerweile so ähnlich hinbekommen.

Hab allerdings noch einen kleinen Fehler bei dir endeckt.

wait for t_clk;

      F <= "0010";

    end PROCESS; -- nicht end;

END;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.