OpenCores
URL https://opencores.org/ocsvn/yifive/yifive/trunk

Subversion Repositories yifive

[/] [yifive/] [trunk/] [caravel_yifive/] [verilog/] [rtl/] [syntacore/] [scr1/] [src/] [core/] [pipeline/] [scr1_pipe_top.sv] - Blame information for rev 21

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 11 dinesha
/// Copyright by Syntacore LLC © 2016-2020. See LICENSE for details
2
/// @file       
3
/// @brief      SCR1 pipeline top
4
///
5
 
6 21 dinesha
//----------------------------------------------------------------------------------
7
//  project : YiFive
8
// Rev: June 10, 2021, Dinesh A
9
//           Bugfix- reset correction for scr1_pipe_tdu when debug is not enabled
10
//           Note: previously reset rst_n is floating at simulation is failing
11
//           when SCR1_DBG_EN is disabled
12
//---------------------------------------------------------------------------------
13
 
14 11 dinesha
`include "scr1_arch_description.svh"
15
`include "scr1_memif.svh"
16
`include "scr1_riscv_isa_decoding.svh"
17
`include "scr1_csr.svh"
18
 
19
`ifdef SCR1_IPIC_EN
20
`include "scr1_ipic.svh"
21
`endif // SCR1_IPIC_EN
22
 
23
`ifdef SCR1_DBG_EN
24
`include "scr1_hdu.svh"
25
`endif // SCR1_DBG_EN
26
 
27
`ifdef SCR1_TDU_EN
28
`include "scr1_tdu.svh"
29
`endif // SCR1_TDU_EN
30
 
31
module scr1_pipe_top (
32
    // Common
33
    input   logic                                       pipe_rst_n,                 // Pipe reset
34
`ifdef SCR1_DBG_EN
35
    input   logic                                       pipe2hdu_rdc_qlfy_i,        // Pipe RDC qualifier
36
    input   logic                                       dbg_rst_n,                  // Debug reset
37
`endif // SCR1_DBG_EN
38
    input   logic                                       clk,                        // Pipe clock
39
 
40
    // Instruction Memory Interface
41
    output  logic                                       pipe2imem_req_o,            // IMEM request
42 21 dinesha
    output  logic                                       pipe2imem_cmd_o,            // IMEM command
43 11 dinesha
    output  logic [`SCR1_IMEM_AWIDTH-1:0]               pipe2imem_addr_o,           // IMEM address
44
    input   logic                                       imem2pipe_req_ack_i,        // IMEM request acknowledge
45
    input   logic [`SCR1_IMEM_DWIDTH-1:0]               imem2pipe_rdata_i,          // IMEM read data
46 21 dinesha
    input   logic [1:0]                                 imem2pipe_resp_i,           // IMEM response
47 11 dinesha
 
48
    // Data Memory Interface
49
    output  logic                                       pipe2dmem_req_o,            // DMEM request
50 21 dinesha
    output  logic                                       pipe2dmem_cmd_o,            // DMEM command
51
    output  logic [1:0]                                 pipe2dmem_width_o,          // DMEM data width
52 11 dinesha
    output  logic [`SCR1_DMEM_AWIDTH-1:0]               pipe2dmem_addr_o,           // DMEM address
53
    output  logic [`SCR1_DMEM_DWIDTH-1:0]               pipe2dmem_wdata_o,          // DMEM write data
54
    input   logic                                       dmem2pipe_req_ack_i,        // DMEM request acknowledge
55
    input   logic [`SCR1_DMEM_DWIDTH-1:0]               dmem2pipe_rdata_i,          // DMEM read data
56 21 dinesha
    input   logic [1:0]                                 dmem2pipe_resp_i,           // DMEM response
57 11 dinesha
 
58
`ifdef SCR1_DBG_EN
59
    // Debug interface:
60
    input  logic                                        dbg_en,                     // 1 - debug operations enabled
61
    // DM <-> Pipeline: HART Run Control i/f
62
    input  logic                                        dm2pipe_active_i,           // Debug Module active flag
63
    input  logic                                        dm2pipe_cmd_req_i,          // Request from Debug Module
64
    input  type_scr1_hdu_dbgstates_e                    dm2pipe_cmd_i,              // Command from Debug Module
65
    output logic                                        pipe2dm_cmd_resp_o,         // Response to Debug Module
66
    output logic                                        pipe2dm_cmd_rcode_o,        // Debug Module return code: 0 - Ok; 1 - Error
67
    output logic                                        pipe2dm_hart_event_o,       // HART event flag
68
    output type_scr1_hdu_hartstatus_s                   pipe2dm_hart_status_o,      // HART status
69
 
70
    // DM <-> Pipeline: Program Buffer - HART instruction execution i/f
71
    output logic [SCR1_HDU_PBUF_ADDR_WIDTH-1:0]         pipe2dm_pbuf_addr_o,        // Program Buffer address
72
    input  logic [SCR1_HDU_CORE_INSTR_WIDTH-1:0]        dm2pipe_pbuf_instr_i,       // Program Buffer instruction
73
 
74
    // DM <-> Pipeline: HART Abstract Data regs i/f
75
    output logic                                        pipe2dm_dreg_req_o,         // Abstract Data Register request
76
    output logic                                        pipe2dm_dreg_wr_o,          // Abstract Data Register write
77
    output logic [`SCR1_XLEN-1:0]                       pipe2dm_dreg_wdata_o,       // Abstract Data Register write data
78
    input  logic                                        dm2pipe_dreg_resp_i,        // Abstract Data Register response
79
    input  logic                                        dm2pipe_dreg_fail_i,        // Abstract Data Register fail - possibly not needed?
80
    input  logic [`SCR1_XLEN-1:0]                       dm2pipe_dreg_rdata_i,       // Abstract Data Register read data
81
 
82
    // DM <-> Pipeling: PC i/f
83
    output logic [`SCR1_XLEN-1:0]                       pipe2dm_pc_sample_o,        // Current PC for sampling
84
`endif // SCR1_DBG_EN
85
 
86
    // IRQ
87
`ifdef SCR1_IPIC_EN
88
    input   logic [SCR1_IRQ_LINES_NUM-1:0]              soc2pipe_irq_lines_i,       // External interrupt request lines
89
`else // SCR1_IPIC_EN
90
    input   logic                                       soc2pipe_irq_ext_i,         // External interrupt request
91
`endif // SCR1_IPIC_EN
92
    input   logic                                       soc2pipe_irq_soft_i,        // Software generated interrupt request
93
    input   logic                                       soc2pipe_irq_mtimer_i,      // Machine timer interrupt request
94
 
95
    // Memory-mapped external timer
96
    input   logic [63:0]                                soc2pipe_mtimer_val_i,      // Machine timer value
97
 
98
`ifdef SCR1_CLKCTRL_EN
99
    // CLK_CTRL interface
100
    output  logic                                       pipe2clkctl_sleep_req_o,    // CLK disable request to CLK gating circuit
101
    output  logic                                       pipe2clkctl_wake_req_o,     // CLK enable request to CLK gating circuit
102
    input   logic                                       clkctl2pipe_clk_alw_on_i,   // Not gated CLK
103
    input   logic                                       clkctl2pipe_clk_dbgc_i,     // CLK for HDU (not gated for now)
104
    input   logic                                       clkctl2pipe_clk_en_i,       // CLK enabled flag
105
`endif // SCR1_CLKCTRL_EN
106
 
107
    // Fuse
108
    input   logic [`SCR1_XLEN-1:0]                      soc2pipe_fuse_mhartid_i     // Fuse MHARTID value
109
);
110
 
111
//-------------------------------------------------------------------------------
112
// Local signals declaration
113
//-------------------------------------------------------------------------------
114
 
115
// Pipeline control
116
logic [`SCR1_XLEN-1:0]                      curr_pc;                // Current PC
117
logic [`SCR1_XLEN-1:0]                      next_pc;                // Is written to MEPC on interrupt trap
118
logic                                       new_pc_req;             // New PC request (jumps, branches, traps etc)
119
logic [`SCR1_XLEN-1:0]                      new_pc;                 // New PC
120
 
121
logic                                       stop_fetch;             // Stop IFU
122
logic                                       exu_exc_req;            // Exception request
123
logic                                       brkpt;                  // Breakpoint (sw) on current instruction
124
logic                                       exu_init_pc;            // Reset exit
125
logic                                       wfi_run2halt;           // Transition to WFI halted state
126
logic                                       instret;                // Instruction retirement (with or without exception)
127
logic                                       instret_nexc;           // Instruction retirement (without exception)
128
`ifdef SCR1_IPIC_EN
129
logic                                       ipic2csr_irq;           // IRQ request from IPIC
130
`endif // SCR1_IPIC_EN
131
`ifdef SCR1_TDU_EN
132
logic                                       brkpt_hw;               // Hardware breakpoint on current instruction
133
`endif // SCR1_TDU_EN
134
`ifdef SCR1_CLKCTRL_EN
135
logic                                       imem_txns_pending;      // There are pending imem transactions
136
logic                                       wfi_halted;             // WFI halted state
137
`endif // SCR1_CLKCTRL_EN
138
 
139
// IFU <-> IDU
140
logic                                       ifu2idu_vd;             // IFU request
141
logic [`SCR1_IMEM_DWIDTH-1:0]               ifu2idu_instr;          // IFU instruction
142
logic                                       ifu2idu_imem_err;       // IFU instruction access fault
143
logic                                       ifu2idu_err_rvi_hi;     // 1 - imem fault when trying to fetch second half of an unaligned RVI instruction
144
logic                                       idu2ifu_rdy;            // IDU ready for new data
145
 
146
// IDU <-> EXU
147
logic                                       idu2exu_req;            // IDU request
148
type_scr1_exu_cmd_s                         idu2exu_cmd;            // IDU command (see scr1_riscv_isa_decoding.svh)
149
logic                                       idu2exu_use_rs1;        // Instruction uses rs1
150
logic                                       idu2exu_use_rs2;        // Instruction uses rs2
151
logic                                       idu2exu_use_rd;         // Instruction uses rd
152
logic                                       idu2exu_use_imm;        // Instruction uses immediate
153
logic                                       exu2idu_rdy;            // EXU ready for new data
154
 
155
// EXU <-> MPRF
156
logic [`SCR1_MPRF_AWIDTH-1:0]               exu2mprf_rs1_addr;      // MPRF rs1 read address
157
logic [`SCR1_XLEN-1:0]                      mprf2exu_rs1_data;      // MPRF rs1 read data
158
logic [`SCR1_MPRF_AWIDTH-1:0]               exu2mprf_rs2_addr;      // MPRF rs2 read address
159
logic [`SCR1_XLEN-1:0]                      mprf2exu_rs2_data;      // MPRF rs2 read data
160
logic                                       exu2mprf_w_req;         // MPRF write request
161
logic [`SCR1_MPRF_AWIDTH-1:0]               exu2mprf_rd_addr;       // MPRF rd write address
162
logic [`SCR1_XLEN-1:0]                      exu2mprf_rd_data;       // MPRF rd write data
163
 
164
// EXU <-> CSR
165
logic [SCR1_CSR_ADDR_WIDTH-1:0]             exu2csr_rw_addr;        // CSR read/write address
166
logic                                       exu2csr_r_req;          // CSR read request
167
logic [`SCR1_XLEN-1:0]                      csr2exu_r_data;         // CSR read data
168
logic                                       exu2csr_w_req;          // CSR write request
169
type_scr1_csr_cmd_sel_e                     exu2csr_w_cmd;          // CSR write command
170
logic [`SCR1_XLEN-1:0]                      exu2csr_w_data;         // CSR write data
171
logic                                       csr2exu_rw_exc;         // CSR read/write access exception
172
 
173
// EXU <-> CSR event interface
174
logic                                       exu2csr_take_irq;       // Take IRQ trap
175
logic                                       exu2csr_take_exc;       // Take exception trap
176
logic                                       exu2csr_mret_update;    // MRET update CSR
177
logic                                       exu2csr_mret_instr;     // MRET instruction
178 21 dinesha
logic [SCR1_EXC_CODE_WIDTH_E-1:0]           exu2csr_exc_code;       // Exception code (see scr1_arch_types.svh)
179 11 dinesha
logic [`SCR1_XLEN-1:0]                      exu2csr_trap_val;       // Trap value
180
logic [`SCR1_XLEN-1:0]                      csr2exu_new_pc;         // Exception/IRQ/MRET new PC
181
logic                                       csr2exu_irq;            // IRQ request
182
logic                                       csr2exu_ip_ie;          // Some IRQ pending and locally enabled
183
logic                                       csr2exu_mstatus_mie_up; // MSTATUS or MIE update in the current cycle
184
 
185
`ifdef SCR1_IPIC_EN
186
// CSR <-> IPIC
187
logic                                       csr2ipic_r_req;         // IPIC read request
188
logic                                       csr2ipic_w_req;         // IPIC write request
189
logic [2:0]                                 csr2ipic_addr;          // IPIC address
190
logic [`SCR1_XLEN-1:0]                      csr2ipic_wdata;         // IPIC write data
191
logic [`SCR1_XLEN-1:0]                      ipic2csr_rdata;         // IPIC read data
192
`endif // SCR1_IPIC_EN
193
 
194
`ifdef SCR1_TDU_EN
195
// CSR <-> TDU
196
logic                                       csr2tdu_req;           // Request to TDU
197
type_scr1_csr_cmd_sel_e                     csr2tdu_cmd;           // TDU command
198
logic [SCR1_CSR_ADDR_TDU_OFFS_W-1:0]        csr2tdu_addr;          // TDU address
199
logic [`SCR1_XLEN-1:0]                      csr2tdu_wdata;         // TDU write data
200
logic [`SCR1_XLEN-1:0]                      tdu2csr_rdata;         // TDU read data
201
type_scr1_csr_resp_e                        tdu2csr_resp;          // TDU response
202
 `ifdef SCR1_DBG_EN
203
                                                                    // Qualified TDU input signals from pipe_rst_n
204
                                                                    // reset domain:
205
logic                                       csr2tdu_req_qlfy;      //     Request to TDU
206
 `endif // SCR1_DBG_EN
207
 
208
// EXU/LSU <-> TDU
209
type_scr1_brkm_instr_mon_s                  exu2tdu_i_mon;         // Instruction monitor
210
type_scr1_brkm_lsu_mon_s                    lsu2tdu_d_mon;         // Data monitor
211
logic [SCR1_TDU_ALLTRIG_NUM-1:0]            tdu2exu_i_match;       // Instruction breakpoint(s) match
212
logic [SCR1_TDU_MTRIG_NUM-1:0]              tdu2lsu_d_match;       // Data breakpoint(s) match
213
logic                                       tdu2exu_i_x_req;       // Instruction breakpoint exception
214
logic                                       tdu2lsu_i_x_req;       // Instruction breakpoint exception
215
logic                                       tdu2lsu_d_x_req;       // Data breakpoint exception
216
logic [SCR1_TDU_ALLTRIG_NUM-1:0]            exu2tdu_bp_retire;     // Instruction with breakpoint flag retire
217
 `ifdef SCR1_DBG_EN
218
                                                                    // Qualified TDU input signals from pipe_rst_n
219
                                                                    // reset domain:
220
type_scr1_brkm_instr_mon_s                  exu2tdu_i_mon_qlfy;         // Instruction monitor
221
type_scr1_brkm_lsu_mon_s                    lsu2tdu_d_mon_qlfy;         // Data monitor
222
logic [SCR1_TDU_ALLTRIG_NUM-1:0]            exu2tdu_bp_retire_qlfy;     // Instruction with breakpoint flag retire
223
 `endif // SCR1_DBG_EN
224
`endif // SCR1_TDU_EN
225
 
226
`ifdef SCR1_DBG_EN
227
// Debug signals:
228
logic                                       fetch_pbuf;             // Fetch instructions provided by Program Buffer (via HDU)
229
logic                                       csr2hdu_req;            // Request to HDU
230
type_scr1_csr_cmd_sel_e                     csr2hdu_cmd;            // HDU command
231
logic [SCR1_HDU_DEBUGCSR_ADDR_WIDTH-1:0]    csr2hdu_addr;           // HDU address
232
logic [`SCR1_XLEN-1:0]                      csr2hdu_wdata;          // HDU write data
233
logic [`SCR1_XLEN-1:0]                      hdu2csr_rdata;          // HDU read data
234
type_scr1_csr_resp_e                        hdu2csr_resp;           // HDU response
235
                                                                    // Qualified HDU input signals from pipe_rst_n
236
                                                                    // reset domain:
237
logic                                       csr2hdu_req_qlfy;       //     Request to HDU
238
 
239
logic                                       hwbrk_dsbl;             // Disables TDU
240
logic                                       hdu_hwbrk_dsbl;         // Disables TDU
241
logic                                       tdu2hdu_dmode_req;      // TDU requests transition to debug mode
242
 
243
logic                                       exu_no_commit;          // Forbid instruction commitment
244
logic                                       exu_irq_dsbl;           // Disable IRQ
245
logic                                       exu_pc_advmt_dsbl;      // Forbid PC advancement
246
logic                                       exu_dmode_sstep_en;     // Enable single-step
247
 
248
logic                                       dbg_halted;             // Debug halted state
249
logic                                       dbg_run2halt;           // Transition to debug halted state
250
logic                                       dbg_halt2run;           // Transition to run state
251
logic                                       dbg_run_start;          // First cycle of run state
252
logic [`SCR1_XLEN-1:0]                      dbg_new_pc;             // New PC as starting point for HART Resume
253
 
254
logic                                       ifu2hdu_pbuf_rdy;
255
logic                                       hdu2ifu_pbuf_vd;
256
logic                                       hdu2ifu_pbuf_err;
257
logic [SCR1_HDU_CORE_INSTR_WIDTH-1:0]       hdu2ifu_pbuf_instr;
258
 
259
// Qualified HDU input signals from pipe_rst_n reset domain:
260
logic                                       ifu2hdu_pbuf_rdy_qlfy;
261
logic                                       exu_busy_qlfy;
262
logic                                       instret_qlfy;
263
logic                                       exu_init_pc_qlfy;
264
logic                                       exu_exc_req_qlfy;
265
logic                                       brkpt_qlfy;
266
 
267
`endif // SCR1_DBG_EN
268
 
269
logic                                       exu_busy;
270
 
271
 
272
`ifndef SCR1_CLKCTRL_EN
273
logic                                       pipe2clkctl_wake_req_o;
274
`endif // SCR1_CLKCTRL_EN
275
 
276
//-------------------------------------------------------------------------------
277
// Pipeline logic
278
//-------------------------------------------------------------------------------
279
assign stop_fetch   = wfi_run2halt
280
`ifdef SCR1_DBG_EN
281
                    | fetch_pbuf
282
`endif // SCR1_DBG_EN
283
                    ;
284
 
285
`ifdef SCR1_CLKCTRL_EN
286
assign pipe2clkctl_sleep_req_o = wfi_halted & ~imem_txns_pending;
287
assign pipe2clkctl_wake_req_o  = csr2exu_ip_ie
288
`ifdef SCR1_DBG_EN
289
                    | dm2pipe_active_i
290
`endif // SCR1_DBG_EN
291
                    ;
292
`endif // SCR1_CLKCTRL_EN
293
 
294
`ifdef SCR1_DBG_EN
295
assign pipe2dm_pc_sample_o = curr_pc;
296
`endif // SCR1_DBG_EN
297
 
298
//-------------------------------------------------------------------------------
299
// Instruction fetch unit
300
//-------------------------------------------------------------------------------
301
scr1_pipe_ifu i_pipe_ifu (
302
    .rst_n                    (pipe_rst_n         ),
303
    .clk                      (clk                ),
304
 
305
    // Instruction memory interface
306
    .imem2ifu_req_ack_i       (imem2pipe_req_ack_i),
307
    .ifu2imem_req_o           (pipe2imem_req_o    ),
308
    .ifu2imem_cmd_o           (pipe2imem_cmd_o    ),
309
    .ifu2imem_addr_o          (pipe2imem_addr_o   ),
310
    .imem2ifu_rdata_i         (imem2pipe_rdata_i  ),
311
    .imem2ifu_resp_i          (imem2pipe_resp_i   ),
312
 
313
    // New PC interface
314
    .exu2ifu_pc_new_req_i     (new_pc_req         ),
315
    .exu2ifu_pc_new_i         (new_pc             ),
316
    .pipe2ifu_stop_fetch_i    (stop_fetch         ),
317
 
318
`ifdef SCR1_DBG_EN
319
    // IFU <-> HDU Program Buffer interface
320
    .hdu2ifu_pbuf_fetch_i     (fetch_pbuf         ),
321
    .ifu2hdu_pbuf_rdy_o       (ifu2hdu_pbuf_rdy   ),
322
    .hdu2ifu_pbuf_vd_i        (hdu2ifu_pbuf_vd    ),
323
    .hdu2ifu_pbuf_err_i       (hdu2ifu_pbuf_err   ),
324
    .hdu2ifu_pbuf_instr_i     (hdu2ifu_pbuf_instr ),
325
`endif // SCR1_DBG_EN
326
`ifdef SCR1_CLKCTRL_EN
327
    .ifu2pipe_imem_txns_pnd_o (imem_txns_pending  ),
328
`endif // SCR1_CLKCTRL_EN
329
 
330
    // IFU <-> IDU interface
331
    .idu2ifu_rdy_i            (idu2ifu_rdy        ),
332
    .ifu2idu_instr_o          (ifu2idu_instr      ),
333
    .ifu2idu_imem_err_o       (ifu2idu_imem_err   ),
334
    .ifu2idu_err_rvi_hi_o     (ifu2idu_err_rvi_hi ),
335
    .ifu2idu_vd_o             (ifu2idu_vd         )
336
);
337
 
338
//-------------------------------------------------------------------------------
339
// Instruction decode unit
340
//-------------------------------------------------------------------------------
341
scr1_pipe_idu i_pipe_idu (
342
`ifdef SCR1_TRGT_SIMULATION
343
    .rst_n                  (pipe_rst_n        ),
344
    .clk                    (clk               ),
345
`endif // SCR1_TRGT_SIMULATION
346
    .idu2ifu_rdy_o          (idu2ifu_rdy       ),
347
    .ifu2idu_instr_i        (ifu2idu_instr     ),
348
    .ifu2idu_imem_err_i     (ifu2idu_imem_err  ),
349
    .ifu2idu_err_rvi_hi_i   (ifu2idu_err_rvi_hi),
350
    .ifu2idu_vd_i           (ifu2idu_vd        ),
351
 
352
    .idu2exu_req_o          (idu2exu_req       ),
353
    .idu2exu_cmd_o          (idu2exu_cmd       ),
354
    .idu2exu_use_rs1_o      (idu2exu_use_rs1   ),
355
    .idu2exu_use_rs2_o      (idu2exu_use_rs2   ),
356
    .idu2exu_use_rd_o       (idu2exu_use_rd    ),
357
    .idu2exu_use_imm_o      (idu2exu_use_imm   ),
358
    .exu2idu_rdy_i          (exu2idu_rdy       )
359
);
360
 
361
//-------------------------------------------------------------------------------
362
// Execution unit
363
//-------------------------------------------------------------------------------
364
scr1_pipe_exu i_pipe_exu (
365
    .rst_n                          (pipe_rst_n              ),
366
    .clk                            (clk                     ),
367
`ifdef SCR1_CLKCTRL_EN
368
    .clk_alw_on                     (clkctl2pipe_clk_alw_on_i),
369
    .clk_pipe_en                    (clkctl2pipe_clk_en_i),
370
`endif // SCR1_CLKCTRL_EN
371
 
372
    // IDU <-> EXU interface
373
    .idu2exu_req_i                  (idu2exu_req             ),
374
    .exu2idu_rdy_o                  (exu2idu_rdy             ),
375
    .idu2exu_cmd_i                  (idu2exu_cmd             ),
376
    .idu2exu_use_rs1_i              (idu2exu_use_rs1         ),
377
    .idu2exu_use_rs2_i              (idu2exu_use_rs2         ),
378
`ifndef SCR1_NO_EXE_STAGE
379
    .idu2exu_use_rd_i               (idu2exu_use_rd          ),
380
    .idu2exu_use_imm_i              (idu2exu_use_imm         ),
381
`endif // SCR1_NO_EXE_STAGE
382
 
383
    // EXU <-> MPRF interface
384
    .exu2mprf_rs1_addr_o            (exu2mprf_rs1_addr       ),
385
    .mprf2exu_rs1_data_i            (mprf2exu_rs1_data       ),
386
    .exu2mprf_rs2_addr_o            (exu2mprf_rs2_addr       ),
387
    .mprf2exu_rs2_data_i            (mprf2exu_rs2_data       ),
388
    .exu2mprf_w_req_o               (exu2mprf_w_req          ),
389
    .exu2mprf_rd_addr_o             (exu2mprf_rd_addr        ),
390
    .exu2mprf_rd_data_o             (exu2mprf_rd_data        ),
391
 
392
    // EXU <-> CSR read/write interface
393
    .exu2csr_rw_addr_o              (exu2csr_rw_addr         ),
394
    .exu2csr_r_req_o                (exu2csr_r_req           ),
395
    .csr2exu_r_data_i               (csr2exu_r_data          ),
396
    .exu2csr_w_req_o                (exu2csr_w_req           ),
397
    .exu2csr_w_cmd_o                (exu2csr_w_cmd           ),
398
    .exu2csr_w_data_o               (exu2csr_w_data          ),
399
    .csr2exu_rw_exc_i               (csr2exu_rw_exc          ),
400
 
401
    // EXU <-> CSR event interface
402
    .exu2csr_take_irq_o             (exu2csr_take_irq        ),
403
    .exu2csr_take_exc_o             (exu2csr_take_exc        ),
404
    .exu2csr_mret_update_o          (exu2csr_mret_update     ),
405
    .exu2csr_mret_instr_o           (exu2csr_mret_instr      ),
406
    .exu2csr_exc_code_o             (exu2csr_exc_code        ),
407
    .exu2csr_trap_val_o             (exu2csr_trap_val        ),
408
    .csr2exu_new_pc_i               (csr2exu_new_pc          ),
409
    .csr2exu_irq_i                  (csr2exu_irq             ),
410
    .csr2exu_ip_ie_i                (csr2exu_ip_ie           ),
411
    .csr2exu_mstatus_mie_up_i       (csr2exu_mstatus_mie_up  ),
412
 
413
    // EXU <-> DMEM interface
414
    .exu2dmem_req_o                 (pipe2dmem_req_o         ),
415
    .exu2dmem_cmd_o                 (pipe2dmem_cmd_o         ),
416
    .exu2dmem_width_o               (pipe2dmem_width_o       ),
417
    .exu2dmem_addr_o                (pipe2dmem_addr_o        ),
418
    .exu2dmem_wdata_o               (pipe2dmem_wdata_o       ),
419
    .dmem2exu_req_ack_i             (dmem2pipe_req_ack_i     ),
420
    .dmem2exu_rdata_i               (dmem2pipe_rdata_i       ),
421
    .dmem2exu_resp_i                (dmem2pipe_resp_i        ),
422
 
423
`ifdef SCR1_DBG_EN
424
    // EXU <-> HDU interface
425
    .hdu2exu_no_commit_i            (exu_no_commit           ),
426
    .hdu2exu_irq_dsbl_i             (exu_irq_dsbl            ),
427
    .hdu2exu_pc_advmt_dsbl_i        (exu_pc_advmt_dsbl       ),
428
    .hdu2exu_dmode_sstep_en_i       (exu_dmode_sstep_en      ),
429
    .hdu2exu_pbuf_fetch_i           (fetch_pbuf              ),
430
    .hdu2exu_dbg_halted_i           (dbg_halted              ),
431
    .hdu2exu_dbg_run2halt_i         (dbg_run2halt            ),
432
    .hdu2exu_dbg_halt2run_i         (dbg_halt2run            ),
433
    .hdu2exu_dbg_run_start_i        (dbg_run_start           ),
434
    .hdu2exu_dbg_new_pc_i           (dbg_new_pc              ),
435
`endif // SCR1_DBG_EN
436
 
437
`ifdef SCR1_TDU_EN
438
    // EXU <-> TDU interface
439
    .exu2tdu_imon_o                 (exu2tdu_i_mon           ),
440
    .tdu2exu_ibrkpt_match_i         (tdu2exu_i_match         ),
441
    .tdu2exu_ibrkpt_exc_req_i       (tdu2exu_i_x_req         ),
442
    .lsu2tdu_dmon_o                 (lsu2tdu_d_mon           ),
443
    .tdu2lsu_ibrkpt_exc_req_i       (tdu2lsu_i_x_req         ),
444
    .tdu2lsu_dbrkpt_match_i         (tdu2lsu_d_match         ),
445
    .tdu2lsu_dbrkpt_exc_req_i       (tdu2lsu_d_x_req         ),
446
    .exu2tdu_ibrkpt_ret_o           (exu2tdu_bp_retire       ),
447
    .exu2hdu_ibrkpt_hw_o            (brkpt_hw                ),
448
`endif // SCR1_TDU_EN
449
 
450
    // EXU control
451
    .exu2pipe_exc_req_o             (exu_exc_req             ),
452
    .exu2pipe_brkpt_o               (brkpt                   ),
453
    .exu2pipe_init_pc_o             (exu_init_pc             ),
454
    .exu2pipe_wfi_run2halt_o        (wfi_run2halt            ),
455
    .exu2pipe_instret_o             (instret                 ),
456
    .exu2csr_instret_no_exc_o       (instret_nexc            ),
457
    .exu2pipe_exu_busy_o            (exu_busy                ),
458
 
459
    // PC interface
460
`ifdef SCR1_CLKCTRL_EN
461
    .exu2pipe_wfi_halted_o          (wfi_halted              ),
462
`endif // SCR1_CLKCTRL_EN
463
    .exu2pipe_pc_curr_o             (curr_pc                 ),
464
    .exu2csr_pc_next_o              (next_pc                 ),
465
    .exu2ifu_pc_new_req_o           (new_pc_req              ),
466
    .exu2ifu_pc_new_o               (new_pc                  )
467
);
468
 
469
//-------------------------------------------------------------------------------
470
// Multi-port register file
471
//-------------------------------------------------------------------------------
472
scr1_pipe_mprf i_pipe_mprf (
473
`ifdef SCR1_MPRF_RST_EN
474
    .rst_n                  (pipe_rst_n       ),
475
`endif // SCR1_MPRF_RST_EN
476
    .clk                    (clk              ),
477
 
478
    // EXU <-> MPRF interface
479
    .exu2mprf_rs1_addr_i    (exu2mprf_rs1_addr),
480
    .mprf2exu_rs1_data_o    (mprf2exu_rs1_data),
481
    .exu2mprf_rs2_addr_i    (exu2mprf_rs2_addr),
482
    .mprf2exu_rs2_data_o    (mprf2exu_rs2_data),
483
    .exu2mprf_w_req_i       (exu2mprf_w_req   ),
484
    .exu2mprf_rd_addr_i     (exu2mprf_rd_addr ),
485
    .exu2mprf_rd_data_i     (exu2mprf_rd_data )
486
);
487
 
488
//-------------------------------------------------------------------------------
489
// Control and status registers
490
//-------------------------------------------------------------------------------
491
scr1_pipe_csr i_pipe_csr (
492
    .rst_n                      (pipe_rst_n              ),
493
    .clk                        (clk                     ),
494
`ifdef SCR1_CLKCTRL_EN
495
    .clk_alw_on                 (clkctl2pipe_clk_alw_on_i),
496
`endif // SCR1_CLKCTRL_EN
497
 
498
    // EXU <-> CSR read/write interface
499
    .exu2csr_r_req_i            (exu2csr_r_req           ),
500
    .exu2csr_rw_addr_i          (exu2csr_rw_addr         ),
501
    .csr2exu_r_data_o           (csr2exu_r_data          ),
502
    .exu2csr_w_req_i            (exu2csr_w_req           ),
503
    .exu2csr_w_cmd_i            (exu2csr_w_cmd           ),
504
    .exu2csr_w_data_i           (exu2csr_w_data          ),
505
    .csr2exu_rw_exc_o           (csr2exu_rw_exc          ),
506
 
507
    // EXU <-> CSR event interface
508
    .exu2csr_take_irq_i         (exu2csr_take_irq        ),
509
    .exu2csr_take_exc_i         (exu2csr_take_exc        ),
510
    .exu2csr_mret_update_i      (exu2csr_mret_update     ),
511
    .exu2csr_mret_instr_i       (exu2csr_mret_instr      ),
512
    .exu2csr_exc_code_i         (exu2csr_exc_code        ),
513
    .exu2csr_trap_val_i         (exu2csr_trap_val        ),
514
    .csr2exu_new_pc_o           (csr2exu_new_pc          ),
515
    .csr2exu_irq_o              (csr2exu_irq             ),
516
    .csr2exu_ip_ie_o            (csr2exu_ip_ie           ),
517
    .csr2exu_mstatus_mie_up_o   (csr2exu_mstatus_mie_up  ),
518
 
519
`ifdef SCR1_IPIC_EN
520
    // CSR <-> IPIC interface
521
    .csr2ipic_r_req_o           (csr2ipic_r_req          ),
522
    .csr2ipic_w_req_o           (csr2ipic_w_req          ),
523
    .csr2ipic_addr_o            (csr2ipic_addr           ),
524
    .csr2ipic_wdata_o           (csr2ipic_wdata          ),
525
    .ipic2csr_rdata_i           (ipic2csr_rdata          ),
526
`endif // SCR1_IPIC_EN
527
 
528
    // CSR <-> PC interface
529
    .exu2csr_pc_curr_i          (curr_pc                 ),
530
    .exu2csr_pc_next_i          (next_pc                 ),
531
`ifndef SCR1_CSR_REDUCED_CNT
532
    .exu2csr_instret_no_exc_i   (instret_nexc            ),
533
`endif // SCR1_CSR_REDUCED_CNT
534
 
535
    // IRQ
536
`ifdef SCR1_IPIC_EN
537
    .soc2csr_irq_ext_i          (ipic2csr_irq            ),
538
`else // SCR1_IPIC_EN
539
    .soc2csr_irq_ext_i          (soc2pipe_irq_ext_i      ),
540
`endif // SCR1_IPIC_EN
541
    .soc2csr_irq_soft_i         (soc2pipe_irq_soft_i     ),
542
    .soc2csr_irq_mtimer_i       (soc2pipe_irq_mtimer_i   ),
543
 
544
    // Memory-mapped external timer
545
    .soc2csr_mtimer_val_i       (soc2pipe_mtimer_val_i   ),
546
 
547
`ifdef SCR1_DBG_EN
548
    // CSR <-> HDU interface
549
    .csr2hdu_req_o              (csr2hdu_req             ),
550
    .csr2hdu_cmd_o              (csr2hdu_cmd             ),
551
    .csr2hdu_addr_o             (csr2hdu_addr            ),
552
    .csr2hdu_wdata_o            (csr2hdu_wdata           ),
553
    .hdu2csr_rdata_i            (hdu2csr_rdata           ),
554
    .hdu2csr_resp_i             (hdu2csr_resp            ),
555
    .hdu2csr_no_commit_i        (exu_no_commit           ),
556
`endif // SCR1_DBG_EN
557
 
558
`ifdef SCR1_TDU_EN
559
    // CSR <-> TDU interface
560
    .csr2tdu_req_o              (csr2tdu_req             ),
561
    .csr2tdu_cmd_o              (csr2tdu_cmd             ),
562
    .csr2tdu_addr_o             (csr2tdu_addr            ),
563
    .csr2tdu_wdata_o            (csr2tdu_wdata           ),
564
    .tdu2csr_rdata_i            (tdu2csr_rdata           ),
565
    .tdu2csr_resp_i             (tdu2csr_resp            ),
566
`endif // SCR1_TDU_EN
567
    .soc2csr_fuse_mhartid_i     (soc2pipe_fuse_mhartid_i )
568
);
569
 
570
//-------------------------------------------------------------------------------
571
// Integrated programmable interrupt controller
572
//-------------------------------------------------------------------------------
573
`ifdef SCR1_IPIC_EN
574
scr1_ipic i_pipe_ipic (
575
    .rst_n                  (pipe_rst_n              ),
576
`ifdef SCR1_CLKCTRL_EN
577
    .clk                    (clkctl2pipe_clk_alw_on_i),
578
`else // SCR1_CLKCTRL_EN
579
    .clk                    (clk                     ),
580
`endif // SCR1_CLKCTRL_EN
581
    .soc2ipic_irq_lines_i   (soc2pipe_irq_lines_i    ),
582
    .csr2ipic_r_req_i       (csr2ipic_r_req          ),
583
    .csr2ipic_w_req_i       (csr2ipic_w_req          ),
584
    .csr2ipic_addr_i        (csr2ipic_addr           ),
585
    .csr2ipic_wdata_i       (csr2ipic_wdata          ),
586
    .ipic2csr_rdata_o       (ipic2csr_rdata          ),
587
    .ipic2csr_irq_m_req_o   (ipic2csr_irq            )
588
);
589
`endif // SCR1_IPIC_EN
590
 
591
//-------------------------------------------------------------------------------
592
// Breakpoint module
593
//-------------------------------------------------------------------------------
594
`ifdef SCR1_TDU_EN
595
scr1_pipe_tdu i_pipe_tdu (
596
    // Common signals
597
 `ifdef SCR1_DBG_EN
598
    .rst_n                      (dbg_rst_n             ),
599
 `else
600 21 dinesha
    .rst_n                      (pipe_rst_n            ), // dinesh-a: Bugfix- reset correction when debug is not enabled
601 11 dinesha
 `endif // SCR1_DBG_EN
602
    .clk                        (clk                   ),
603
    .clk_en                     (1'b1                  ),
604
 `ifdef SCR1_DBG_EN
605
    .tdu_dsbl_i                 (hwbrk_dsbl            ),
606
 `else // SCR1_DBG_EN
607
    .tdu_dsbl_i                 (1'b0                  ),
608
 `endif // SCR1_DBG_EN
609
 
610
    // TDU <-> CSR interface
611
 `ifdef SCR1_DBG_EN
612
    .csr2tdu_req_i              (csr2tdu_req_qlfy      ),
613
    .csr2tdu_cmd_i              (csr2tdu_cmd           ),
614
    .csr2tdu_addr_i             (csr2tdu_addr          ),
615
    .csr2tdu_wdata_i            (csr2tdu_wdata         ),
616
 `else // SCR1_DBG_EN
617
    .csr2tdu_req_i              (csr2tdu_req           ),
618
    .csr2tdu_cmd_i              (csr2tdu_cmd           ),
619
    .csr2tdu_addr_i             (csr2tdu_addr          ),
620
    .csr2tdu_wdata_i            (csr2tdu_wdata         ),
621
 `endif // SCR1_DBG_EN
622
    .tdu2csr_rdata_o            (tdu2csr_rdata         ),
623
    .tdu2csr_resp_o             (tdu2csr_resp          ),
624
 
625
    // TDU <-> EXU interface
626
 `ifdef SCR1_DBG_EN
627
    .exu2tdu_imon_i             (exu2tdu_i_mon_qlfy    ),
628
 `else // SCR1_DBG_EN
629
    .exu2tdu_imon_i             (exu2tdu_i_mon         ),
630
 `endif // SCR1_DBG_EN
631
    .tdu2exu_ibrkpt_match_o     (tdu2exu_i_match       ),
632
    .tdu2exu_ibrkpt_exc_req_o   (tdu2exu_i_x_req       ),
633
 `ifdef SCR1_DBG_EN
634
    .exu2tdu_bp_retire_i        (exu2tdu_bp_retire_qlfy),
635
 `else // SCR1_DBG_EN
636
    .exu2tdu_bp_retire_i        (exu2tdu_bp_retire     ),
637
 `endif // SCR1_DBG_EN
638
 
639
    // TDU <-> LSU interface
640
    .tdu2lsu_ibrkpt_exc_req_o   (tdu2lsu_i_x_req       ),
641
 `ifdef SCR1_DBG_EN
642
    .lsu2tdu_dmon_i             (lsu2tdu_d_mon_qlfy    ),
643
 `else // SCR1_DBG_EN
644
    .lsu2tdu_dmon_i             (lsu2tdu_d_mon         ),
645
 `endif // SCR1_DBG_EN
646
    .tdu2lsu_dbrkpt_match_o     (tdu2lsu_d_match       ),
647
    .tdu2lsu_dbrkpt_exc_req_o   (tdu2lsu_d_x_req       ),
648
    // EPU I/F
649
 `ifdef SCR1_DBG_EN
650
    .tdu2hdu_dmode_req_o        (tdu2hdu_dmode_req     )
651
 `else // SCR1_DBG_EN
652
    .tdu2hdu_dmode_req_o        (                      )
653
 `endif // SCR1_DBG_EN
654
);
655
 
656
 `ifdef SCR1_DBG_EN
657
assign hwbrk_dsbl               = (~dbg_en) | hdu_hwbrk_dsbl;
658
//
659
assign csr2tdu_req_qlfy         = dbg_en & csr2tdu_req & pipe2hdu_rdc_qlfy_i;
660
//
661
assign exu2tdu_i_mon_qlfy.vd    = exu2tdu_i_mon.vd & pipe2hdu_rdc_qlfy_i;
662
assign exu2tdu_i_mon_qlfy.req   = exu2tdu_i_mon.req;
663
assign exu2tdu_i_mon_qlfy.addr  = exu2tdu_i_mon.addr;
664
assign lsu2tdu_d_mon_qlfy.vd    = lsu2tdu_d_mon.vd & pipe2hdu_rdc_qlfy_i;
665
assign lsu2tdu_d_mon_qlfy.load  = lsu2tdu_d_mon.load;
666
assign lsu2tdu_d_mon_qlfy.store = lsu2tdu_d_mon.store;
667
assign lsu2tdu_d_mon_qlfy.addr  = lsu2tdu_d_mon.addr;
668
assign exu2tdu_bp_retire_qlfy   = exu2tdu_bp_retire & {$bits(exu2tdu_bp_retire){pipe2hdu_rdc_qlfy_i}};
669
 `endif // SCR1_DBG_EN
670
 
671
`endif // SCR1_TDU_EN
672
 
673
//-------------------------------------------------------------------------------
674
// HART Debug Unit (HDU)
675
//-------------------------------------------------------------------------------
676
`ifdef SCR1_DBG_EN
677
scr1_pipe_hdu i_pipe_hdu (
678
    // Common signals
679
    .rst_n                      (dbg_rst_n             ),
680
    .clk_en                     (dm2pipe_active_i      ),
681
`ifdef SCR1_CLKCTRL_EN
682
    .clk_pipe_en                (clkctl2pipe_clk_en_i  ),
683
    .clk                        (clkctl2pipe_clk_dbgc_i),
684
`else
685
    .clk                        (clk                   ),
686
`endif // SCR1_CLKCTRL_EN
687
 
688
    // Control/status registers i/f
689
    .csr2hdu_req_i              (csr2hdu_req_qlfy      ),
690
    .csr2hdu_cmd_i              (csr2hdu_cmd           ),
691
    .csr2hdu_addr_i             (csr2hdu_addr          ),
692
    .csr2hdu_wdata_i            (csr2hdu_wdata         ),
693
    .hdu2csr_resp_o             (hdu2csr_resp          ),
694
    .hdu2csr_rdata_o            (hdu2csr_rdata         ),
695
 
696
    // HART Run Control i/f
697
    .pipe2hdu_rdc_qlfy_i        (pipe2hdu_rdc_qlfy_i   ),
698
    .dm2hdu_cmd_req_i           (dm2pipe_cmd_req_i     ),
699
    .dm2hdu_cmd_i               (dm2pipe_cmd_i         ),
700
    .hdu2dm_cmd_resp_o          (pipe2dm_cmd_resp_o    ),
701
    .hdu2dm_cmd_rcode_o         (pipe2dm_cmd_rcode_o   ),
702
    .hdu2dm_hart_event_o        (pipe2dm_hart_event_o  ),
703
    .hdu2dm_hart_status_o       (pipe2dm_hart_status_o ),
704
 
705
    // Program Buffer - HART instruction execution i/f
706
    .hdu2dm_pbuf_addr_o         (pipe2dm_pbuf_addr_o   ),
707
    .dm2hdu_pbuf_instr_i        (dm2pipe_pbuf_instr_i  ),
708
 
709
    // HART Abstract Data regs i/f
710
    .hdu2dm_dreg_req_o          (pipe2dm_dreg_req_o    ),
711
    .hdu2dm_dreg_wr_o           (pipe2dm_dreg_wr_o     ),
712
    .hdu2dm_dreg_wdata_o        (pipe2dm_dreg_wdata_o  ),
713
    .dm2hdu_dreg_resp_i         (dm2pipe_dreg_resp_i   ),
714
    .dm2hdu_dreg_fail_i         (dm2pipe_dreg_fail_i   ),
715
    .dm2hdu_dreg_rdata_i        (dm2pipe_dreg_rdata_i  ),
716
    //
717
`ifdef SCR1_TDU_EN
718
    // HDU <-> TDU interface
719
    .hdu2tdu_hwbrk_dsbl_o       (hdu_hwbrk_dsbl        ),
720
    .tdu2hdu_dmode_req_i        (tdu2hdu_dmode_req     ),
721
    .exu2hdu_ibrkpt_hw_i        (brkpt_hw              ),
722
`endif // SCR1_TDU_EN
723
 
724
    // HART Run Status
725
    .pipe2hdu_exu_busy_i        (exu_busy_qlfy         ),
726
    .pipe2hdu_instret_i         (instret_qlfy          ),
727
    .pipe2hdu_init_pc_i         (exu_init_pc_qlfy      ),
728
 
729
    // HART Halt Status
730
    .pipe2hdu_exu_exc_req_i     (exu_exc_req_qlfy      ),
731
    .pipe2hdu_brkpt_i           (brkpt_qlfy            ),
732
 
733
    // HART Run Control
734
    .hdu2exu_pbuf_fetch_o       (fetch_pbuf            ),
735
    .hdu2exu_no_commit_o        (exu_no_commit         ),
736
    .hdu2exu_irq_dsbl_o         (exu_irq_dsbl          ),
737
    .hdu2exu_pc_advmt_dsbl_o    (exu_pc_advmt_dsbl     ),
738
    .hdu2exu_dmode_sstep_en_o   (exu_dmode_sstep_en    ),
739
 
740
    // HART state
741
    .hdu2exu_dbg_halted_o       (dbg_halted            ),
742
    .hdu2exu_dbg_run2halt_o     (dbg_run2halt          ),
743
    .hdu2exu_dbg_halt2run_o     (dbg_halt2run          ),
744
    .hdu2exu_dbg_run_start_o    (dbg_run_start         ),
745
 
746
    // PC interface
747
    .pipe2hdu_pc_curr_i         (curr_pc               ),
748
    .hdu2exu_dbg_new_pc_o       (dbg_new_pc            ),
749
 
750
    // Prgram Buffer Instruction interface
751
    .ifu2hdu_pbuf_instr_rdy_i   (ifu2hdu_pbuf_rdy_qlfy ),
752
    .hdu2ifu_pbuf_instr_vd_o    (hdu2ifu_pbuf_vd       ),
753
    .hdu2ifu_pbuf_instr_err_o   (hdu2ifu_pbuf_err      ),
754
    .hdu2ifu_pbuf_instr_o       (hdu2ifu_pbuf_instr    )
755
);
756
 
757
assign csr2hdu_req_qlfy         = csr2hdu_req & dbg_en & pipe2hdu_rdc_qlfy_i;
758
//
759
assign exu_busy_qlfy            = exu_busy          & {$bits(exu_busy){pipe2hdu_rdc_qlfy_i}};
760
assign instret_qlfy             = instret           & {$bits(instret){pipe2hdu_rdc_qlfy_i}};
761
assign exu_init_pc_qlfy         = exu_init_pc       & {$bits(exu_init_pc){pipe2hdu_rdc_qlfy_i}};
762
assign exu_exc_req_qlfy         = exu_exc_req       & {$bits(exu_exc_req){pipe2hdu_rdc_qlfy_i}};
763
assign brkpt_qlfy               = brkpt             & {$bits(brkpt){pipe2hdu_rdc_qlfy_i}};
764
assign ifu2hdu_pbuf_rdy_qlfy    = ifu2hdu_pbuf_rdy  & {$bits(ifu2hdu_pbuf_rdy){pipe2hdu_rdc_qlfy_i}};
765
 
766
`endif // SCR1_DBG_EN
767
 
768
`ifdef SCR1_TRGT_SIMULATION
769
//-------------------------------------------------------------------------------
770
// Tracelog
771
//-------------------------------------------------------------------------------
772
 
773
scr1_tracelog i_tracelog (
774
    .rst_n                          (pipe_rst_n                         ),
775
    .clk                            (clk                                ),
776
    .soc2pipe_fuse_mhartid_i        (soc2pipe_fuse_mhartid_i            ),
777
 
778
    // MPRF
779
    .mprf2trace_int_i               (i_pipe_mprf.mprf_int               ),
780
    .mprf2trace_wr_en_i             (i_pipe_mprf.exu2mprf_w_req_i       ),
781
    .mprf2trace_wr_addr_i           (i_pipe_mprf.exu2mprf_rd_addr_i     ),
782
    .mprf2trace_wr_data_i           (i_pipe_mprf.exu2mprf_rd_data_i     ),
783
 
784
    // EXU
785
    .exu2trace_update_pc_en_i       (i_pipe_exu.update_pc_en            ),
786
    .exu2trace_update_pc_i          (i_pipe_exu.update_pc               ),
787
 
788
    // IFU
789
    .ifu2trace_instr_i              (i_pipe_ifu.ifu2idu_instr_o         ),
790
 
791
    // CSR
792
    .csr2trace_mstatus_mie_i        (i_pipe_csr.csr_mstatus_mie_ff      ),
793
    .csr2trace_mstatus_mpie_i       (i_pipe_csr.csr_mstatus_mpie_ff     ),
794
    .csr2trace_mtvec_base_i         (i_pipe_csr.csr_mtvec_base          ),
795
    .csr2trace_mtvec_mode_i         (i_pipe_csr.csr_mtvec_mode          ),
796
    .csr2trace_mie_meie_i           (i_pipe_csr.csr_mie_meie_ff         ),
797
    .csr2trace_mie_mtie_i           (i_pipe_csr.csr_mie_mtie_ff         ),
798
    .csr2trace_mie_msie_i           (i_pipe_csr.csr_mie_msie_ff         ),
799
    .csr2trace_mip_meip_i           (i_pipe_csr.csr_mip_meip            ),
800
    .csr2trace_mip_mtip_i           (i_pipe_csr.csr_mip_mtip            ),
801
    .csr2trace_mip_msip_i           (i_pipe_csr.csr_mip_msip            ),
802
    .csr2trace_mepc_i               (i_pipe_csr.csr_mepc_ff             ),
803
    .csr2trace_mcause_irq_i         (i_pipe_csr.csr_mcause_i_ff         ),
804
    .csr2trace_mcause_ec_i          (i_pipe_csr.csr_mcause_ec_ff        ),
805
    .csr2trace_mtval_i              (i_pipe_csr.csr_mtval_ff            ),
806
    .csr2trace_mstatus_mie_up_i     (i_pipe_csr.csr2exu_mstatus_mie_up_o),
807
 
808
    // Events
809
    .csr2trace_e_exc_i              (i_pipe_csr.e_exc                   ),
810
    .csr2trace_e_irq_i              (i_pipe_csr.e_irq                   ),
811
    .pipe2trace_e_wake_i            (pipe2clkctl_wake_req_o             ),
812
    .csr2trace_e_mret_i             (i_pipe_csr.e_mret                  )
813
);
814
 
815
`endif // SCR1_TRGT_SIMULATION
816
 
817
endmodule : scr1_pipe_top

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.