2626 * address range by setting the GRPOFFSET, GRPAW, and GRPID parameter.
2727 * The address range [GRPOFFSET+:GRPAW] is checked against GRPID for a
2828 * match. To disable the check, set the GRPAW to 0.
29+ * - Modified from original umi_regif code to add an array of registers
2930 *
3031 *****************************************************************************/
3132module umidev
3233 #(parameter RW = 32 , // register data width (RW<=DW)
33- parameter RAW = 32 , // register address width (RAW<=AW)
34+ parameter RAW = 5 , // register address width (RAW<=AW)
3435 parameter GRPOFFSET = 24 , // group address offset
3536 parameter GRPAW = 0 , // group address width
3637 parameter GRPID = 0 , // group ID
@@ -55,32 +56,34 @@ module umidev
5556 output reg [AW- 1 :0 ] udev_resp_dstaddr,
5657 output reg [AW- 1 :0 ] udev_resp_srcaddr,
5758 output reg [DW- 1 :0 ] udev_resp_data,
58- input udev_resp_ready,
59- // single-port register interface
60- output reg_write, // write enable
61- output reg_read, // read request
62- output [RAW- 1 :0 ] reg_addr, // address
63- output [RW- 1 :0 ] reg_wdata, // write data
64- output [1 :0 ] reg_prot, // protection
65- input [RW- 1 :0 ] reg_rdata, // read data
66- input [1 :0 ] reg_err, // device error
67- input reg_ready // device is ready
59+ input udev_resp_ready
6860 );
6961
7062`include "umi_messages.vh"
7163
7264 // local state
7365 reg udev_req_safe_ready;
74-
66+ reg [RW - 1 : 0 ] regs [( 2 ** RAW) - 1 : 0 ];
7567
7668 // local wires
77- wire [CW- 1 :0 ] resp_cmd;
78- wire cmd_read;
79- wire cmd_write;
80- wire cmd_posted;
81- wire cmd_atomic;
82- wire match;
83- wire beat;
69+ wire [CW- 1 :0 ] resp_cmd;
70+ wire cmd_read;
71+ wire cmd_write;
72+ wire cmd_posted;
73+ wire cmd_atomic;
74+ wire match;
75+ wire beat;
76+ wire reg_ready;
77+ wire [1 :0 ] reg_err;
78+ wire [RAW- 1 :0 ] reg_addr;
79+ wire [RW- 1 :0 ] reg_wdata;
80+ wire [RW- 1 :0 ] reg_rdata;
81+
82+ // ######################################
83+ // Constants
84+ // ######################################
85+ assign reg_ready = 1'b1 ;
86+ assign reg_err[1 :0 ] = 2'b00 ;
8487
8588 // ######################################
8689 // UMI Request
@@ -118,14 +121,20 @@ module umidev
118121 assign beat = udev_req_valid & udev_req_ready;
119122
120123 // ######################################
121- // Register Interface
124+ // Register Access
122125 // ######################################
123126
124127 assign reg_write = (cmd_write | cmd_posted) & beat;
125128 assign reg_read = cmd_read & beat;
126129 assign reg_addr[RAW- 1 :0 ] = udev_req_dstaddr[RAW- 1 :0 ];
127130 assign reg_wdata[RW- 1 :0 ] = udev_req_data[RW- 1 :0 ];
128- assign reg_prot[1 :0 ] = udev_req_cmd[21 :20 ];
131+
132+ always @(posedge clk) begin
133+ if (reg_write)
134+ regs[reg_addr] <= reg_wdata[RW- 1 :0 ];
135+ end
136+
137+ assign reg_rdata = regs[reg_addr];
129138
130139 // ######################################
131140 // UMI Response
0 commit comments