|
| 1 | +.. _util_var_fifo: |
| 2 | + |
| 3 | +Util VAR FIFO |
| 4 | +=============================================================================== |
| 5 | + |
| 6 | +.. hdl-component-diagram:: |
| 7 | + |
| 8 | +The :git-hdl:`Util VAR FIFO <library/util_var_fifo>` core |
| 9 | +controls an external BRAM memory through which it allows |
| 10 | +the storage of a variable number of samples before triggering. |
| 11 | + |
| 12 | +Features |
| 13 | +-------------------------------------------------------------------------------- |
| 14 | + |
| 15 | +* Variable depth |
| 16 | + |
| 17 | +Files |
| 18 | +-------------------------------------------------------------------------------- |
| 19 | + |
| 20 | +.. list-table:: |
| 21 | + :header-rows: 1 |
| 22 | + |
| 23 | + * - Name |
| 24 | + - Description |
| 25 | + * - :git-hdl:`library/util_var_fifo/util_var_fifo.v` |
| 26 | + - Verilog source for the peripheral. |
| 27 | + |
| 28 | +Configuration Parameters |
| 29 | +-------------------------------------------------------------------------------- |
| 30 | + |
| 31 | +.. hdl-parameters:: |
| 32 | + |
| 33 | + * - DATA_WIDTH |
| 34 | + - Data width of the FIFO. The BRAM generator parameters should match this. |
| 35 | + * - ADDRESS_WIDTH |
| 36 | + - The BRAM generator parameters should match this. Gives the maximum depth |
| 37 | + of the FIFO |
| 38 | + |
| 39 | +Interface |
| 40 | +-------------------------------------------------------------------------------- |
| 41 | + |
| 42 | +.. hdl-interfaces:: |
| 43 | + |
| 44 | + * - clk |
| 45 | + - Clock input. Should be synchronous to the input and the output data. |
| 46 | + * - rst |
| 47 | + - Reset input. Should be synchronous clk clock |
| 48 | + * - depth |
| 49 | + - Controls the depth of the FIFO. Should be less than the maximum depth. |
| 50 | + Controlled by an outside IP. |
| 51 | + * - data_in |
| 52 | + - Data to be stored. |
| 53 | + * - data_in_valid |
| 54 | + - Valid for the input data. |
| 55 | + * - data_out |
| 56 | + - Data forwarded to the DMA. |
| 57 | + * - data_out_valid |
| 58 | + - Valid for the output data. |
| 59 | + * - wea_w |
| 60 | + - Write signal. |
| 61 | + * - en_w |
| 62 | + - Write enable signal. |
| 63 | + * - addr_w |
| 64 | + - Address for the write pointer. |
| 65 | + * - din_w |
| 66 | + - Data to be written to the BRAM. |
| 67 | + * - en_r |
| 68 | + - Read enable signal. |
| 69 | + * - addr_r |
| 70 | + - Address for the read pointer. |
| 71 | + * - dout_r |
| 72 | + - Data read from the BRAM. |
| 73 | + |
| 74 | +Detailed Description |
| 75 | +-------------------------------------------------------------------------------- |
| 76 | + |
| 77 | +This IP controls an external BRAM. It has a two clock cycle latency even if |
| 78 | +bypassed. |
| 79 | +If valid is not always asserted, the latency is only one word instead of two. |
| 80 | + |
| 81 | +Design Guidelines |
| 82 | +-------------------------------------------------------------------------------- |
| 83 | + |
| 84 | +The IP should be used with an external BRAM, which can be optimized for power |
| 85 | +or for speed, depending on the design requirements. It uses only one clock |
| 86 | +domain, so everything should be synchronous to that clock domain. |
0 commit comments