STimuli Testbench

Gast #1616236
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;
Gast #1616278
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:
1
$ vlib work
2
$ vcom tb.vhd
3
Model Technology ModelSim XE III vcom 6.2g Compiler 2007.02 Feb 22 2007
4
-- Loading package standard
5
-- Loading package std_logic_1164
6
-- Loading package numeric_std
7
-- Compiling entity tb
8
-- Compiling architecture behavior of tb
9
** Warning: [4] tb.vhd(29): (vcom-1207) An abstract literal and an identifier must have a separator between them.
10

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

Duke
Angehängte Dateien:
Gast #1616419
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 ?
Moderator (Firma: Titel) Persönliche Seite #1616443
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... :-/
Gast #1616470
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
Gast #1616699
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).
Gast #1626408
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren