@@ -16,24 +16,24 @@ module cvxif_compressed_if_driver #(
16
16
input logic clk_i,
17
17
// Asynchronous reset active low - SUBSYSTEM
18
18
input logic rst_ni,
19
+ input logic flush_i,
19
20
// CVA6 Hart id
20
21
input logic [CVA6Cfg.XLEN - 1 : 0 ] hart_id_i,
21
22
22
- input logic [CVA6Cfg.NrIssuePorts- 1 : 0 ] is_compressed_i,
23
- input logic [CVA6Cfg.NrIssuePorts- 1 : 0 ] is_illegal_i,
24
- input logic [CVA6Cfg.NrIssuePorts- 1 : 0 ] instruction_valid_i,
25
- input logic [CVA6Cfg.NrIssuePorts- 1 : 0 ][31 : 0 ] instruction_i,
23
+ input logic is_compressed_i,
24
+ input logic is_illegal_i,
25
+ input logic [31 : 0 ] instruction_i,
26
26
27
- output logic [CVA6Cfg.NrIssuePorts - 1 : 0 ] is_compressed_o,
28
- output logic [CVA6Cfg.NrIssuePorts - 1 : 0 ] is_illegal_o,
29
- output logic [CVA6Cfg.NrIssuePorts - 1 : 0 ][ 31 : 0 ] instruction_o,
30
- input logic stall_i,
31
- output logic [CVA6Cfg.NrIssuePorts - 1 : 0 ] stall_o,
27
+ output logic is_compressed_o,
28
+ output logic is_illegal_o,
29
+ output logic [31 : 0 ] instruction_o,
30
+ input logic stall_i,
31
+ output logic stall_o,
32
32
// CVXIF Compressed interface
33
- input logic compressed_ready_i,
34
- input x_compressed_resp_t compressed_resp_i,
35
- output logic compressed_valid_o,
36
- output x_compressed_req_t compressed_req_o
33
+ input logic compressed_ready_i,
34
+ input x_compressed_resp_t compressed_resp_i,
35
+ output logic compressed_valid_o,
36
+ output x_compressed_req_t compressed_req_o
37
37
);
38
38
39
39
@@ -44,32 +44,22 @@ module cvxif_compressed_if_driver #(
44
44
compressed_valid_o = 1'b0 ;
45
45
compressed_req_o.instr = '0 ;
46
46
compressed_req_o.hartid = hart_id_i;
47
- stall_o[0 ] = stall_i;
48
- stall_o[1 ] = 1'b0 ;
49
- if (is_illegal_i[0 ]) begin
50
- compressed_valid_o = is_illegal_i[0 ] && instruction_valid_i[0 ];
51
- compressed_req_o.instr = instruction_i[0 ][15 : 0 ];
52
- is_illegal_o[0 ] = ~ compressed_resp_i.accept;
53
- instruction_o[0 ] = compressed_resp_i.accept ? compressed_resp_i.instr : instruction_i[0 ];
54
- is_compressed_o[0 ] = compressed_resp_i.accept ? 1'b0 : is_compressed_i[0 ];
47
+ stall_o = stall_i;
48
+ if (is_illegal_i) begin
49
+ compressed_valid_o = is_illegal_i;
50
+ compressed_req_o.instr = instruction_i[15 : 0 ];
51
+ is_illegal_o = ~ compressed_resp_i.accept;
52
+ instruction_o = compressed_resp_i.accept ? compressed_resp_i.instr : instruction_i;
53
+ is_compressed_o = compressed_resp_i.accept ? 1'b0 : is_compressed_i;
55
54
if (~ stall_i) begin
56
55
// Propagate stall from macro decoder or wait for compressed ready if compressed transaction is happening.
57
- // Stall if both instruction are illegal
58
- stall_o[0 ] = (compressed_valid_o && ~ compressed_ready_i);
59
- if (CVA6Cfg.SuperscalarEn) begin
60
- stall_o[1 ] = is_illegal_i[1 ];
61
- end
56
+ stall_o = (compressed_valid_o && ~ compressed_ready_i);
62
57
end
63
58
end
64
- if (CVA6Cfg.SuperscalarEn) begin
65
- if (~ is_illegal_i[0 ] && is_illegal_i[1 ]) begin // 2nd instruction is illegal
66
- compressed_valid_o = is_illegal_i[1 ] && instruction_valid_i[1 ];
67
- compressed_req_o.instr = instruction_i[1 ][15 : 0 ];
68
- is_illegal_o[1 ] = ~ compressed_resp_i.accept;
69
- instruction_o[1 ] = compressed_resp_i.accept ? compressed_resp_i.instr : instruction_i[1 ];
70
- is_compressed_o[1 ] = compressed_resp_i.accept ? 1'b0 : is_compressed_i[1 ];
71
- stall_o[1 ] = (compressed_valid_o && ~ compressed_ready_i);
72
- end
59
+ if (flush_i) begin
60
+ compressed_valid_o = 1'b0 ;
61
+ compressed_req_o.instr = '0 ;
62
+ compressed_req_o.hartid = hart_id_i;
73
63
end
74
64
end
75
65
0 commit comments