blob: 2b159afbbdb93467c717db88ca0754b28bb995a1 [file] [log] [blame] [edit]
// 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."
}
]
}
]
}