This list is for discussion of the design and implementation of field-programmable gate array based processors and integrated systems. It is also for discussion and community support of the XSOC Project (see http://www.fpgacpu.org/xsoc).
|
I know it's been mentioned before, but I couldn't find the post, so... Is it possible to latch (not reg.) the output of LUT ram in the SpartanII on the falling edge of the clock, while write is on the rising edge (in the same slice) ? Thanks Rob |
|
|
|
> Is it possible to latch (not reg.) the output of > LUT ram in the > SpartanII on the falling edge of the clock, while write is on the > rising edge (in the same slice) ? To my knowledge, nope. See http://www.fpga-faq.com/FAQ_Pages/0023_Clocking_Rams_and_Flip_Flops.htm Follow the thread using the T>> links. Jan Gray Gray Research LLC |
|
|
|
Although I have not been doing this lately (building a register file with one read and one write access each cycle, using single port LUT RAM), nevertheless I suspect the best way to implement this in Virtex-derived architectures is to run the register file at twice the frequency of the rest of the design, either using two clocks (one doubled), or by using half-duty-cycled clock-enables everywhere else. Either way, you will then have to do somewhat more work specifiying TIMESPECs -- a simple PERIOD constraint probably won't do. Similarly, if you aren't in a hurry, you can also build a 2R-1W/cycle register file using a single bank of single port LUT RAM, by running the register file at *three* times the pipeline clock rate. Here floorplanning and/or replicating the FFs that drive LUT RAM control signals (A, WE) will be critical. Jan Gray Gray Research LLC |
|
|
|
Date: Sat, 3 Nov 2001 08:53:15 -0800 Reply-to: Subject: RE: [fpga-cpu] Latching LUT ram outputs yes a 2x clock for this portion of the design will work with the Virtex devices. I have a custom UART design that is zipped. I used this approach on the receiver FIFO. If anyoune wanted this Verilog I would be happy to dig it out. Ed Corter __________________________________________________ |
|
|
|
> yes a 2x clock for this portion of the design will > work with the Virtex devices. > The problem with using a 2x clock is that I then have to pass a clock enable everywhere to the slower parts of the design and believe it or not the added logic for the clock enable slows the design down, not to mention using up additional routing and logic cells. Also using a 2x clock increases the amount of power required (P=c^2 x f ?) Have I got that right ? It seems silly to me to use a 2x clock for the whole design when only one thing (the register file) may depend on it. I've managed to eliminate the need for a 2x clock in a couple of other spots by using a cheesy clock doubler where the timing isn't critical. But I think the timing is too critical for the register file. Anyway I think I can live with the extra delay needed to route the ram outputs to another slice to use the opposite edge of the clock. But does this use up the other slice ? or can the luts in the other slice still be used for other logic ? The other possibility that's occurred to me is to use a clock dll. But can I use both the original frequency (1x) and doubled frequency (2x) outputs of the dll ? I've got the impression that you have to treat the dll outputs as if they were a different clock domains. It sure would be nice if both clocks were exactly in sync and could be treated as the same domain. What I'm actually implementing is a r3w1 register file by using dual port ram at ddr. Same idea as using the single port ram at ddr, but more ports. Rob |
|
|
|
--- wrote: > > yes a 2x clock for this portion of the design will > > work with the Virtex devices. > The problem with using a 2x clock is that I then > have to pass a clock enable everywhere to the slower parts of the design and believe it or not the added logic for the clock enable slows the design down, not to mention using up additional routing and logic cells. Also using a clock enable everywhere... I had to do this with almost thing in my design probobly because the GCLK rate was 93.33 mHZ and as far resorce usage.. I was targeting the 1000E . So I had a field of gates to play with. To keep Place and route times reasonable I made use of the many constraints that are available for application. I created timing groups and applpied min delay requiremets that were optimal for the specific group and applied that delay constraint to the group. > 2x clock increases the amount of power required > (P=c^2 x f ?) Have I > got that right ? It seems silly to me to use a 2x > clock for the whole > design when only one thing (the register file) may > depend on it. This is true if the 2x clock is driviving the entire design; however, In my design I only used the 2x clock for 2 State Machines and the FIFO Core: the rest 1x. > I've managed to eliminate the need for a 2x clock in > a couple of > other spots by using a cheesy clock doubler where > the timing isn't > critical. But I think the timing is too critical for > the register If in the Virtex, I believe that ther is 8 DLL's in the chip. I have spent a couple weeks when I first started usin the Virtes E's just for charicterizing the DLL's performance for the following functions: PCB trace delay deskew, 2x, 4x, & lock signal behavior. The 2x is very easy to implement. > But does this use up the other slice ? or can > the luts in the > other slice still be used for other logic ? This I can't answer off of the top of my head. > The other possibility that's occurred to me is to > use a clock dll. yes yes !! > But can I use both the original frequency (1x) and > doubled frequency > (2x) outputs of the dll ? I often have used both and have that UART design that Includes a block called "clocks_n_reset" this shows The DLL's are instantiated here. I've got the impression > that you have to > treat the dll outputs as if they were a different > clock domains. It sure would be nice if both clocks were exactly in > sync and could be treated as the same domain. ***** Importent ****** This is where the beauty of the constraints comes in ! with two clocks out of the dll they have two different names. Of course at the dll's outputs they are perfectly synchronized; but, if this 2x clock signal name is never treated special ( constraint wise ) it will incurr lots of delays as P & R brings it to where it is needed in the design. for the 2x portion of the design you can constrain the the bits beig clocked as a group to arrive x nano seconds before or after x edge of the name of the 2x clk signal ! __________________________________________________ |
|
just a thought (from a beginner so ignore it if it's completely stupid) it occurs to me that if you can trigger on 0->1 but not on 1->0, why not define clock-bar and trigger on it's 0->1 which is of course the original clock's 1->0? Dave. |
|
|
|
The problem is, for speed, you want to locate the RAM16X1S LUT RAM in the *same slice* as the latch. So, if you feed clock_bar (or better, take advantage of the built-in clock inversion in the slice interconnect), then you also invert the LUT RAM WCLK (write clock). In Virtex and derived architectures, it does not seem possible to write into the RAMs on one edge and reigster (or latch) the RAM outputs on the other edge, in the same slice. Jan Gray Gray Research LLC |
|
|
|
--- David Spencer <> wrote: > just a thought (from a beginner so ignore it if it's > completely stupid) nope not completely stupid ! my terinology my not be acepted largely:; but, I refer to that as "NOT CLOCKING" the NOT being inversion. I have also done this in similar situations. Also if anyone has chipscope, I have found it to be a great tool for seeing what is going on internally with signals. I would not be able to give the ChipScope suite away for free :( Xilix would get upset... sorry ! __________________________________________________ |
|
Talking about chipscope .. I would like to know if anybody on this group has been able to get the following combination working for Chipscope: Xilinx Foundation 3.1i Xess v1.0 carrying a XCV800 Chipscope Port - parrallel/JTAG/Xcheqer/ anything will do ... Saurav. NTU-Singapore > -----Original Message----- > From: Ed Corter [SMTP:] > Sent: Tuesday, November 06, 2001 12:52 AM > To: > Subject: Re: [fpga-cpu] Re: Latching LUT ram outputs > --- David Spencer <> wrote: > > just a thought (from a beginner so ignore it if it's > > completely stupid) > > nope not completely stupid ! my terinology my not be > acepted largely:; but, I refer to that as > "NOT CLOCKING" the NOT being inversion. > > I have also done this in similar situations. > > Also if anyone has chipscope, I have found it to be a > great tool for seeing what is going on internally with > signals. I would not be able to give the ChipScope > suite away for free :( > Xilix would get upset... sorry ! > __________________________________________________ > > To Post a message, send it to: > To Unsubscribe, send a blank message to: > > |
|
|
|
The design is a rotate \ shift module. it's interfaced via two address. a0 is the operand write(the Number to operate on) a1 sets the mode and direction with Bits[5:4] I.E. shift or rotate & left or right. Bits[3:0] set the count for the N time that the operation is performed. the resul t is out on a seperate bus. I am almost done with the design: I am simulating and it looks good so far. Any suggestion or input ??? When complete, I will post a web address where a final description of the module and all files including the sim bench.. Also resoure usage report and timing. __________________________________________________ |
|
|
|
--- In fpga-cpu@y..., Ed Corter <artiedc@y...> wrote: > The design is a rotate \ shift module. it's interfaced > via two address. > a0 is the operand write(the Number to operate on) > a1 sets the mode and direction with Bits[5:4] > I.E. shift or rotate & left or right. > Bits[3:0] set the count for the N time that the > operation is performed. > I can't tell much from your post; but, the one comment I have would be to separate the mode and direction bits from the count. These are basically control signals. I think the mode and direction should be derived from the cpu's instruction register, and not encoded as part of an operand. Using an operand to determine what instruction to execute is a form of self modifying code, some people would consider this a no-no :) It might be extremely difficult to come up with a compiler capable of using operand values to determine how the shift is done. Of course, if this shift module is for something else, I could be way off base... Rob http://www.birdcomputer.ca/ |
|
|
|
> I can't tell much from your post; but, the one > comment I have would ...... execute is a form of self modifying code, some people would consider this a no-no :) Hi Rob, I'ts not exactly part of the operand; but, a write operation to the module is required to set it up. To make the module more friendly for integration into a CPU structure...should I bring the Count bit's and mode \ direction bits out as a bus that is to be driven by a uP control register ?? I would be more than happy to make a couple of change if it would make this module more usefule for peoples... Thank's Ed Corter __________________________________________________ |