The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl Design Languages >> Verilog-AMS >> OSS vs cellview based netlister https://designers-guide.org/forum/YaBB.pl?num=1232423669 Message started by wave on Jan 19th, 2009, 7:54pm |
Title: OSS vs cellview based netlister Post by wave on Jan 19th, 2009, 7:54pm Hi - we're finding some verilogams models run fine with cellview based netlister, but have functional errors with OSS based. Are there any guidelines or differences in how the models should be written? Also, I find sometimes the verilogams cellview misses the .cdb file upon creation --- which is a show stopper for OSS. Any reason for this? :-X thanks, Wave |
Title: Re: OSS vs cellview based netlister Post by Andrew Beckett on Jan 20th, 2009, 2:31am I don't think there should be any reason that you need to write the code differently. Can you give some details as to what you're finding? As for the .cdb file creation - part of this may come about because it wasn't required in the cell-based netlister flow. If the file was compiled into the library with (say) ncvlog -use5x, it wouldn't have created a .cdb "shadow" file, but that is required with the OSS flow. You should be able to use the Tools->Update Text Views menu in ADE to create the .cdb files where missing. Regards, Andrew. |
Title: Re: OSS vs cellview based netlister Post by wave on Jan 20th, 2009, 1:00pm Andrew - thanks for the reply on .cdb files. Very useful. I actually asked Mr. Spectre himself look at the code a bit and he narrowed it down to this region. Vreg is within our tolerance limits, but something is sequenced (initial conditions) in the simulator to catch vreg_ok=0. I guess there are more robust ways to write this for OSS. How specifically, I'm not sure... regards, Wave //-- vreg always @(above(V(vreg,vssa) - vreg_min)) begin vreg_ok = 1; if(debug) $strobe("%t: %m: vreg_ok = %0b", $realtime, vreg_ok); end // vreg > vreg_min always @(above(-1.0*(V(vreg,vssa) - vreg_min))) begin vreg_ok = 0; $strobe("%t: %m: vreg has fallen below . vreg_min = %e", $realtime, vreg_min); end // vreg < vreg_min always @(above(V(vreg,vssa) - vreg_max)) begin vreg_ok = 0; $strobe("%t: %m: ***WARNING*** vreg has risen above vreg_max. vreg_max = %e", $realtime, vreg_max); end // vreg > vreg_max |
Title: Re: OSS vs cellview based netlister Post by Andrew Beckett on Jan 20th, 2009, 4:06pm Hmm, not sure I can comment much without seeing more of the setup. There doesn't appear to be anything terribly unusual in that part of the code - it's doing some assertions - I guess it depends upon the interaction with other parts of the circuit. I still don't see why OSS should behave any differently from cell-based with respect to this bit of code. Regards, Andrew. |
Title: Re: OSS vs cellview based netlister Post by Ken Kundert on Jan 20th, 2009, 5:53pm Wave, I believe you have a race condition due to an ambiguity in your code. The problem is not with the oss netlister per see. The problem is that at time=0 the value of vreg starts off 0 and then immediately shifts to a value between vreg_min and vreg_max. So it is both above and below the threshold at time 0. As a result both the first two always blocks are executed 'simultaneously', and it is indeterministic which is executed last. This is a subtle case that probably should be handled better by the simulator. However the situation is easy to remedy. Simply start vreg at 0 and then transition it to the desired value a short time after the simulation starts. -Ken |
The Designer's Guide Community Forum » Powered by YaBB 2.2.2! YaBB © 2000-2008. All Rights Reserved. |