PityOnU Posted March 14, 2013 Report Posted March 14, 2013 I'm attempting to do some performance analysis of a network-on-a-chip I've created in SystemC. To do this, I want to automate multiple simulation runs so that I can find max/min/mean/variance of the values I am interested in. My original idea was to simply wrap my main.cpp (the code that constructs the network out of modules and signals and begins the simulation) in a "for" loop and run through it x number of times. However, I am currently encountering error E113 after running through the "for" loop just once, which indicates that SystemC doesn't allow me to reconstruct the network while a simulation is running (understandably). So, my question is now: How can I completely stop and reset my simulation environment at the end of my "for" loop to allow it to just do its thing x number of times? Thanks in advance. Quote
ralph.goergen Posted March 14, 2013 Report Posted March 14, 2013 Hi, for me, it is not clear what you want to do. Do you want to measure simulation performance (execution time of the simulation)? This could be done 'outside' of the actual simulaiton, e.g. in a shell script like STARTTIME=$(date +%s) run simulation ENDTIME=$(date +%s) echo $ENDTIME '-' $STARTTIME | bc -l Repeat this in a loop as often as you want. Or do you want to measure some internals in your model? This can be done in the testbench modules, e.g. some process in tb/stimulus module { for (int i = 0; i < MAX; ++i) { // run simulation stimulus std::cout << i << and whatever you need << std::endl; } } PityOnU 1 Quote
PityOnU Posted March 14, 2013 Author Report Posted March 14, 2013 Hi, for me, it is not clear what you want to do. Do you want to measure simulation performance (execution time of the simulation)? This could be done 'outside' of the actual simulaiton, e.g. in a shell script like STARTTIME=$(date +%s) run simulation ENDTIME=$(date +%s) echo $ENDTIME '-' $STARTTIME | bc -l Repeat this in a loop as often as you want. Or do you want to measure some internals in your model? This can be done in the testbench modules, e.g. some process in tb/stimulus module { for (int i = 0; i < MAX; ++i) { // run simulation stimulus std::cout << i << and whatever you need << std::endl; } } Thanks for the response, and sorry if the first post wasn't clear. Basically, the network I am modeling consists of sender and receiver nodes connected to switches. The sender nodes generate a packet with a random destination address and passes it off to the switch, which then routes it to other switches based on the destination. I have managed to make the code configurable via global definitions in a header file, which allow me to modify parameters including the speed of the sender/receiver/switch, the size of the network, and the way the switches are connected (fully-connected, square mesh, bitonic, etc.). Right now, each simulation run is 50ms in length, and I record information regarding packets sent, dropped, number of stops, and time between sending and delivery to a .csv file, and the functioning of the network itself to a .vcd file. My desired goal is to make it so that the code will automatically run a certain network configuration x times, generating a new .csv and .vcd log file each time. I can then use the data in these files with Excel/Matlab to perform some performance analysis on each network configuration in order to draw some conclusions such as maximum throughput, expected delay, etc. In order for the code to do this, I need to be able to basically reset the simulation and re-run in x number of times. Is it possible (in SystemC code) to stop the simulator and completely unload it from memory so that I can then begin a new simulation using the same block of code as before? Quote
ralph.goergen Posted March 14, 2013 Report Posted March 14, 2013 In the accellera simulator, it is not possible to reset the simulation kernel or restart a simulation from the beginning. Running the same configuration x times can be done by a shell script: loop X run simulation rename result files end loop If you want to run several configurations automatically, it might help to read the configuration from an external (text/xml/...) file at the beginning of the simulation. Then, you can do it again in a shell skript: loop modify configuration file loop X run simulation rename result files end loop end loop PityOnU 1 Quote
PityOnU Posted March 14, 2013 Author Report Posted March 14, 2013 In the accellera simulator, it is not possible to reset the simulation kernel or restart a simulation from the beginning. Running the same configuration x times can be done by a shell script: loop X run simulation rename result files end loop If you want to run several configurations automatically, it might help to read the configuration from an external (text/xml/...) file at the beginning of the simulation. Then, you can do it again in a shell skript: loop modify configuration file loop X run simulation rename result files end loop end loop Thanks for the response! I hadn't even considered renaming the output as part of the shell script. Works perfect! Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.