VSIM

Schritte zur Vorbereitung einer funktionellen Simulation mit VSIM

  1. make newsim +path=PATH -- Erstellen eines Simulationsverzeichnis im Projekt z.B.: mit PATH = sim.
  2. make sim -- Erstellt alle Dateien für die Simulatin mit ModelSim
  3. cd sim -- in das Verzeichnis wechseln, welches unter 1. erstellt wurde wenn PATH = sim war.
  4. vsim & -- Starten von ModelSim (oder vsim -do testbench.fdo & dann kann Zeile 5 entfallen)
  5. do testbench.fdo -- auf der Konsole von VSIM eingeben.
  6. run 20ms -- Start der Simulation für 20 Milisekunden. (us für Mikrosekunden und ns für Nanosekunden)

Änderungen in der Datei VLOG.OPT seit der Verwendung von ChipSpope im SpartanMC Core

Während der Simulation im VSIM dürfen kein IP-Core Module wie zum Beispiel ChipScope in den Verilog Quellen eingebunden sein. Um diese bei der Übersetzung im VSIM zu sperren wurde die Variable SIMULATION eingeführt. Ist die Variable definiert, dann wird das ChipScope Modul nicht mit übersetzt. Diese Variable wird in der Datei VLOG.OPT gesetzt, welche bei der Ausführung des 1. Kommandos aus der obigen Liste in dem erstellten Verzeichnis zu finden ist. In dieser Datei muss der Schalter +define+SIMULATION vorhanden sein.
vlog.opt
+acc +incdir+/home/schoene/Eigene_Daten/spartanmc-soc/spartanmc/hardware/ +define+SIMULATION

Schritte zur Vorbereitung einer timeing Simulation mit VSIM

  1. make newsim +path=PATH -- Erstellen eines Simulationsverzeichnis im Projekt z.B.: mit PATH = sim.
  2. make sim -- Erstellt alle Dateien für die Simulatin mit ModelSim
  3. make timesim -- Erstellt spartanmc_timesim.v und spartanmc_timesim.sdf
  4. testbench.tdo erstellen -- Datei aus dem Beispiel unten in das Verzeichnis sim kopieren
  5. vsim & -- Starten von ModelSim
  6. do testbench.tdo -- auf der Konsole von VSIM eingeben.
  7. run 20ms -- Start der Simulation für 20 Milisekunden. (us für Mikrosekunden und ns für Nanosekunden)


Datei testbench.tdo

## NOTE: Do not edit this file.
## Auto generated by Project Navigator for Verilog Post-PAR Simulation
##

# Relative path to project home
# (update if you move this simulation directory)
variable PROJECT_PATH ..

# Specify an alternative firmware to simulate
# (path is relative to project path)
variable OVERRIDE_FIRMWARE 

# Updating and run script with SpartanMC enviroment settings
# (sets /home/schoene/Eigene_Daten/spartanmc-soc)
exec make -C $PROJECT_PATH tclconfig > /dev/null
do $PROJECT_PATH/build/configure.tcl

cp ../build/spartanmc_timesim.sdf .
cp ../build/spartanmc_timesim.v .

vlib work
## Compile Post-PAR Model for Module spartanmc
vlog  "$env(XILINX)/verilog/src/glbl.v"
vlog  spartanmc_timesim.v
vlog  testbench.v
vsim -t 1ps +maxdelays -L simprims_ver  -lib work testbench glbl
##set PrefMain(font) {Courier 12 roman normal}
##do testbench.udo
view wave
view structure
view signals
do wave.do
run 100us
## End


Achtung!

Die von der Toolchain automatisch erzeugte testbench.v muss für die Timingsimulation angepasst werden. Hier muss der Aufruf von sim_initram RAM(); raus, da die Initialisierung das BlockRAM in diesem Falle schon in spartanmc_timesim.v enthalten ist.

Angepasste testbench.v
## NOTE: Do not edit this file.
`timescale 1ns/1ps
module testbench();

reg clk = 0;
reg reset = 0;

module_new_system UUT(
    .pin_P_CPU_RESET     (reset),
    .pin_P_USB_1_TX      (tx),
    .pin_P_USER_CLOCK    (clk),
    .pin_P_USB_1_RX      (rx)
    // add system ports here
);

initial
begin
    #100;
    reset = 1;
    #100;
    reset = 0;
end

always
begin
    #10		// Halbe Periode von 50MHz
    clk = ~clk;
end
endmodule 
## End


VSIM-Protokoll "Transcript"(external link)
Kommandos "showmem", "showdmem" und "showregs"(external link)


SpartanMC