Register tree components
The following modules are the building blocks assembled by Firmware/Scripts/register_tree_gen.py into register tree structures.
reg_rw
Generic:
default_g: This value will be set after reset release. If unspecified, zero is assumed.
Ports:
clk_fpga_i: Input clock.rstn_i: Synchronous active-low reset.command_i: Specifies what operation shall be carried out. 0 = read, 1 = write.cmd_valid_i: 1-cycle pulse to request a read or write of the register’s contents.mosi_data_i: Serial line where data to be written into the register is received.reply_valid_o: 1-cycle pulse to notify the start of transmission of data to be read by “regtree_access”.miso_data_o: Serial line where data is serialized for transmission to “regtree_access”.core_data_o: 16-bit parallel bus for the FPGA to access this register’s data.
This module is going to be used mainly to control other modules’ behavior. A default state can be specified with the default_g generic.
reg_ro
Ports:
clk_i: Input clock.rstn_i: Synchronous active-low reset.cmd_valid_i: 1-cycle pulse to request a read of the register’s contents.reply_valid_o: 1-cycle pulse to notify the start of transmission of data to be read by “regtree_access”.miso_data_o: Serial line where data is serialized for transmission to “regtree_access”.core_data_i: 16-bit parallel bus for the FPGA to write data into this register.
This module is going to be used mainly to read status values generated from other modules. For example, error bits, status bits, or values.
reg_const
Generic:
default_g: This value will be set after reset release. It must be specified for this register type.
Ports:
clk_i: Input clock.rstn_i: Synchronous active-low reset.cmd_valid_i: 1-cycle pulse to request a read of the register’s contents.reply_valid_o: 1-cycle pulse to notify the start of transmission of data to be read by “regtree_access”.miso_data_o: Serial line where data is serialized for transmission to “regtree_access”.core_data_o: 16-bit parallel bus for the FPGA to access this register’s data.
This module is going to be used mainly to specify static information such as firmware versions, dates or fixed configurations.
reg_demux
Generic:
n_outputs_g: Sets the number of outputs. The default value is 8.
Ports:
clk_i: Input clock.rstn_i: Synchronous active-low reset.address_i: Controls to which output the input signal is propagated in this demux and in the downstream demux modules.command_i: Command received from the upstream demux to be sent to the downstream register selected by the address.cmd_valid_i: Valid pulse received from the upstream demux to be sent to the downstream register selected by the address.data_i: Data bit received from the upstream demux to be sento to the downstream register selected by the address.command_o: Output vector of lengthn_outputs_g. The value ofcommand_iis copied in all bits of this vector.cmd_valid_o: Output vector of lengthn_outputs_g. The value ofcmd_valid_iis copied to the bit of this vector selected by the address, while the other bits are kept low.data_o: Output vector of lengthn_outputs_g. The value ofdata_iis copied in all bits of this vector.
This demultiplexer is a synchronous design; the outputs are registered, thus becoming available with one clock cycle of delay. This is done to accommodate deep registers trees where signal propagation times can be a problem. The reset only acts on cmd_valid_o, as all other values are ignored when this signal is low.
reg_mux
Ports:
clk_i: Input clock.rstn_i: Synchronous active-low reset.valid_i: Input vector of unconstrained length, where valid pulses from upstream registers/muxes are collected.data_i: Input vector with the same length asvalid_i, collecting data bits produced by registers during read operations.valid_o: Single-bit output set to 1 whenever at least 1 bit is high invalid_i.data_o: Single-bit output set to 1 whenever at least 1 bit is high indata_i.
This modules behaves as a registered OR gate, reducing the input vectors after one clock cycle of latency.