2 Ring Oscillator Worker

2 : Ring Oscillator Worker

Design render

How it works

An internal simple digital counter block can be driven by an external clock or an internal ring oscillator, and then be fed data through external pins. It will run as fast as it can to try and produce a result, which can then be read back out.

How to test

  1. Set clock_sel=1 (internal ring oscillator is used as the clock source). Ring-osc clock, divided by 16, should be present on cdebug -- expected to be on the order of 12.5MHz to 25MHz.
  2. Set mode=0 (we're going to load the number of cycles for which we want the worker to run).
  3. Assert reset. No need to supply a clock on clk. Expect done==0.
  4. Load a sequence of 4 bytes: a rising edge on shift loads each byte, in turn, via din[7:0]. First 2 bytes are a starting value (MSB first). The next 2 bytes are a cycle count. In mode==0 this cycle count is used, while in mode==1 it is repurposed as the addend for an adder experiment.
  5. After the 4th byte has been loaded, the worker should start, and set done==1 when it finishes.
  6. When done, dout[7:0] should be presenting the first byte (MSB) of the output data; shift out 4 bytes in total via dout[7:0] by raising shift each time again (which in turn loads 4 more bytes, so it will start again). The first 2 bytes out are the 'starting value' incremented by the counter value (i.e. it should be the starting value, plus the internal counter value), and the last 2 bytes are the internal counter value (which started at 0).

External hardware

Nothing special. Probably just an oscilloscope to see how fast it actually yields a result.

IO

#InputOutputBidirectional
0din[0]dout[0]shift
1din[1]dout[1]clock_sel
2din[2]dout[2]mode
3din[3]dout[3]stop
4din[4]dout[4]
5din[5]dout[5]running
6din[6]dout[6]done
7din[7]dout[7]cdebug

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (Tiny Tapeout Factory Test) tt_um_htfab_r2r_dac (R-2R DAC) tt_um_algofoogle_antonalog (Antonalog analog VGA) tt_um_NicklausThompson_555_1x1 (HBT Comparator) tt_um_urish_dickson_pump (Dickson Charge Pump) tt_um_htfab_yadge (Yet Another Diffraction Grating Experiment) tt_um_colorful_stripes (Colorful stripes) tt_um_rte_eink_driver (E-ink display driver) tt_um_bleeptrack_prism (Prism) tt_um_calonso88_spi_test (SPI test) tt_um_sathworld_spi_pwm_peripheral (SPI-connected PWM generator) tt_um_lfsr_stevej (Linear Feedback Shift Register) tt_um_strau0106_simple_viii (simple-viii) tt_um_algofoogle_ro_worker (Ring Oscillator Worker) tt_um_vga_clock (VGA clock) tt_um_a1k0n_demo (Demo by a1k0n) tt_um_algofoogle_fun_vga_clock (Fun VGA Clock) tt_um_digital_clock_example (7-Segment Digital Desk Clock) tt_um_urish_simon (Simon Says memory game) tt_um_ihp_logo_screensaver (VGA Screensaver with the IHP Logo) tt_um_zerotoasic_logo_screensaver (VGA Screensaver with Zero to ASIC Logo) tt_um_arud4172_ROOTS_vga (ROOTS logo vga) Available