mikrocontroller.net

Forum: FPGA, VHDL & Co. STimuli Testbench


Autor: FPGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ! Frage wieso werden im modelsim aus dieser tb keine signale 
generiert, zumindest clk müsste sich ja periodisch änder aber es sieht 
so aus als ob überhaupt keine signale aus ISE an modelsim weitergegeben 
werden

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;

ENTITY tb IS
END tb;

ARCHITECTURE behavior OF tb IS

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT fastcount
    PORT(
         SDA : INOUT  std_logic;
         SCL : INOUT  std_logic;
         clk : INOUT  std_logic;
         puls : INOUT  std_logic
        );
    END COMPONENT;


  --BiDirs
   signal SDA : std_logic;
   signal SCL : std_logic;
   signal clk : std_logic;
   signal puls : std_logic;

   -- Clock period definitions
   constant clk_period : time := 1us;

BEGIN

  -- Instantiate the Unit Under Test (UUT)
   uut: fastcount PORT MAP (
          SDA => SDA,
          SCL => SCL,
          clk => clk,
          puls => puls
        );


Testbench_Process : Process
    Begin
    Wait for 10 ns;
    SDA <= '1';
    Wait for 10 ns;
    SDA <= '0';
    Wait for 10 ns;
    SDA <= '1';
    Wait;
    End Process;


   -- Clock process definitions
   clk_process :process
   begin
    clk <= '0';
    wait for clk_period/2;
    clk <= '1';
    wait for clk_period/2;
   end process;


END;

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich, weil alle dein Ports als INOUT deklariert sind.

Zumindest das clk Signal geht nur in deine UUT hinein, ist also für die 
UUT ein IN port.

Autor: Duke Scarring (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> USE ieee.std_logic_unsigned.all;
Schmeiß das raus, das bringt nur verwirrung...

>constant clk_period : time := 1us;
Da muss noch ein Leerzeichen zwischen 1 und us.

Ansonsten solltest Du Dir klarmachen, das XST und Isim oder ModelSim 
verschiedene Programme sind, die jeweils Deinen Quellcode 
interpretieren. Da wandern keine Signal/Daten/whatever hin und her. Nur 
Quelltexte und evtl. Steuerdateien.

In meinem Modelsim tackert Deine Clock jedenfalls los:
$ vlib work
$ vcom tb.vhd
Model Technology ModelSim XE III vcom 6.2g Compiler 2007.02 Feb 22 2007
-- Loading package standard
-- Loading package std_logic_1164
-- Loading package numeric_std
-- Compiling entity tb
-- Compiling architecture behavior of tb
** Warning: [4] tb.vhd(29): (vcom-1207) An abstract literal and an identifier must have a separator between them.

$ vsim -gui tb
> add wave -r *
> run 1 ms

Duke

Autor: FPGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure antworten, tuckert bei dir clk automatisch los oder musst 
clk(mit rechte maustaste) auf clock setzten ?

was müsste ich schreiben wenn sich SCL automatisch ändern soll also 
zeitgesteuert z.B.: 10ns '1' und dann wieder 10ns '0'  usw.

Testbench_Process : Process
    Begin
    Wait for 10 ns;
    SCL <= '1';
    Wait for 10 ns;
    SCL <= '0';
    Wait for 10 ns;
    SCL <= '1';
    Wait;
    End Process;

...würde das mit diesem process funktionieren ?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FPGA schrieb:
> ...würde das mit diesem process funktionieren ?
Damit wäre der SCL für 10ns undefiniert, dann 10ns high, dann wieder 
10ns low und den Rest high. Kürzer ginge das ohne Prozess auch so:
SCL <= 'U', '1' after 10 ns, '0' after 20 ns, '1' after 30 ns;

> ...würde das mit diesem process funktionieren ?
Das könntest du aber auch einfach mal ausprobieren... :-/

Autor: FPGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke !
ich glaub inzwischen dass das problem wo anders liegt weil, einmal 
funktionierts und schaltet zw. 0 und 1,  dann wieder bleibt das SCL 
signal rot und ich kann es nur "händisch" auf 1 bzw 0 setzen

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FPGA schrieb:
> dann wieder bleibt das SCL signal rot
Rot=Undefined.
Das kommt, weil es vermutlich von 2 Treibern gleichzeitig mit '0' und 
'1' angesteuert wird..

> und ich kann es nur "händisch" auf 1 bzw 0 setzen
Naja, das tut man nicht... :-/
Oder willst du später in der echten Hardware von Hand mitmischen müssen?

Autor: FPGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe !

Aber ein Problem hab ich noch,  was mach ich mit SDA das ist wie beim 
I2C eben üblich eine bidirektionale Leitung.

Diese wird noch immer als undefined angezeigt obwohl in meinem programm 
bis jetzt der port nur gelesen und nicht beschrieben wird.

In weiterer folge (sollte das programm irgendwann funktionieren) wird 
über die testbench das start/stop bit, adresse, read/write an die entity 
übergeben welchen entsprechen(I2C) reagieren soll(counterstand an den 
master zurückschicken).

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiers mal so:
   signal SDA : std_logic := '0'; -- Initialwert angeben

> ... an die entity übergeben ...
Formal nicht ganz richtig: die Testbench übergibt die Signale an die 
Komponente. Diese Komponente nimmt sie über den Port entgegen. Dieser 
Port ist in der Entity definiert.

Autor: FPGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

also ich hab jetzt versucht das SDA Problem anders zu lösen(einen Pin 
für SDA out und einen für SDA in) doch sdaout wird noch immer als 
undefined angezeigt egal ob ich das signal mit 0 intialisiere oder nicht 
?

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
--USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;

ENTITY testbe IS
END testbe;

ARCHITECTURE behavior OF testbe IS

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT fastcount
    PORT(
         SDAOUT : out  STD_LOGIC;
         SDAIN : in  STD_LOGIC;
         SCL : IN  std_logic;
         puls : IN  std_logic
        );
    END COMPONENT;


   --Inputs
   signal SCL : std_logic := '0';
   signal puls : std_logic := '0';
  signal SDAIN: std_logic := '0';

  --BiDirs
  signal SDAOUT : std_logic;

   -- Clock period definitions
   constant clk_period : time := 1 us;

BEGIN

  -- Instantiate the Unit Under Test (UUT)
   uut: fastcount PORT MAP (
          SDAIN => SDAIN,
          SDAOUT => SDAOUT,
       SCL => SCL,

          puls => puls
        );

   -- Clock process definitions
--   clk_process :process
--   begin
--    clk <= '0';
--    wait for clk_period/2;
--    clk <= '1';
--    wait for clk_period/2;
--   end process;

  SCL_process :process
   begin
    SCL <= '0';
    wait for clk_period/2;
    SCL <= '1';
    wait for clk_period/2;
   end process;


dummy : process
begin
    while( 1 = 1) loop
    wait for 200 ns;
    SDAIN <= '1';
    SDAOUT <= SDAIN;
    wait for 200 ns;
    SDAIN <= '0';
    SDAOUT <= SDAIN;
    end loop;
end process;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> doch sdaout wird noch immer als undefined angezeigt
Weil das ein Ausgang ist:
    SDAOUT : out  STD_LOGIC;
Geht sowas nicht ohne Konflikte:
    SDAOUT <= SDAIN;
Du kannst nicht auf ein Ausgangssignal deiner Komponente schreiben.

Autor: FPGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis !
.....aber selbst wenn ich SDAOUT auskommentiere wird er noch immer als 
undefiniert(rot) angezeigt

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hilft nur Raten:
Vermutlich wird aus der Komponente fastcount noch nichts ausgegeben...

Autor: FPGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke supergeil du bist ein schatz !!!

Autor: FPGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das war der grund jetzte funktionierts

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.