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;
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.
> 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
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 ?
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... :-/
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
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?
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).
Probiers mal so:
1 | 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.
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;
> 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.
Danke für den Hinweis ! .....aber selbst wenn ich SDAOUT auskommentiere wird er noch immer als undefiniert(rot) angezeigt
Da hilft nur Raten: Vermutlich wird aus der Komponente fastcount noch nichts ausgegeben...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.