Hallo! Ich habe eine Testbench geschrieben und sie funktioniert auch unter der "Behavioral Simulation". Die "Post-Route Simulation" funktioniert jedoch nicht, da der Project Navigator mein eigenes Package nicht kompiliert (die "component", die ich in der Testbench teste benötigt das Package aber)- das vhdl- File ist nicht in die "Post-Route Simulation"- Dateiliste eingebunden und ich finde auch keinen Weg, wie ich das da einfügen kann. Wie gesagt, die Package- vhdl- Datei wird nur in der "Post-Route Simulation" nicht eingebunden- überall anders schon. Darf man keine Packages in der "Post-Route Simulation" benutzen? Wie soll das sonst gehen?
Bei der Post Rote Simulation wird nur noch ein einziges File für dein gesamtes Design simuliert: <designname>_timesim.vhd. Da sind dann keine Packages usw. mehr, sondern nur noch die Xilinx Primitiven wie LUTs, Slices....
Kann man denn der Post- Route Simulation irgendwie ein fertiges Kompilat aus der Synthese unterjubeln?
Hmmm? Also in der Post-Route Simu kann man neben dem _timesim.vhd natürlich auch andere Sachen simulieren, als zum Beispiel weitere Designs, Modelle externer Bausteine usw. Was genau willst du denn machen?
Ich habe einen Mux gebaut und simuliert. Synthese klappt auch- jetzt wollte ich schauen, wie das aussieht, wenn es denn mal "in Hardware gegossen" wurde. Ich benutze jedoch ein selbst definiertes Package in meinem Mux und die vhdl Datei, die dieses Package enthält wird bei der Post- Route Simulation nicht mit eingebunden und somit funktioniert das kompilieren nicht.
Hm, verstehe ich noch nicht ganz. Dein eigenes Package ist doch nur für die Synthese relevant. Das wird doch dann umgesetzt in das, was auf dem Chip verfügbar ist. Als Simulations-Modell des Designs für die Post Place&Route Simulation gibts nur noch eine einzige Datei, die dein komplettes Design incl. aller Elemente enthält, so wie sie auf die Ziel-Hardware umgesetzt wurden. Und diese _timesim.vhd Datei lässt sich mit ISim oder Modelsim simulieren, denn da ist alles enthalten, was zum kompilieren nötig ist. Natürlich muss Modelsim die Xilinx-Bibliotheken kennen, um die ganzen Xilinx-Primitiven zu kompilieren. Kannst du dein Design mal gezippt posten?
Das benötigte Package benutze ich auch in meiner Testbench und da wird es nicht mit "einkompiliert"- somit stolpert er in der Testbench schon bei "use WORK.<PKG>.ALL;". Die Dateien hängen gezippt im Anhang.
Achso, jetzt versteh ich die Geschichte. Also wenn du sowas mit simulieren willst, musst du deine MUX_PKG in eine Library kompilieren. Aber bei der Timing-Simulation wirst du ein Problem bekommen. Ich hab das mal getan, eine Lib in Modelsim mit deinem Package, aber die Simulation klappt trotzdem nicht, weil die Typen nicht zueinander passen....wenn du dir die Mux_out_timesim.vhd ansiehst, siehst du, dass Xilinx das aufgelöst hat:
1 | entity mux_out is |
2 | port ( |
3 | reg_out : out STD_LOGIC_VECTOR ( 7 downto 0 ); |
4 | regs_in : in STD_LOGIC_VECTOR2 ( 31 downto 0 , 7 downto 0 ); |
5 | reg_adr : in STD_LOGIC_VECTOR ( 4 downto 0 ) |
6 | );
|
7 | end mux_out; |
Und dann passt dein selbst definierter Typ nicht mehr korrekt dazu: # ** Failure: (vsim-3807) Types do not match between component and entity for port "regs_in". # Time: 0 ps Iteration: 0 Instance: /mux_out_tb/inst_mux_out File: netgen/par/mux_out_timesim.vhd Line: 44 Allerdings weiß ich auch nicht, wie man das auflösen kann jetzt. Lothar, weißt du was?
> Lothar, weißt du was?
Von Post-Routing-Simulationen lasse ich die Finger weg. U.a. deshalb,
weil da immer wieder mal so ein Gebastel nötig war. Schon bei der
automatisch erstellten Verhaltens-Testbench gibt es jedesmal Probleme,
wenn nicht std_logic am Port zu finden ist.
Wenn nötig knacke ich die Timing-Nuss mit der statischen Timinganalyse
und passenden Constraints. Das klappt ganz gut und ist m.E. wesentlich
durchschaubarer und reproduzierbarer.
Also:
Simulation für das Verhalten
Timinganalyse für die Implementierung
> Allerdings weiß ich auch nicht, wie man das auflösen kann jetzt.
Ich baue da dann immer einen Wrapper drum.
In dem steht u.a. sowas:
1 | slv2_to_slv_mapping : process (sig_slv2) is |
2 | begin -- process slv2_to_slv_mapping |
3 | if NETLIST_SIM then |
4 | for N in sig'range loop |
5 | for M in sig'range loop |
6 | sig_slv2(N, M) <= sig(N)(M); |
7 | end loop; -- M |
8 | end loop; -- N |
9 | end if; |
10 | end process slv2_to_slv_mapping; |
Duke
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.