Category Archives: Master theses

Special Session on Design of Heterogeneous Cyber-Physical Systems at DSD2012

Dr. Davide Quaglia (University of Verona, Italy) is arranging a special session at the 15th Euromicro Conference on Digital System Design.

Scope and topics:

Future cyber-physical systems will be heterogeneous systems made of components from different domains, such as digital (hardware, software, network) and analog (electronic, electromechanical, etc., as for instance MEMS, power sources, thermal sources, sensors and actuators). To fully exploit the potential of current nanoelectronics technologies, as well as to enable the integration of existing/new IPs and “More than Moore” devices, new methodologies and tools for multi-disciplinary and multi-scale design, modeling, and simulation are needed.

Papers on any of the following and related topics can be submitted to the special session:

  • Foundations of heterogeneous systems: discrete and hybrid models of computation; domain-specific languages for specification (e.g., SysML, SystemC-AMS, VHDL-AMS).
  • Efficient simulation and emulation of heterogeneous systems. Co-simulation techniques.
  • Design and optimization of heterogeneous systems and co-design techniques.
  • Case studies and applications include, but are not limited to, networked embedded systems and networked control systems taken from transportation (e.g., automotive), building automation, electricity generation and management, environmental monitoring, biomedical chips, tele-operation and robotics.

For you out there with an interest in smart dust (how to design them, how to simulate them, how to verify them), this could be a good session for you.

Yes – I’m in the review committee …


CAD:Just a reminder about Spectre and long simulations

Just a reminder for those who run long simulations in Cadence Spectre, especially the transient ones:

  • Set the saveclock option (in seconds) to the time interval at which you want your simulator to save its state.
  • Set the savefile option to a file name in which you want to save your state.
  • Set the recover option to a file name from which you want to load your state.

So, if you set saveclock to 60, spectre will regularly, every minute save its state to savefile. You can launch the long simulation and press stop and restart as many times as you like. Spectre will restart at the latest minut (clockwise). This is quite handy if there is a power cut or network is dropped.

Notice that the file is overwritten and if you want to save several minutes back, you need to have another script running in parallel saving that data for you. This could also be a handy strategy considering that in the worst case (which is also the most likely case according to Mr. Murphy) you might be writing to disk, just as Spectre or connection dies.

Notice also that you can alter some of the simulator settings. For example the number of nodes saved. This means you can set the simulator to log all nodes first, check them after a while, then stop. Remove some of the probes to save time/disk area, and re-run. Quite handy!


Project funded

The other day, the CENIIT board at Linköping University were very kind to believe in me and my proposed project on transceivers for body area networks (BAN).

I am now looking for master thesis students who are interested in working on body area networks. We will implement new high-speed (relatively) systems and look at a couple of new ideas.

For the interested, the google is out there… but two main sources are:

and there is a few blogs here on WordPress too, like for example:

So, we are supposed to for some new ideas – but I’ll tell you more if you contact me… I’m looking for those who wants to do some FPGA hacking and a lot of MATLAB simulations, and of course some analog IC designers.


A Silly Script to Create OCEAN desVars

As we are now ramping up some of the projects for the TSTE16 course at our university, I wanted to just propose a small snippet to get your design variables from MATLAB into Cadence (or more exactly the OCEAN-script for simulating Spectre). The idea is to have MATLAB as master in these projects. This also implies that you want to set any design variables using MATLAB rather than hacking multiple files and risking loosing track of what you’ve been doing.

There are many ways to do this:
(1) One option is to use the simulink interface provided by MATLAB and Cadence, but is a bit over the top in this case.
(2) Another option is to create all the required netlists in the Cadence ADE environment. This will actually generate multiple files in your simulation directory. The “full” file which will be used for spectre is normally called “input.scs” . Further on, if you play that play button (Cadence 6) and study the log file, you actually see in the text which spectre command that is run. (Further on, this command is also stored in the runSimulation “script” stored by Cadence in that directory). The input.scs file is just a concatenation of several files, such as netlistHeader, netlist, netlistFooter — but also some dot-files, like .modelFiles and .designVariables. The latter is a text version of your variables that you could alter if you like. Then concatenate the files into the input.scs accordingly. And run. Requires some more hands on and have less post-processing options.

(3) Or assume we have already generated the Cadence test bench and generated an OCEAN script with a bunch of desVar definitions in it. We can replace those rows with a load command, e.g.

(loadi "tste16ProjDesVars.il")

which you have stored accessible somewhere.
Then make sure you can change that file with MATLAB. Like for example:


desVar(1).Name = 'vccr12';
desVar(1).Value = 1.2;

desVar(2).Name = 'vLo';
desVar(2).Value = 0.1;

desVar(3).Name = 'vHi';
desVar(3).Value = 1.1;

desVar(4).Name = 'compGain';
desVar(4).Value = 1000;

fClk = 1e6;
desVar(5).Name = 'fClk';
desVar(5).Value = fClk;

sigLength = 8;
desVar(6).Name = 'sigLength';
desVar(6).Value = sigLength;

desVar(7).Name = 'tStop';
desVar(7).Value = sigLength/fClk;

desVar(8).Name = 'daisyDemoTopReadFile';
desVar(8).Value = '/home/jacobw/TSTE16/testIn.txt';

desVar(9).Name = 'daisyDemoTopWriteFile';
desVar(9).Value = '/home/jacobw/TSTE16/testOut.txt';

%% This part would then be in a separate function.
fid = fopen('tste16ProjDesVar.il','w');
fprintf(fid, ';; ==================================== \n');
fprintf(fid, ';; Design variables generated by MATLAB \n');
fprintf(fid, ';; ==================================== \n');
for M = 1:length(desVar);
if isstr(desVar(M).Value)
fprintf(fid, '(desVar "%s" "\\"%s\\"")\n', desVar(M).Name, ...
desVar(M).Value);
else
fprintf(fid, '(desVar "%s" %f)\n', desVar(M).Name, ...
desVar(M).Value);
end
end;
fprintf(fid, ';; ==================================== \n');
close(fid);

Where I have used structs to store the intermediate design variables. You can also store strings into the design variables to pass on file names or similar to verilog A blocks in Cadence.
This gives you a file like


;; ====================================
;; Design variables generated by MATLAB
;; ====================================
(desVar "vccr12" 1.200000)
(desVar "vLo" 0.100000)
(desVar "vHi" 1.100000)
(desVar "compGain" 1000.000000)
(desVar "fClk" 1000000.000000)
(desVar "sigLength" 8.000000)
(desVar "tStop" 0.000008)
(desVar "daisyDemoTopReadFile" "\"/home/jacobw/TSTE16/testIn.txt\"")
(desVar "daisyDemoTopWriteFile" "\"/home/jacobw/TSTE16/testOut.txt\"")
;; ====================================

Happy hacking!


Follow

Get every new post delivered to your Inbox.

Join 45 other followers