www.mikrocontroller.net

Forum: FPGA, VHDL & Co. 4-bit_ALU


Autor: Andreas Hofmann (forrester)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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


Autor: Andreas Hofmann (forrester)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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








Autor: Andreas Hofmann (forrester)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Hofmann (forrester)
Datum:

Bewertung
0 lesenswert
nicht 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



Autor: Andreas Hofmann (forrester)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> mittels eines Tages laden

Ich meine Taktes, schneller gedacht als geschrieben :-)

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;


Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uuuups, die letzte Zeile sollte eher heissen

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

MfG
Falk

Autor: Andreas Hofmann (forrester)
Datum:

Bewertung
0 lesenswert
nicht 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;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.