aboutsummaryrefslogtreecommitdiffstats
path: root/picorv32.v
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2016-04-12 18:04:16 +0200
committerClifford Wolf <clifford@clifford.at>2016-04-12 18:04:16 +0200
commite9c7ea6b5df3de7292369910cc5472840935db64 (patch)
treede019915c85243be8cf88dd027cc5bccea02544d /picorv32.v
parent2fdafb9c163612f146a75e9de7ec9360fea7d1ce (diff)
downloadpicorv32-e9c7ea6b5df3de7292369910cc5472840935db64.tar.gz
picorv32-e9c7ea6b5df3de7292369910cc5472840935db64.zip
Added ENABLE_COUNTERS64 config parameter
Diffstat (limited to 'picorv32.v')
-rw-r--r--picorv32.v19
1 files changed, 13 insertions, 6 deletions
diff --git a/picorv32.v b/picorv32.v
index 9a3410f..43f969f 100644
--- a/picorv32.v
+++ b/picorv32.v
@@ -39,6 +39,7 @@
module picorv32 #(
parameter [ 0:0] ENABLE_COUNTERS = 1,
+ parameter [ 0:0] ENABLE_COUNTERS64 = 1,
parameter [ 0:0] ENABLE_REGS_16_31 = 1,
parameter [ 0:0] ENABLE_REGS_DUALPORT = 1,
parameter [ 0:0] LATCHED_MEM_RDATA = 0,
@@ -786,9 +787,9 @@ module picorv32 #(
instr_rdcycle <= ((mem_rdata_q[6:0] == 7'b1110011 && mem_rdata_q[31:12] == 'b11000000000000000010) ||
(mem_rdata_q[6:0] == 7'b1110011 && mem_rdata_q[31:12] == 'b11000000000100000010)) && ENABLE_COUNTERS;
instr_rdcycleh <= ((mem_rdata_q[6:0] == 7'b1110011 && mem_rdata_q[31:12] == 'b11001000000000000010) ||
- (mem_rdata_q[6:0] == 7'b1110011 && mem_rdata_q[31:12] == 'b11001000000100000010)) && ENABLE_COUNTERS;
+ (mem_rdata_q[6:0] == 7'b1110011 && mem_rdata_q[31:12] == 'b11001000000100000010)) && ENABLE_COUNTERS && ENABLE_COUNTERS64;
instr_rdinstr <= (mem_rdata_q[6:0] == 7'b1110011 && mem_rdata_q[31:12] == 'b11000000001000000010) && ENABLE_COUNTERS;
- instr_rdinstrh <= (mem_rdata_q[6:0] == 7'b1110011 && mem_rdata_q[31:12] == 'b11001000001000000010) && ENABLE_COUNTERS;
+ instr_rdinstrh <= (mem_rdata_q[6:0] == 7'b1110011 && mem_rdata_q[31:12] == 'b11001000001000000010) && ENABLE_COUNTERS && ENABLE_COUNTERS64;
instr_getq <= mem_rdata_q[6:0] == 7'b0001011 && mem_rdata_q[31:25] == 7'b0000000 && ENABLE_IRQ && ENABLE_IRQ_QREGS;
instr_setq <= mem_rdata_q[6:0] == 7'b0001011 && mem_rdata_q[31:25] == 7'b0000001 && ENABLE_IRQ && ENABLE_IRQ_QREGS;
@@ -985,8 +986,10 @@ module picorv32 #(
pcpi_timeout <= !pcpi_timeout_counter;
end
- if (ENABLE_COUNTERS)
+ if (ENABLE_COUNTERS) begin
count_cycle <= resetn ? count_cycle + 1 : 0;
+ if (!ENABLE_COUNTERS64) count_cycle[63:32] <= 0;
+ end
next_irq_pending = ENABLE_IRQ ? irq_pending & LATCHED_IRQ : 'bx;
@@ -1096,8 +1099,10 @@ module picorv32 #(
if (decoder_trigger) begin
`debug($display("-- %-0t", $time);)
reg_next_pc <= current_pc + (compressed_instr ? 2 : 4);
- if (ENABLE_COUNTERS)
+ if (ENABLE_COUNTERS) begin
count_instr <= count_instr + 1;
+ if (!ENABLE_COUNTERS64) count_instr[63:32] <= 0;
+ end
if (instr_jal) begin
mem_do_rinst <= 1;
reg_next_pc <= current_pc + decoded_imm_uj;
@@ -1157,11 +1162,11 @@ module picorv32 #(
case (1'b1)
instr_rdcycle:
reg_out <= count_cycle[31:0];
- instr_rdcycleh:
+ instr_rdcycleh && ENABLE_COUNTERS64:
reg_out <= count_cycle[63:32];
instr_rdinstr:
reg_out <= count_instr[31:0];
- instr_rdinstrh:
+ instr_rdinstrh && ENABLE_COUNTERS64:
reg_out <= count_instr[63:32];
endcase
latched_store <= 1;
@@ -1711,6 +1716,7 @@ endmodule
module picorv32_axi #(
parameter [ 0:0] ENABLE_COUNTERS = 1,
+ parameter [ 0:0] ENABLE_COUNTERS64 = 1,
parameter [ 0:0] ENABLE_REGS_16_31 = 1,
parameter [ 0:0] ENABLE_REGS_DUALPORT = 1,
parameter [ 0:0] TWO_STAGE_SHIFT = 1,
@@ -1811,6 +1817,7 @@ module picorv32_axi #(
picorv32 #(
.ENABLE_COUNTERS (ENABLE_COUNTERS ),
+ .ENABLE_COUNTERS64 (ENABLE_COUNTERS64 ),
.ENABLE_REGS_16_31 (ENABLE_REGS_16_31 ),
.ENABLE_REGS_DUALPORT(ENABLE_REGS_DUALPORT),
.TWO_STAGE_SHIFT (TWO_STAGE_SHIFT ),