TU-München - Fakultät für Informatik

TGI - Praktikum :

VHDL Projekt 3.23


Ausarbeitung

Anhand der genauen Spezifikation wurde eine Entity mit allen Anschlüssen der Schaltung des Bausteins SN7496 programmiert, bei der die Ausgänge ausg als BUFFER charakterisiert sind, damit der Schiebefall simuliert werden kann.

In der folgenden ARCHITECTURE wurde ein Prozess schiebe für die einzelnen Arbeiten erstellt:
Clear: Clockunabhängig Setzt alle fünf Ausgänge auf Null
Serial Input: Clockabhängig Das angelegte Signal kommt auf den ersten Ausgang und wird dann entsprechend des Clock-Signales an die nächstfolgenden Ausgänge durchgeschaltet.
Preset Enable: Clockunabhängig Liegt hier 1 an, können die Preset-Eingänge dirket auf die Ausgänge gelegt werden.
Preset-Eingänge:

Somit ergibt sich folgender Quellcode der Schaltung SN7496:

Die Schaltung SN7496

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY sn7496 IS
PORT (

END sn7496;

ARCHITECTURE sn7496_innen OF sn7496 IS
BEGIN

schiebe:
PROCESS (preset, clk, pre_enable, ser_inp, clear)
BEGIN

    IF clear = '0' THEN
      ausg <= "00000";
      ELSE
      IF pre_enable = '1' THEN
        ausg (4 DOWNTO 0) <= preset (4 DOWNTO 0) OR ausg (4 DOWNTO 0);
        ELSE
        IF clk'EVENT AND clk = '1' THEN
          ausg (3 DOWNTO 0) <= ausg (4 DOWNTO 1);
          ausg (4) <= ser_inp;
        END IF;
      END IF;
    END IF;
END PROCESS;

END sn7496_innen;


Passend zur Schaltung wird eine Testbench programmiert, die einen Prozess ticker enthält, der die Clock simuliert.
Desweiteren enthält dieser Quellcode einen stimulus, der bestimmte Signale ausgibt.

Die Testbench

LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY synth;
USE synth.vhdlsynth.all;

ENTITY testbench IS
PORT (

    clk: OUT std_logic;
    preset: OUT std_logic_vector (4 DOWNTO 0);
    pre_enable: OUT std_logic;
    ser_inp: OUT std_logic;
    clear: OUT std_logic
    -- ausg nicht in Testbench
    -- vcc und GND werden nicht angesprochen, da nicht verbunden
    );
END testbench;

ARCHITECTURE tb_innen OF testbench IS
SIGNAL tempcyc: NATURAL := 0;
SIGNAL tempclk: std_logic := '0';
CONSTANT clk_period: TIME := 50 ns;
BEGIN
clk <= tempclk;

ticker:
PROCESS
BEGIN

    tempclk <= '1';
    WAIT FOR clk_period / 2;
    tempclk <= '0';
    WAIT FOR clk_period / 2;
    tempcyc <= tempcyc + 1;
END PROCESS ticker;

stimulus:
PROCESS(tempclk, tempcyc)
--Hier Variablen deklarieren
BEGIN

    IF tempcyc > 3 THEN
      clear <= '0';
    END IF;
    IF tempcyc > 5 THEN
      clear <= '1';
      ser_inp <= '1';
    END IF;
    IF tempcyc > 7 THEN
      ser_inp <= '0';
    END IF;
    IF tempcyc > 12 THEN
      ser_inp <= '0';
      pre_enable <= '1';
      preset <= "11010";
      IF tempcyc > 13 THEN
        pre_enable <= '0';
        preset <= "00000";
      END IF;
    END IF;

END PROCESS stimulus;

END tb_innen;


Um nun die Testbench mit der Schaltung zu verbinden, wird eine Top-Entity erstellt, die beide Schaltungen als Components enthält.
Sie enthält als Ports nur die Ausgänge des SN7496.

Die Top-Entity

LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY synth;
USE synth.vhdlsynth.all;

ENTITY top IS
PORT (

    ausg: BUFFER std_logic_vector (4 DOWNTO 0)
    );
END top;

ARCHITECTURE top_innen OF top IS
SIGNAL clk: std_logic;
SIGNAL preset: std_logic_vector (4 DOWNTO 0);
SIGNAL pre_enable: std_logic;
SIGNAL ser_inp: std_logic;
SIGNAL clear: std_logic;

-- name der schaltung
COMPONENT sn7496
PORT (

    clk: IN std_logic;
    preset: IN std_logic_vector (4 DOWNTO 0);
    pre_enable: IN std_logic;
    ser_inp: IN std_logic;
    clear: IN std_logic;
    ausg: BUFFER std_logic_vector (4 DOWNTO 0)
    );
END COMPONENT;

FOR BAUTEIL_eins: sn7496 USE ENTITY WORK.sn7496(sn7496_innen);

-- stimulus
COMPONENT testbench
PORT (

    clk : OUT STD_LOGIC;
    preset: OUT std_logic_vector (4 DOWNTO 0);
    pre_enable: OUT std_logic;
    ser_inp: OUT std_logic;
    clear: OUT std_logic
    );
END COMPONENT;

FOR BAUTEIL_zwei: testbench USE ENTITY WORK.testbench(tb_innen);

BEGIN
-- Bauteil_eins ist name.der.entity, Bauteil_zwei ist stimulus

BAUTEIL_eins: sn7496 PORT MAP (clk, preset, pre_enable, ser_inp, clear, ausg);

BAUTEIL_zwei: testbench PORT MAP (clk, preset, pre_enable, ser_inp, clear);

END top_innen;


Die Waves

Da der WaveView-Simulator leider eine nicht richtig arbeitende Beta-Version ist, konnte kein direktes Abbild der Waves hier eingebunden werden.
Allerdings konnte mit dem Hierarchy-Viewer die Richtigkeit der Schaltung überprüft werden.
Die hier abgebildeten Waves geben aber den Verlauf der Waves unserer Test-Entity und unserer Schaltung wieder.


Die synthetisierte Schaltung


Marcus Tönnis
26.01.1998