summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/router.sv9
-rw-r--r--src/rv2insn.sv31
2 files changed, 23 insertions, 17 deletions
diff --git a/src/router.sv b/src/router.sv
index b496ab9..2783b69 100644
--- a/src/router.sv
+++ b/src/router.sv
@@ -45,7 +45,6 @@ module router #(
);
localparam NW = $bits(addr_i[0].dst.node);
-localparam DW = $bits(addr_i[0].dst.dev);
typedef struct packed {
logic alive;
@@ -93,8 +92,8 @@ for (genvar i = 0; i < N + 2; ++i) begin :skidbuffers
);
end
-for (genvar i = 0; i < N + 2; ++i)
-always_comb begin :gen_ring_knot
+for (genvar i = 0; i < N + 2; ++i) begin :gen_ring_knot
+always_comb begin
/* default values */
handle[i] = ring_d[i];
send[i] = 1'b0;
@@ -151,10 +150,12 @@ always_comb begin :gen_ring_knot
* the ring */
ring_q[(i + 1) % (N + 2)] = recv[i] ? insert[i] : handle[i];
end
+end
-for (genvar i = 0; i < N + 2; ++i)
+for (genvar i = 0; i < N + 2; ++i) begin :gen_ring_ff
always_ff @(posedge clk_i or negedge rstx_i)
if (!rstx_i) ring_d[i] <= '0;
else ring_d[i] <= ring_q[i];
+end
endmodule // router
diff --git a/src/rv2insn.sv b/src/rv2insn.sv
index aeb7a8d..65abfab 100644
--- a/src/rv2insn.sv
+++ b/src/rv2insn.sv
@@ -28,12 +28,16 @@ function automatic insn_t halt();
return -1;
endfunction
-function automatic alu_counter_t next_alu(alu_counter_t alu_counter);
- return (alu_counter + 1) % ALU_COUNT;
+function automatic alu_counter_t next_alu(alu_counter_t c);
+ return (c + 1) % ALU_COUNT;
endfunction
-function automatic decode_out_t op_imm(xlen_t pc, itype_t rv, alu_counter_t alu_counter);
- alu_counter_t fu = next_alu(alu_counter);
+/** verilator warns about unused bits in rv, not sure how to deal with that.
+ * Explode itype to the relevant bits? Seems verbose, hmm. */
+
+/* verilator lint_off UNUSEDSIGNAL */
+function automatic decode_out_t op_imm(xlen_t pc, itype_t rv, alu_counter_t c);
+ alu_counter_t fu = next_alu(c);
unique case (rv.funct3)
3'b000: return {{`rn(rv.rs1), `alu(fu)},
{NOP, NOP},
@@ -45,9 +49,10 @@ function automatic decode_out_t op_imm(xlen_t pc, itype_t rv, alu_counter_t alu_
return 0;
endfunction
+/* verilator lint_on */
-function automatic decode_out_t op(xlen_t pc, rtype_t rv, alu_counter_t alu_counter);
- alu_counter_t fu = next_alu(alu_counter);
+function automatic decode_out_t op(xlen_t pc, rtype_t rv, alu_counter_t c);
+ alu_counter_t fu = next_alu(c);
unique case (rv.funct3)
3'b000: begin
unique case (rv.funct7)
@@ -69,11 +74,11 @@ function automatic decode_out_t op(xlen_t pc, rtype_t rv, alu_counter_t alu_coun
endcase
endfunction
-function automatic decode_out_t decode(xlen_t pc, rv_t rv, alu_counter_t alu_counter);
+function automatic decode_out_t decode(xlen_t pc, rv_t rv, alu_counter_t c);
unique case (rv[`RV_OP_FIELD])
- OP_IMM: return op_imm (pc, rv, alu_counter);
- OP: return op (pc, rv, alu_counter);
- default: return {halt(), alu_counter};
+ OP_IMM: return op_imm (pc, rv, c);
+ OP: return op (pc, rv, c);
+ default: return {halt(), c};
endcase
endfunction
@@ -83,13 +88,13 @@ typedef struct packed {
} stages_out_t;
function automatic stages_out_t stages(int i, xlen_t pc,
- rv_t[QUE_DEPTH-1:0] rv, insn_t[QUE_DEPTH-1:0] que, alu_counter_t alu_counter);
+ rv_t[QUE_DEPTH-1:0] rv, insn_t[QUE_DEPTH-1:0] que, alu_counter_t c);
if (i < QUE_DEPTH) begin
- decode_out_t out = decode(pc + i, rv[i], alu_counter);
+ decode_out_t out = decode(pc + i, rv[i], c);
que[i] = out.insn;
return stages(i + 1, pc, rv, que, out.alu_counter);
end else begin
- return {que, alu_counter};
+ return {que, c};
end
endfunction