| // Copyright lowRISC contributors. | 
 | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
 | // SPDX-License-Identifier: Apache-2.0 | 
 |  | 
 | { | 
 |   name:               "pattgen", | 
 |   human_name:         "Pattern Generator", | 
 |   one_line_desc:      "Transmission of short time-dependent data patterns on two clock-parallel output channels", | 
 |   one_paragraph_desc: ''' | 
 |   Pattern Generator transmits short time-dependent data patterns on two clock-parallel channels. | 
 |   Each channel consists of one clock and one data line. | 
 |   The channels are configured using the following parameters: clock divider ratio, clock polarity, pattern length, pattern data, and repetition count. | 
 |   Effectively, Pattern Generator outputs the pattern data a specified number of times with the corresponding clock and then raises an interrupt when it is done. | 
 |   ''' | 
 |   design_spec:        "../doc", | 
 |   dv_doc:             "../doc/dv", | 
 |   hw_checklist:       "../doc/checklist", | 
 |   sw_checklist:       "/sw/device/lib/dif/dif_pattgen", | 
 |   revisions: [ | 
 |     { | 
 |       version:            "1.0", | 
 |       life_stage:         "L1", | 
 |       design_stage:       "D2S", | 
 |       verification_stage: "V2S", | 
 |       dif_stage:          "S2", | 
 |       notes:              "" | 
 |     } | 
 |   ] | 
 |   clocking: [{clock: "clk_i", reset: "rst_ni"}], | 
 |   bus_interfaces: [ | 
 |     { protocol: "tlul", direction: "device" } | 
 |   ], | 
 |   regwidth: "32", | 
 |   // OUTPUT pins | 
 |   available_output_list: [ | 
 |     { name: "pda0_tx", desc: "Serial output data bit for pattern generation on Channel 0" } | 
 |     { name: "pcl0_tx", desc: "Clock corresponding to pattern data on Channel 0" } | 
 |     { name: "pda1_tx", desc: "Serial output data bit for pattern generation on Channel 1" } | 
 |     { name: "pcl1_tx", desc: "Clock corresponding to pattern data on Channel 1" } | 
 |   ] | 
 |   // INTERRUPT pins | 
 |   interrupt_list: [ | 
 |     { name: "done_ch0" | 
 |       desc: "raise if pattern generation on Channel 0 is complete" | 
 |     } | 
 |     { name: "done_ch1" | 
 |       desc: "raise if pattern generation on Channel 1 is complete" | 
 |     } | 
 |   ], | 
 |   alert_list: [ | 
 |     { name: "fatal_fault", | 
 |       desc: ''' | 
 |       This fatal alert is triggered when a fatal TL-UL bus integrity fault is detected. | 
 |       ''' | 
 |     } | 
 |   ], | 
 |   param_list: [ | 
 |     { name:    "NumRegsData", | 
 |       type:    "int", | 
 |       default: "2", | 
 |       desc:    "Number of data registers per each channel", | 
 |       local:   "true" | 
 |     } | 
 |   ], | 
 |   countermeasures: [ | 
 |     { name: "BUS.INTEGRITY", | 
 |       desc: "End-to-end bus integrity scheme." | 
 |     } | 
 |   ] | 
 |  | 
 |   // REGISTER definition | 
 |   registers: [ | 
 |     // CTRL register | 
 |     { name: "CTRL", | 
 |       desc: "PATTGEN control register", | 
 |       swaccess: "rw", | 
 |       hwaccess: "hro", | 
 |       fields: [ | 
 |         { bits: "0", | 
 |           resval: "0", | 
 |           name: "ENABLE_CH0", | 
 |           desc: "Enable pattern generator functionality for Channel 0", | 
 |           tags: [// don't write (e.g. 1'b1) to enable bit | 
 |                  // because DUT can operate with zero values programmed to registers - it affects several other csrs | 
 |                  "excl:CsrNonInitTests:CsrExclWrite"] | 
 |         } | 
 |         { bits: "1", | 
 |           resval: "0", | 
 |           name: "ENABLE_CH1", | 
 |           desc: "Enable pattern generator functionality for Channel 1", | 
 |           tags: [// don't write (e.g. 1'b1) to enable bit | 
 |                  // because DUT can operate with zero values programmed to registers - it affects several other csrs | 
 |                  "excl:CsrNonInitTests:CsrExclWrite"] | 
 |         } | 
 |         { bits: "2", | 
 |           resval: "0", | 
 |           name: "POLARITY_CH0", | 
 |           desc: "Clock (`pcl`) polarity for Channel 0.  If low, `pda` signal changes on falling edge of pcl signal, otherwise pda changes on rising edge. Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |         } | 
 |         { bits: "3", | 
 |           resval: "0", | 
 |           name: "POLARITY_CH1", | 
 |           desc: "Clock (`pcl`) polarity for Channel 1.  If low, `pda` signal changes on falling edge of `pcl` signal, otherwise pda changes on rising edge. Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |         } | 
 |       ] | 
 |     } | 
 |     { name: "PREDIV_CH0", | 
 |       desc: "PATTGEN pre-divider register for Channel 0", | 
 |       swaccess: "rw", | 
 |       hwaccess: "hro", | 
 |       fields: [ | 
 |         { bits: "31:0", | 
 |           resval: "0", | 
 |           name: "CLK_RATIO", | 
 |           desc: "Clock divider ratio fpr Channel 0 (relative to I/O clock). Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |         } | 
 |       ] | 
 |     }, | 
 |     { name: "PREDIV_CH1", | 
 |       desc: "PATTGEN pre-divider register for Channel 1", | 
 |       swaccess: "rw", | 
 |       hwaccess: "hro", | 
 |       fields: [ | 
 |         { bits: "31:0", | 
 |           resval: "0", | 
 |           name: "CLK_RATIO", | 
 |           desc: "Clock divider ratio for Channel 1 (relative to I/O clock). Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |         } | 
 |       ] | 
 |     }, | 
 |     { multireg: { | 
 |         name: "DATA_CH0", | 
 |         desc: "PATTGEN seed pattern multi-registers for Channel 0." | 
 |         count: "NumRegsData", | 
 |         cname: "PATTGEN", | 
 |         swaccess: "rw", | 
 |         hwaccess: "hro", | 
 |         fields: [ | 
 |           { bits: "31:0", | 
 |             resval: "0", | 
 |             name: "DATA", | 
 |             desc: "Seed pattern for Channel 0 (1-64 bits). Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |           } | 
 |         ] | 
 |       } | 
 |     }, | 
 |     { multireg: { | 
 |         name: "DATA_CH1", | 
 |         desc: "PATTGEN seed pattern multi-registers for Channel 1." | 
 |         count: "NumRegsData", | 
 |         cname: "PATTGEN", | 
 |         swaccess: "rw", | 
 |         hwaccess: "hro", | 
 |         fields: [ | 
 |           { bits: "31:0", | 
 |             resval: "0", | 
 |             name: "DATA", | 
 |             desc: "Seed pattern for Channel 1 (1-64 bits). Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |           } | 
 |         ] | 
 |       } | 
 |     }, | 
 |     { name: "SIZE", | 
 |       desc: "PATTGEN pattern length", | 
 |       swaccess: "rw", | 
 |       hwaccess: "hro", | 
 |       fields: [ | 
 |         { bits: "5:0", | 
 |           resval: "0", | 
 |           name: "LEN_CH0", | 
 |           desc: "Length of the seed pattern for Channel 0, minus 1. Valid values: 0..63. Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |         } | 
 |         { bits: "15:6", | 
 |           resval: "0", | 
 |           name: "REPS_CH0", | 
 |           desc: "Number of pattern repetitions for Channel 0, minus 1. Valid values: 0..1023. Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |         } | 
 |         { bits: "21:16", | 
 |           resval: "0", | 
 |           name: "LEN_CH1", | 
 |           desc: "Length of the seed pattern for Channel 1, minus 1. Valid values: 0..63. Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |         } | 
 |         { bits: "31:22", | 
 |           resval: "0", | 
 |           name: "REPS_CH1", | 
 |           desc: "Number of pattern repetitions for Channel 1, minus 1. Valid values: 0..1023. Note that writes to a channel's configuration registers have no effect while the channel is enabled." | 
 |         } | 
 |       ] | 
 |     } | 
 |   ] | 
 | } |