digital design
Junior Member level 2
- Joined
- Oct 27, 2012
- Messages
- 20
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,281
- Activity points
- 1,446
It doesn't work because ring oscillators are touchy little creatures.
Chain of inverters. Okay, good start. How many inverters did you use? Suppose you used 5 or so, what you want to do is split up that chain in two parts and then put a placement constraint on them. You put 2 inverters over there, and the other 3 inverters waaaay over there on the die. That should give you 1) long routing delay 2) yesyes no doubt a lower frequency than the awesome 1 GHz you were trying to get and 3) a good chance of it actually working.
Oh and you want to put a FF as a divide by 2 stage after the output. Just because you can. And because it helps in getting a roughly 50% duty cycle.
Hope that helps.
Also, make sure your synthesis tool is not eliminating those redundant inverters. Logically, 1 inverter is the same as 99 inverters and unless you force the tool to leave those inverters alone, it will optimize them away.
But (IMO) don't use a ring oscillator, you're just asking for trouble. If you can afford an FPGA in your design, you can afford an external oscillator.
reg divided_clk;
always @(posedge ring_osc_clk)
divided_clk <= ~ divided_clk; // divided clock at half the frequency of ring_osc_clk
Use the ring osc output as a clock, route clock to clock input of FF. Slap on an inverter and you're done.
Code:reg divided_clk; always @(posedge ring_osc_clk) divided_clk <= ~ divided_clk; // divided clock at half the frequency of ring_osc_clk
You are doing it basically right with syn_keep attribute. To view the delay_line details, you just ned to double click the block. You can also look at the resource usage to know if the ring oscillator has been implemented.Am also experiencing a similar challenge, but unfortunately i would have to use a ring oscillator because am designing the chip to respond to temperature changes. How do i get to know if the tool (QUARTUS II) had optimized the ring oscillator and where in the tool can i force it to stop optimizing the design? Attached is a snapshot of my code (VHDL) and the netlist viewer of the design. Thank you
Use the ring osc output as a clock, route clock to clock input of FF. Slap on an inverter and you're done.
Code:reg divided_clk; always @(posedge ring_osc_clk) divided_clk <= ~ divided_clk; // divided clock at half the frequency of ring_osc_clk
Thanks FVM, just answered that!Thank you.. i got it now, i appreciate ur post. But do you know how to force a compiler from optimizing a design on the Quartus II software??? Or is there a Reserved word in VHDL that could do that?
You are doing it basically right with syn_keep attribute. To view the delay_line details, you just ned to double click the block. You can also look at the resource usage to know if the ring oscillator has been implemented.
Why are you now showing RTL instead of gate level view? RTL doesn't tell about logic removed during optimization.
You might be confused by the parallel 80 bit inverter, that's how things are compacted in RTL view.
The logic gate usage of the respective sub-entity is the most simple way to check if the inverter chain has been implemented.
Nevertheless you are free to prescribe an exact postion for each logic cell in assignment editor (presumed you understand the syntax).
. is it a material (for the tool or device)??? do i have to download that or its in the tool already (where can i get it)???aka read the fine manual.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?