
A VCO (specifically a current-starved ring oscillator consisting of a 5-inverter ring) is supplied a control voltage by a 9-bit DAC (giving an estimated 6.45mV resolution over the range 0..3.3V). This means it can be digitally controlled to hit different frequencies estimated to be in the range of 3MHz to 400MHz.
This in turn goes into a simple digital block hardened with LibreLane (using 9T gf180mcuD standard cells) to drive a 5-bit counter which is then used to provide different clock divider output stages.
No external clock is used with this project. Just do the following:
ui_in to 0 and uio_in[0] to 0.uio_out[7:2].ui_in to 77 (0x4D, or 0100_1101).uio_out[7] of about 1.9MHz. Multiply this by 32 to get the actual internal VCO frequency (maybe ~61MHz?)uio_out[6] to uio_out[3]uio_out[2] is the direct VCO output, so will be the fastest.{ui_in[7:0],uio_in[0]} which together form the 9-bit input to the VCO's control DAC:
uio_in[0], setting ui_in to 77 (as above) is actually shifted by one, so it represents a DAC code of 77<<1, i.e. 154, or (154/512)*3.3 = 0.993V.uio_out[7:2] pins.| # | Input | Output | Bidirectional |
|---|---|---|---|
| 0 | vco_in[1] | vco_in[0] | |
| 1 | vco_in[2] | ||
| 2 | vco_in[3] | vco_out | |
| 3 | vco_in[4] | counter[0] | |
| 4 | vco_in[5] | counter[1] | |
| 5 | vco_in[6] | counter[2] | |
| 6 | vco_in[7] | counter[3] | |
| 7 | vco_in[8] | counter[4] |