The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl Modeling >> Behavioral Models >> Bidirectional shift register: continuous time modelling in Verilog A https://designers-guide.org/forum/YaBB.pl?num=1296585940 Message started by mrxyzlinkoping on Feb 1st, 2011, 10:45am |
Title: Bidirectional shift register: continuous time modelling in Verilog A Post by mrxyzlinkoping on Feb 1st, 2011, 10:45am Hello evryone, I have two queries which I am listing below: 1. I am trying to model a verilog A model of continuous time bi directional shift registers. Based on the input signal and clock the output can be either incremented or decremented by one (normal bi directional shift register operation). I have clock and input signal as my input and N (variable = 8 to 512) output ports. All in continuous time. There is no sampling done anywhere. The clock mentioned above and in the code is another signal which is being used as clock to perform the operation (kind of asynchronous operations). Code I have written is as shown below: @ (initial_step)begin for (i=0; i<256;i=i+1) begin result[i]=0; // temp location to store result initialize to zero end end // initial @(cross(V(clk)-clkThresh, -1)) begin sampleIn = V(vIn); // vIn is the input voltage for (i =0; i<N; i = i+1) begin if (sampleIn >=0.5) begin result[0] = 0; // first bit set to zero result[i+1] = result[i]; // rest all shifted right end else if (sampleIn < 0.5) begin result[i] = result[i+1]; // all bits shifted to left result[N-1] = 0; // last one set to zero end end // final assignment of the output signal for (i =0; i<N; i = i+1) V(srOut[i]) <+ transition(result[i], td, tr, tf); end module My problem is I am not able to model the N output ports in verilogA. Final assignment as highlighted in red is throwing parsing error. 'the index used to bits of analog signal vector srOut is constant, constant expression, genvar-constant expression. To avoid this problem, ensure that the index used to access the bits of analog signal is constant, constant expression, genvar-constant expression.' Can someone please help me to resolve my problem. Also I ll be glad to provide any information or to clarify any point if not clear above. 2. In the variable ADC code at http://www.designers-guide.org/VerilogAMS/functional-blocks/data-converter/converter-spectre.vams can some one please explain me the ussage of following statement: localparam integer levels = 1<<`bits; Thanks xyzLinkoping |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by Marq Kole on Feb 2nd, 2011, 5:57am You should use a genvar variable for the for loop in the output section. You can use an ordinary integer for the other for loop. You do not need to initialize the result[i] values - they always default to 0 in Verilog-A. The operator you mention is the bit shift. A shift to left means an integer multiplication of an integer value by 2. It is not allowed to use this on non-integer values. You can use this on a genvar, but only inside the heading of a for statement. Cheers, Marq |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by Marq Kole on Feb 2nd, 2011, 6:02am A bit of explanation: the genvar is needed because this is an analog for-loop. The transition filter inside your for-loop body must be evaluated at every time step exactly the same number of times. The use of a genvar as index variable forces that behavior as the only locations where you can assign a value to a genvar are the index initialization and index update parts of a for-loop: for (<index initialization>; <index condition>; <index update>) <statement> Cheers, Marq |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by mrxyzlinkoping on Feb 2nd, 2011, 11:17am Dear Marq, Thanks for your suggestion. I used genvar for the output loop and it worked. Atleast I am not seeing the error message. Actually I checked the verilogA manual for defining variables for analog signal, but nothing is mentioned there. Question came to my mind. Is everything defined for verilog ams works in A version as well? I have to confirm the functionality of my code... as I feel the output may not be as expected. :) I'll update whatever is the result after finishing the testing tomorrow. I have to use it in spectre. Thanks again Rgds DC |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by Marq Kole on Feb 3rd, 2011, 5:52am Hi DC, yes, everything in Verilog-A is also valid in Verilog-AMS. Verilog-A is a defined subset of Verilog-AMS - defined in Annex C of the Verilog-AMS standard. Cheers, Marq |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by Marq Kole on Feb 3rd, 2011, 7:50am Sorry, reread you question: the answer is no, for exactly the same reason. Verilog-AMS is a superset of Verilog-A. It contains langauge elements that cannot be simulated with an analog solver - you will need a digital event-driven engine to handle these constructs. So if you need to use Spectre, stick to Verilog-A. If you can use AMS Designer (Spectre + NCsim) you can also work with Verilog-AMS but then we're talking about a completely different ball game altogether. For testing try to make a test bench that can be used both for your model and for your implementation/schematic. That saves on test bench creation effort and allow you to get a one-on-one comparison of the model against the schematic. Cheers, Marq |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by mrxyzlinkoping on Feb 3rd, 2011, 2:08pm Hi Marq, Thanks for your reply and suggestion on test bench. BTW the code is working but not giving the correct output :) I need to check the logic now... it may not be correct for bidirectional shift register. Rgds DC |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by Geoffrey_Coram on Feb 4th, 2011, 4:59am I don't see how you ever get a "1" into your shift register (at least, not with the code you originally posted). It looks like you are using sampleIn to determine which direction to shift, but whichever direction it shifts, you set the new data bit to zero (result[0]=0 or result[N-1]=0). Also, you have that assignment done N times: result[0] = 0 is done inside the for loop. Ah, it's worse than that: for i=0, you set result[0] = 0; result[1] = result[0]; then on the next loop, i=1, so result[0] = 0; // no "i" here, done every time result[2] = result[1]; // and result[1] was set to zero when i was 0 then, for i=2, result[0] = 0; // no "i" here, done every time result[3] = result[2]; // and result[2] was set to zero when i was 1 etc. |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by mrxyzlinkoping on Feb 4th, 2011, 10:47pm Thanks Geoffrey_Coram for pointing out the problem in the code. Can someone help me with some handy snippet of Shift Register modelling in verilog (or infact in any other HDL). It will be really nice. (Or may be a bit modification in my earlier code which I believe should work with some modification) Thanks DC |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by Geoffrey_Coram on Feb 7th, 2011, 5:30am // N bit register, indexed 0 to N-1 @(cross(V(clk)-clkThresh, -1)) begin sampleIn = (V(vIn) >= 0.5) ? 1 : 0; // vIn is the input voltage dirIn = (V(vDir) >= 0.5) ? 1 : 0; // vDir is the direction if (dirIn) begin for (i =N-1; i>0; i = i-1) begin result[i] = result[i-1]; // shift right end result[0] = sampleIn; // new sample end else begin for (i =0; i<N-1; i = i+1) begin result[i] = result[i+1]; // shift left end result[N-1] = sampleIn; // new sample end end // of cross |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by mrxyzlinkoping on Feb 7th, 2011, 11:01pm Thanks Geoffrey_Coram, I will test it today in my test bench. Best Rgds DC |
Title: Re: Bidirectional shift register: continuous time modelling in Verilog A Post by mrxyzlinkoping on Mar 13th, 2011, 12:45pm I think I missed to mention here that the code given by Geoffrey worked well (with slight modification as per my requirement) Thanks Geoffery for the help. Best Regards DC |
The Designer's Guide Community Forum » Powered by YaBB 2.2.2! YaBB © 2000-2008. All Rights Reserved. |