From 2a7596b51d82693174bc59e1a20a64103f7ca3c4 Mon Sep 17 00:00:00 2001 From: dh73 Date: Wed, 25 Mar 2020 11:02:43 -0600 Subject: [PATCH 001/289] Declare variables/nets before referenced --- rtl/serv_alu.v | 4 ++-- rtl/serv_decode.v | 15 +++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index f5c5ea4..64634ae 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -73,6 +73,8 @@ module serv_alu reg lt_r; + reg eq_r; + wire lt_sign = i_cnt_done & !i_cmp_uns; wire eq = (i_rs1 == op_b); @@ -92,8 +94,6 @@ module serv_alu (i_rd_sel[3] & result_bool); - reg eq_r; - always @(posedge clk) begin add_cy_r <= i_en & add_cy; b_inv_plus_1_cy_r <= i_en & b_inv_plus_1_cy; diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index fad5f8a..d66a1e0 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -180,6 +180,13 @@ module serv_decode reg [4:0] imm24_20; reg [4:0] imm11_7; + wire [1:0] m2; + //True for OP-IMM, LOAD, STORE, JALR + //False for LUI, AUIPC, JAL + assign m2[0] = (opcode[1:0] == 2'b00) | (opcode[2:1] == 2'b00); + assign m2[1] = opcode[4] & !opcode[0]; + wire m3 = opcode[4]; + assign o_alu_rd_sel[0] = (funct3 == 3'b000); // Add/sub assign o_alu_rd_sel[1] = (funct3[1:0] == 2'b01); //Shift assign o_alu_rd_sel[2] = (funct3[2:1] == 2'b01); //SLT* @@ -220,14 +227,6 @@ module serv_decode //False for J type instructions wire m1 = opcode[3:0] == 4'b1000; - wire [1:0] m2; - assign m2[1] = opcode[4] & !opcode[0]; - - //True for OP-IMM, LOAD, STORE, JALR - //False for LUI, AUIPC, JAL - assign m2[0] = (opcode[1:0] == 2'b00) | (opcode[2:1] == 2'b00); - wire m3 = opcode[4]; - assign o_imm = i_cnt_done ? signbit : m1 ? imm11_7[0] : imm24_20[0]; //0 (OP_B_SOURCE_IMM) when OPIMM From b4a0015dc403b5f227d27dc1ef4b6e1dd834dd41 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 22 Mar 2020 15:19:55 +0100 Subject: [PATCH 002/289] Fix linker script --- sw/Makefile | 2 +- sw/link.ld | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/sw/Makefile b/sw/Makefile index 15fb42e..1133f0c 100644 --- a/sw/Makefile +++ b/sw/Makefile @@ -1,4 +1,4 @@ -%.elf: %.S +%.elf: %.S link.ld riscv64-unknown-elf-gcc -nostartfiles -march=rv32i -mabi=ilp32 -Tlink.ld -o$@ $< %.bin: %.elf riscv64-unknown-elf-objcopy -O binary $< $@ diff --git a/sw/link.ld b/sw/link.ld index db7be33..3398348 100644 --- a/sw/link.ld +++ b/sw/link.ld @@ -4,15 +4,7 @@ ENTRY(_start) SECTIONS { . = 0x00000000; - .text.init : { *(.text.init) } - . = ALIGN(0x1000); - .tohost : { *(.tohost) } - . = ALIGN(0x1000); .text : { *(.text) } - . = ALIGN(0x1000); .data : { *(.data) } - .data.string : { *(.data.string)} .bss : { *(.bss) } - _end = .; } - From 726e520cce6d4d08cefa4c94def8a6f9069a6428 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 17 Mar 2020 22:24:14 +0100 Subject: [PATCH 003/289] Fix lint warnings when CSR is disabled --- rtl/serv_rf_if.v | 17 +++---- rtl/serv_rf_ram_if.v | 44 +++++++++--------- rtl/serv_rf_top.v | 27 ++++++------ rtl/serv_state.v | 5 ++- rtl/serv_top.v | 103 +++++++++++++++++++++---------------------- 5 files changed, 100 insertions(+), 96 deletions(-) diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index 61b1f23..b26e75f 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -1,14 +1,15 @@ `default_nettype none module serv_rf_if + #(parameter WITH_CSR = 1) (//RF Interface - output wire [5:0] o_wreg0, - output wire [5:0] o_wreg1, + output wire [4+WITH_CSR:0] o_wreg0, + output wire [4+WITH_CSR:0] o_wreg1, output wire o_wen0, output wire o_wen1, output wire o_wdata0, output wire o_wdata1, - output wire [5:0] o_rreg0, - output wire [5:0] o_rreg1, + output wire [4+WITH_CSR:0] o_rreg0, + output wire [4+WITH_CSR:0] o_rreg1, input wire i_rdata0, input wire i_rdata1, @@ -42,7 +43,6 @@ module serv_rf_if input wire [4:0] i_rs2_raddr, output wire o_rs2); - parameter WITH_CSR = 1; `include "serv_params.vh" @@ -102,7 +102,8 @@ module serv_rf_if assign o_wdata0 = rd; assign o_wdata1 = 1'b0; - assign o_wreg0 = {1'b0,i_rd_waddr}; + assign o_wreg0 = i_rd_waddr; + assign o_wreg1 = 5'd0; assign o_wen0 =i_rd_wen; assign o_wen1 = 1'b0; @@ -111,8 +112,8 @@ module serv_rf_if ********** Read side *********** */ - assign o_rreg0 = {1'b0, i_rs1_raddr}; - assign o_rreg1 = {1'b0, i_rs2_raddr}; + assign o_rreg0 = i_rs1_raddr; + assign o_rreg1 = i_rs2_raddr; assign o_rs1 = i_rdata0; assign o_rs2 = i_rdata1; diff --git a/rtl/serv_rf_ram_if.v b/rtl/serv_rf_ram_if.v index ec94fdb..a0744ec 100644 --- a/rtl/serv_rf_ram_if.v +++ b/rtl/serv_rf_ram_if.v @@ -5,27 +5,27 @@ module serv_rf_ram_if parameter depth=32*(32+csr_regs)/width) ( //SERV side - input wire i_clk, - input wire i_rst, - input wire i_wreq, - input wire i_rreq, - output wire o_ready, - input wire [5:0] i_wreg0, - input wire [5:0] i_wreg1, - input wire i_wen0, - input wire i_wen1, - input wire i_wdata0, - input wire i_wdata1, - input wire [5:0] i_rreg0, - input wire [5:0] i_rreg1, - output wire o_rdata0, - output wire o_rdata1, + input wire i_clk, + input wire i_rst, + input wire i_wreq, + input wire i_rreq, + output wire o_ready, + input wire [$clog2(32+csr_regs)-1:0] i_wreg0, + input wire [$clog2(32+csr_regs)-1:0] i_wreg1, + input wire i_wen0, + input wire i_wen1, + input wire i_wdata0, + input wire i_wdata1, + input wire [$clog2(32+csr_regs)-1:0] i_rreg0, + input wire [$clog2(32+csr_regs)-1:0] i_rreg1, + output wire o_rdata0, + output wire o_rdata1, //RAM side - output wire [$clog2(depth)-1:0] o_waddr, - output wire [width-1:0] o_wdata, - output wire o_wen, - output wire [$clog2(depth)-1:0] o_raddr, - input wire [width-1:0] i_rdata); + output wire [$clog2(depth)-1:0] o_waddr, + output wire [width-1:0] o_wdata, + output wire o_wen, + output wire [$clog2(depth)-1:0] o_raddr, + input wire [width-1:0] i_rdata); localparam l2w = $clog2(width); @@ -63,7 +63,7 @@ module serv_rf_ram_if wdata1_r : {i_wdata0, wdata0_r}; - wire [5:0] wreg = wtrig1 ? i_wreg1 : i_wreg0; + wire [$clog2(32+csr_regs)-1:0] wreg = wtrig1 ? i_wreg1 : i_wreg0; generate if (width == 32) assign o_waddr = wreg; else @@ -111,7 +111,7 @@ module serv_rf_ram_if wire rtrig0; reg rtrig1; - wire [5:0] rreg = rtrig0 ? i_rreg1 : i_rreg0; + wire [$clog2(32+csr_regs)-1:0] rreg = rtrig0 ? i_rreg1 : i_rreg0; generate if (width == 32) assign o_raddr = rreg; else diff --git a/rtl/serv_rf_top.v b/rtl/serv_rf_top.v index b688012..66aec5d 100644 --- a/rtl/serv_rf_top.v +++ b/rtl/serv_rf_top.v @@ -1,6 +1,9 @@ `default_nettype none module serv_rf_top + #(parameter RESET_PC = 32'd0, + parameter WITH_CSR = 1, + parameter RF_WIDTH = 2) ( input wire clk, input wire i_rst, @@ -40,34 +43,32 @@ module serv_rf_top input wire [31:0] i_dbus_rdt, input wire i_dbus_ack); - parameter RESET_PC = 32'd0; - parameter WITH_CSR = 1; - parameter RF_WIDTH = 2; - localparam RF_L2W = $clog2(RF_WIDTH); + localparam CSR_REGS = WITH_CSR*4; + localparam RF_L2D = $clog2((32+CSR_REGS)*32/RF_WIDTH); wire rf_wreq; wire rf_rreq; - wire [5:0] wreg0; - wire [5:0] wreg1; + wire [4+WITH_CSR:0] wreg0; + wire [4+WITH_CSR:0] wreg1; wire wen0; wire wen1; wire wdata0; wire wdata1; - wire [5:0] rreg0; - wire [5:0] rreg1; + wire [4+WITH_CSR:0] rreg0; + wire [4+WITH_CSR:0] rreg1; wire rf_ready; wire rdata0; wire rdata1; - wire [10-RF_L2W:0] waddr; + wire [RF_L2D-1:0] waddr; wire [RF_WIDTH-1:0] wdata; - wire wen; - wire [10-RF_L2W:0] raddr; + wire wen; + wire [RF_L2D-1:0] raddr; wire [RF_WIDTH-1:0] rdata; serv_rf_ram_if #(.width (RF_WIDTH), - .csr_regs (WITH_CSR*4)) + .csr_regs (CSR_REGS)) rf_ram_if (.i_clk (clk), .i_rst (i_rst), @@ -92,7 +93,7 @@ module serv_rf_top serv_rf_ram #(.width (RF_WIDTH), - .csr_regs (WITH_CSR*4)) + .csr_regs (CSR_REGS)) rf_ram (.i_clk (clk), .i_waddr (waddr), diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 6938c25..b4703a1 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -138,6 +138,9 @@ module serv_state if (i_ibus_ack) misalign_trap_sync <= 1'b0; end // always @ (posedge i_clk) - end // if (WITH_CSR) + end else begin + always @(*) + o_pending_irq = 1'b0; + end endgenerate endmodule diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 503f69a..1131199 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -1,61 +1,61 @@ `default_nettype none module serv_top - ( - input wire clk, - input wire i_rst, - input wire i_timer_irq, + #(parameter WITH_CSR = 1, + parameter RESET_PC = 32'd0) + ( + input wire clk, + input wire i_rst, + input wire i_timer_irq, `ifdef RISCV_FORMAL - output reg rvfi_valid = 1'b0, - output reg [63:0] rvfi_order = 64'd0, - output reg [31:0] rvfi_insn = 32'd0, - output reg rvfi_trap = 1'b0, - output reg rvfi_halt = 1'b0, - output reg rvfi_intr = 1'b0, - output reg [1:0] rvfi_mode = 2'b11, - output reg [1:0] rvfi_ixl = 2'b01, - output reg [4:0] rvfi_rs1_addr, - output reg [4:0] rvfi_rs2_addr, - output reg [31:0] rvfi_rs1_rdata, - output reg [31:0] rvfi_rs2_rdata, - output reg [4:0] rvfi_rd_addr, - output reg [31:0] rvfi_rd_wdata, - output reg [31:0] rvfi_pc_rdata, - output reg [31:0] rvfi_pc_wdata, - output reg [31:0] rvfi_mem_addr, - output reg [3:0] rvfi_mem_rmask, - output reg [3:0] rvfi_mem_wmask, - output reg [31:0] rvfi_mem_rdata, - output reg [31:0] rvfi_mem_wdata, + output reg rvfi_valid = 1'b0, + output reg [63:0] rvfi_order = 64'd0, + output reg [31:0] rvfi_insn = 32'd0, + output reg rvfi_trap = 1'b0, + output reg rvfi_halt = 1'b0, + output reg rvfi_intr = 1'b0, + output reg [1:0] rvfi_mode = 2'b11, + output reg [1:0] rvfi_ixl = 2'b01, + output reg [4:0] rvfi_rs1_addr, + output reg [4:0] rvfi_rs2_addr, + output reg [31:0] rvfi_rs1_rdata, + output reg [31:0] rvfi_rs2_rdata, + output reg [4:0] rvfi_rd_addr, + output reg [31:0] rvfi_rd_wdata, + output reg [31:0] rvfi_pc_rdata, + output reg [31:0] rvfi_pc_wdata, + output reg [31:0] rvfi_mem_addr, + output reg [3:0] rvfi_mem_rmask, + output reg [3:0] rvfi_mem_wmask, + output reg [31:0] rvfi_mem_rdata, + output reg [31:0] rvfi_mem_wdata, `endif //RF Interface - output wire o_rf_rreq, - output wire o_rf_wreq, - input wire i_rf_ready, - output wire [5:0] o_wreg0, - output wire [5:0] o_wreg1, - output wire o_wen0, - output wire o_wen1, - output wire o_wdata0, - output wire o_wdata1, - output wire [5:0] o_rreg0, - output wire [5:0] o_rreg1, - input wire i_rdata0, - input wire i_rdata1, + output wire o_rf_rreq, + output wire o_rf_wreq, + input wire i_rf_ready, + output wire [4+WITH_CSR:0] o_wreg0, + output wire [4+WITH_CSR:0] o_wreg1, + output wire o_wen0, + output wire o_wen1, + output wire o_wdata0, + output wire o_wdata1, + output wire [4+WITH_CSR:0] o_rreg0, + output wire [4+WITH_CSR:0] o_rreg1, + input wire i_rdata0, + input wire i_rdata1, - output wire [31:0] o_ibus_adr, - output wire o_ibus_cyc, - input wire [31:0] i_ibus_rdt, - input wire i_ibus_ack, - output wire [31:0] o_dbus_adr, - output wire [31:0] o_dbus_dat, - output wire [3:0] o_dbus_sel, - output wire o_dbus_we , - output wire o_dbus_cyc, - input wire [31:0] i_dbus_rdt, - input wire i_dbus_ack); - - parameter WITH_CSR = 1; + output wire [31:0] o_ibus_adr, + output wire o_ibus_cyc, + input wire [31:0] i_ibus_rdt, + input wire i_ibus_ack, + output wire [31:0] o_dbus_adr, + output wire [31:0] o_dbus_dat, + output wire [3:0] o_dbus_sel, + output wire o_dbus_we , + output wire o_dbus_cyc, + input wire [31:0] i_dbus_rdt, + input wire i_dbus_ack); wire [4:0] rd_addr; wire [4:0] rs1_addr; @@ -136,7 +136,6 @@ module serv_top wire [1:0] csr_addr; wire csr_pc; - parameter RESET_PC = 32'd0; wire new_irq; wire trap_taken; From 6b0e4fb3eae6f3e0a3e992e084a9887b26aaa0f2 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 27 Mar 2020 08:55:34 +0100 Subject: [PATCH 004/289] Disable misalignment traps when CSR is disabled --- rtl/serv_mem_if.v | 17 ++++++++++++----- rtl/serv_state.v | 2 +- rtl/serv_top.v | 4 +++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index 91695c7..fce22df 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -1,5 +1,6 @@ `default_nettype none module serv_mem_if + #(parameter WITH_CSR = 1) ( input wire i_clk, input wire i_en, @@ -20,7 +21,6 @@ module serv_mem_if input wire i_wb_ack); reg signbit; - reg misalign; reg [7:0] dat0; reg [7:0] dat1; @@ -57,8 +57,6 @@ module serv_mem_if assign o_wb_dat = {dat3,dat2,dat1,dat0}; - assign o_misalign = misalign & i_mem_op; - always @(posedge i_clk) begin if (dat0_en) @@ -73,9 +71,18 @@ module serv_mem_if if (i_wb_ack) {dat3,dat2,dat1,dat0} <= i_wb_rdt; - misalign <= (i_lsb[0] & (i_word | i_half)) | (i_lsb[1] & i_word); if (dat_valid) signbit <= dat_cur; - end + generate + if (WITH_CSR) begin + reg misalign; + always @(posedge i_clk) + misalign <= (i_lsb[0] & (i_word | i_half)) | (i_lsb[1] & i_word); + assign o_misalign = misalign & i_mem_op; + end else begin + assign o_misalign = 1'b0; + end + endgenerate + endmodule diff --git a/rtl/serv_state.v b/rtl/serv_state.v index b4703a1..4db6e5f 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -64,7 +64,7 @@ module serv_state assign o_dbus_cyc = (state == IDLE) & stage_two_pending & i_mem_op & !i_mem_misalign; - wire trap_pending = (o_ctrl_jump & i_ctrl_misalign) | i_mem_misalign; + wire trap_pending = WITH_CSR & ((o_ctrl_jump & i_ctrl_misalign) | i_mem_misalign); //Prepare RF for reads when a new instruction is fetched // or when stage one caused an exception (rreq implies a write request too) diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 1131199..1a13e3f 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -367,7 +367,9 @@ module serv_top //CSR read port .o_csr (rf_csr_out)); - serv_mem_if mem_if + serv_mem_if + #(.WITH_CSR (WITH_CSR)) + mem_if ( .i_clk (clk), .i_en (cnt_en), From 4f855602fac18c21385925c88737493d493dbfb2 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 27 Mar 2020 09:08:02 +0100 Subject: [PATCH 005/289] Add serving SoClet --- serving.core | 25 ++++ serving/serving.v | 232 ++++++++++++++++++++++++++++++++++++++ serving/serving_arbiter.v | 57 ++++++++++ serving/serving_mux.v | 66 +++++++++++ serving/serving_ram.v | 83 ++++++++++++++ 5 files changed, 463 insertions(+) create mode 100644 serving.core create mode 100644 serving/serving.v create mode 100644 serving/serving_arbiter.v create mode 100644 serving/serving_mux.v create mode 100644 serving/serving_ram.v diff --git a/serving.core b/serving.core new file mode 100644 index 0000000..63bca35 --- /dev/null +++ b/serving.core @@ -0,0 +1,25 @@ +CAPI=2: + +name : ::serving:0 + +filesets: + rtl: + files: + - serving/serving_arbiter.v + - serving/serving_mux.v + - serving/serving_ram.v + - serving/serving.v + file_type : verilogSource + depend : [serv] + +targets: + default: + filesets : [rtl] + + lint: + default_tool : verilator + filesets : [rtl] + tools: + verilator: + mode : lint-only + toplevel : serving diff --git a/serving/serving.v b/serving/serving.v new file mode 100644 index 0000000..374bab4 --- /dev/null +++ b/serving/serving.v @@ -0,0 +1,232 @@ +/* serving.v : Top-level for the serving SoC + * + * ISC License + * + * Copyright (C) 2020 Olof Kindgren + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +`default_nettype none +module serving + ( + input wire i_clk, + input wire i_rst, + input wire i_timer_irq, + + output wire [31:0] o_wb_adr, + output wire [31:0] o_wb_dat, + output wire [3:0] o_wb_sel, + output wire o_wb_we , + output wire o_wb_stb, + input wire [31:0] i_wb_rdt, + input wire i_wb_ack); + + parameter memfile = ""; + parameter memsize = 8192; + parameter WITH_CSR = 1; + localparam regs = 32+WITH_CSR*4; + + localparam rf_width = 8; + + localparam aw = $clog2(memsize); + + wire [31:0] wb_ibus_adr; + wire wb_ibus_stb; + wire [31:0] wb_ibus_rdt; + wire wb_ibus_ack; + + wire [31:0] wb_dbus_adr; + wire [31:0] wb_dbus_dat; + wire [3:0] wb_dbus_sel; + wire wb_dbus_we; + wire wb_dbus_stb; + wire [31:0] wb_dbus_rdt; + wire wb_dbus_ack; + + wire [31:0] wb_dmem_adr; + wire [31:0] wb_dmem_dat; + wire [3:0] wb_dmem_sel; + wire wb_dmem_we; + wire wb_dmem_stb; + wire [31:0] wb_dmem_rdt; + wire wb_dmem_ack; + + wire [31:0] wb_mem_adr; + wire [31:0] wb_mem_dat; + wire [3:0] wb_mem_sel; + wire wb_mem_we; + wire wb_mem_stb; + wire [31:0] wb_mem_rdt; + wire wb_mem_ack; + + wire [6+WITH_CSR:0] waddr; + wire [rf_width-1:0] wdata; + wire wen; + wire [6+WITH_CSR:0] raddr; + wire [rf_width-1:0] rdata; + + + wire [aw-1:0] rf_waddr = ~{{aw-2-5-WITH_CSR{1'b0}},waddr}; + wire [aw-1:0] rf_raddr = ~{{aw-2-5-WITH_CSR{1'b0}},raddr}; + + serving_arbiter arbiter + (.i_wb_cpu_dbus_adr (wb_dmem_adr), + .i_wb_cpu_dbus_dat (wb_dmem_dat), + .i_wb_cpu_dbus_sel (wb_dmem_sel), + .i_wb_cpu_dbus_we (wb_dmem_we ), + .i_wb_cpu_dbus_stb (wb_dmem_stb), + .o_wb_cpu_dbus_rdt (wb_dmem_rdt), + .o_wb_cpu_dbus_ack (wb_dmem_ack), + + .i_wb_cpu_ibus_adr (wb_ibus_adr), + .i_wb_cpu_ibus_stb (wb_ibus_stb), + .o_wb_cpu_ibus_rdt (wb_ibus_rdt), + .o_wb_cpu_ibus_ack (wb_ibus_ack), + + .o_wb_mem_adr (wb_mem_adr), + .o_wb_mem_dat (wb_mem_dat), + .o_wb_mem_sel (wb_mem_sel), + .o_wb_mem_we (wb_mem_we ), + .o_wb_mem_stb (wb_mem_stb), + .i_wb_mem_rdt (wb_mem_rdt), + .i_wb_mem_ack (wb_mem_ack)); + + serving_mux mux + (.i_clk (i_clk), + .i_rst (i_rst), + + .i_wb_cpu_adr (wb_dbus_adr), + .i_wb_cpu_dat (wb_dbus_dat), + .i_wb_cpu_sel (wb_dbus_sel), + .i_wb_cpu_we (wb_dbus_we), + .i_wb_cpu_stb (wb_dbus_stb), + .o_wb_cpu_rdt (wb_dbus_rdt), + .o_wb_cpu_ack (wb_dbus_ack), + + .o_wb_mem_adr (wb_dmem_adr), + .o_wb_mem_dat (wb_dmem_dat), + .o_wb_mem_sel (wb_dmem_sel), + .o_wb_mem_we (wb_dmem_we), + .o_wb_mem_stb (wb_dmem_stb), + .i_wb_mem_rdt (wb_dmem_rdt), + .i_wb_mem_ack (wb_dmem_ack), + + .o_wb_ext_adr (o_wb_adr), + .o_wb_ext_dat (o_wb_dat), + .o_wb_ext_sel (o_wb_sel), + .o_wb_ext_we (o_wb_we), + .o_wb_ext_stb (o_wb_stb), + .i_wb_ext_rdt (i_wb_rdt), + .i_wb_ext_ack (i_wb_ack)); + + serving_ram + #(.memfile (memfile), + .depth (memsize)) + ram + (// Wishbone interface + .i_clk (i_clk), + .i_waddr (rf_waddr), + .i_wdata (wdata), + .i_wen (wen), + .i_raddr (rf_raddr), + .o_rdata (rdata), + .i_wb_adr (wb_mem_adr[$clog2(memsize)-1:2]), + .i_wb_stb (wb_mem_stb), + .i_wb_we (wb_mem_we) , + .i_wb_sel (wb_mem_sel), + .i_wb_dat (wb_mem_dat), + .o_wb_rdt (wb_mem_rdt), + .o_wb_ack (wb_mem_ack)); + + localparam RF_L2W = $clog2(rf_width); + + wire rf_wreq; + wire rf_rreq; + wire [$clog2(regs)-1:0] wreg0; + wire [$clog2(regs)-1:0] wreg1; + wire wen0; + wire wen1; + wire wdata0; + wire wdata1; + wire [$clog2(regs)-1:0] rreg0; + wire [$clog2(regs)-1:0] rreg1; + wire rf_ready; + wire rdata0; + wire rdata1; + + + serv_rf_ram_if + #(.width (rf_width), + .csr_regs (WITH_CSR*4)) + rf_ram_if + (.i_clk (i_clk), + .i_rst (i_rst), + .i_wreq (rf_wreq), + .i_rreq (rf_rreq), + .o_ready (rf_ready), + .i_wreg0 (wreg0), + .i_wreg1 (wreg1), + .i_wen0 (wen0), + .i_wen1 (wen1), + .i_wdata0 (wdata0), + .i_wdata1 (wdata1), + .i_rreg0 (rreg0), + .i_rreg1 (rreg1), + .o_rdata0 (rdata0), + .o_rdata1 (rdata1), + .o_waddr (waddr), + .o_wdata (wdata), + .o_wen (wen), + .o_raddr (raddr), + .i_rdata (rdata)); + + serv_top + #(.RESET_PC (32'h0000_0000), + .WITH_CSR (WITH_CSR)) + cpu + ( + .clk (i_clk), + .i_rst (i_rst), + .i_timer_irq (i_timer_irq), + //RF IF + .o_rf_rreq (rf_rreq), + .o_rf_wreq (rf_wreq), + .i_rf_ready (rf_ready), + .o_wreg0 (wreg0), + .o_wreg1 (wreg1), + .o_wen0 (wen0), + .o_wen1 (wen1), + .o_wdata0 (wdata0), + .o_wdata1 (wdata1), + .o_rreg0 (rreg0), + .o_rreg1 (rreg1), + .i_rdata0 (rdata0), + .i_rdata1 (rdata1), + + //Instruction bus + .o_ibus_adr (wb_ibus_adr), + .o_ibus_cyc (wb_ibus_stb), + .i_ibus_rdt (wb_ibus_rdt), + .i_ibus_ack (wb_ibus_ack), + + //Data bus + .o_dbus_adr (wb_dbus_adr), + .o_dbus_dat (wb_dbus_dat), + .o_dbus_sel (wb_dbus_sel), + .o_dbus_we (wb_dbus_we), + .o_dbus_cyc (wb_dbus_stb), + .i_dbus_rdt (wb_dbus_rdt), + .i_dbus_ack (wb_dbus_ack)); + +endmodule diff --git a/serving/serving_arbiter.v b/serving/serving_arbiter.v new file mode 100644 index 0000000..9d537d4 --- /dev/null +++ b/serving/serving_arbiter.v @@ -0,0 +1,57 @@ +/* serving_arbiter.v : I/D arbiter for the serving SoC + * Relies on the fact that not both masters are active at the same time + * + * ISC License + * + * Copyright (C) 2020 Olof Kindgren + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +module serving_arbiter + ( + input wire [31:0] i_wb_cpu_dbus_adr, + input wire [31:0] i_wb_cpu_dbus_dat, + input wire [3:0] i_wb_cpu_dbus_sel, + input wire i_wb_cpu_dbus_we, + input wire i_wb_cpu_dbus_stb, + output wire [31:0] o_wb_cpu_dbus_rdt, + output wire o_wb_cpu_dbus_ack, + + input wire [31:0] i_wb_cpu_ibus_adr, + input wire i_wb_cpu_ibus_stb, + output wire [31:0] o_wb_cpu_ibus_rdt, + output wire o_wb_cpu_ibus_ack, + + output wire [31:0] o_wb_mem_adr, + output wire [31:0] o_wb_mem_dat, + output wire [3:0] o_wb_mem_sel, + output wire o_wb_mem_we, + output wire o_wb_mem_stb, + input wire [31:0] i_wb_mem_rdt, + input wire i_wb_mem_ack); + + assign o_wb_cpu_dbus_rdt = i_wb_mem_rdt; + assign o_wb_cpu_dbus_ack = i_wb_mem_ack & !i_wb_cpu_ibus_stb; + + assign o_wb_cpu_ibus_rdt = i_wb_mem_rdt; + assign o_wb_cpu_ibus_ack = i_wb_mem_ack & i_wb_cpu_ibus_stb; + + assign o_wb_mem_adr = i_wb_cpu_ibus_stb ? i_wb_cpu_ibus_adr : i_wb_cpu_dbus_adr; + assign o_wb_mem_dat = i_wb_cpu_dbus_dat; + assign o_wb_mem_sel = i_wb_cpu_dbus_sel; + assign o_wb_mem_we = i_wb_cpu_dbus_we & !i_wb_cpu_ibus_stb; + assign o_wb_mem_stb = i_wb_cpu_ibus_stb | i_wb_cpu_dbus_stb; + + +endmodule diff --git a/serving/serving_mux.v b/serving/serving_mux.v new file mode 100644 index 0000000..daa1be8 --- /dev/null +++ b/serving/serving_mux.v @@ -0,0 +1,66 @@ +/* serving_mux.v : Simple Wishbone mux for the serving SoC + * + * ISC License + * + * Copyright (C) 2020 Olof Kindgren + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +module serving_mux + ( + input wire i_clk, + input wire i_rst, + + input wire [31:0] i_wb_cpu_adr, + input wire [31:0] i_wb_cpu_dat, + input wire [3:0] i_wb_cpu_sel, + input wire i_wb_cpu_we, + input wire i_wb_cpu_stb, + output wire [31:0] o_wb_cpu_rdt, + output wire o_wb_cpu_ack, + + output wire [31:0] o_wb_mem_adr, + output wire [31:0] o_wb_mem_dat, + output wire [3:0] o_wb_mem_sel, + output wire o_wb_mem_we, + output wire o_wb_mem_stb, + input wire [31:0] i_wb_mem_rdt, + input wire i_wb_mem_ack, + + output wire [31:0] o_wb_ext_adr, + output wire [31:0] o_wb_ext_dat, + output wire [3:0] o_wb_ext_sel, + output wire o_wb_ext_we, + output wire o_wb_ext_stb, + input wire [31:0] i_wb_ext_rdt, + input wire i_wb_ext_ack); + + wire ext = (i_wb_cpu_adr[31:30] != 2'b00); + + assign o_wb_cpu_rdt = ext ? i_wb_ext_rdt : i_wb_mem_rdt; + assign o_wb_cpu_ack = ext ? i_wb_ext_ack : i_wb_mem_ack; + + assign o_wb_mem_adr = i_wb_cpu_adr; + assign o_wb_mem_dat = i_wb_cpu_dat; + assign o_wb_mem_sel = i_wb_cpu_sel; + assign o_wb_mem_we = i_wb_cpu_we; + assign o_wb_mem_stb = i_wb_cpu_stb & !ext; + + assign o_wb_ext_adr = i_wb_cpu_adr; + assign o_wb_ext_dat = i_wb_cpu_dat; + assign o_wb_ext_sel = i_wb_cpu_sel; + assign o_wb_ext_we = i_wb_cpu_we; + assign o_wb_ext_stb = i_wb_cpu_stb & ext; + +endmodule diff --git a/serving/serving_ram.v b/serving/serving_ram.v new file mode 100644 index 0000000..b58c224 --- /dev/null +++ b/serving/serving_ram.v @@ -0,0 +1,83 @@ +/* serving_ram.v : Shared RF I/D SRAM for the serving SoC + * + * ISC License + * + * Copyright (C) 2020 Olof Kindgren + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +`default_nettype none +module serving_ram + #(//Memory parameters + parameter depth = 256, + parameter aw = $clog2(depth), + parameter memfile = "") + (input wire i_clk, + input wire [aw-1:0] i_waddr, + input wire [7:0] i_wdata, + input wire i_wen, + input wire [aw-1:0] i_raddr, + output wire [7:0] o_rdata, + + input wire [aw-1:2] i_wb_adr, + input wire [31:0] i_wb_dat, + input wire [3:0] i_wb_sel, + input wire i_wb_we, + input wire i_wb_stb, + output wire [31:0] o_wb_rdt, + output reg o_wb_ack); + + wire wb_en = i_wb_stb & !i_wen & !o_wb_ack; + + wire wb_we = i_wb_we & i_wb_sel[bsel]; + + wire we = wb_en ? wb_we : i_wen; + + reg [7:0] mem [0:depth-1] /* verilator public */; + + wire [aw-1:0] waddr = wb_en ? {i_wb_adr[aw-1:2],bsel} : i_waddr; + wire [7:0] wdata = wb_en ? i_wb_dat[bsel*8+:8] : i_wdata; + wire [aw-1:0] raddr = wb_en ? {i_wb_adr[aw-1:2],bsel} : i_raddr; + + reg [2:0] wb_en_r; + + reg [1:0] bsel; + + reg [23:0] wb_rdt; + assign o_wb_rdt = {rdata, wb_rdt}; + + always @(posedge i_clk) begin + if (wb_en) bsel <= bsel + 2'd1; + wb_en_r <= {wb_en_r[1:0], wb_en}; + o_wb_ack <= wb_en & &bsel; + if (bsel == 2'b01) wb_rdt[7:0] <= rdata; + if (bsel == 2'b10) wb_rdt[15:8] <= rdata; + if (bsel == 2'b11) wb_rdt[23:16] <= rdata; + end + + reg [7:0] rdata; + + always @(posedge i_clk) begin + if (we) mem[waddr] <= wdata; + rdata <= mem[raddr]; + end + + initial + if(|memfile) begin + $display("Preloading %m from %s", memfile); + $readmemh(memfile, mem); + end + + assign o_rdata = rdata; +endmodule From 9a8dcde03097b265e308a5930ff80022fc823e59 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 3 Apr 2020 22:58:24 +0200 Subject: [PATCH 006/289] Simplify o_dbus_adr assignment --- rtl/serv_bufreg.v | 4 ++-- rtl/serv_top.v | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/rtl/serv_bufreg.v b/rtl/serv_bufreg.v index d0d8685..e9358fa 100644 --- a/rtl/serv_bufreg.v +++ b/rtl/serv_bufreg.v @@ -12,7 +12,7 @@ module serv_bufreg input wire i_imm_en, input wire i_clr_lsb, output reg [1:0] o_lsb, - output wire [31:0] o_reg, + output wire [31:0] o_dbus_adr, output wire o_q); wire c, q; @@ -37,6 +37,6 @@ module serv_bufreg end assign o_q = data[0]; - assign o_reg = data; + assign o_dbus_adr = {data[31:2], 2'b00}; endmodule diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 1a13e3f..0463568 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -142,7 +142,6 @@ module serv_top wire pending_irq; wire [1:0] lsb; - wire [31:0] bufreg_out; serv_state #(.WITH_CSR (WITH_CSR)) @@ -244,8 +243,6 @@ module serv_top .o_rd_csr_en (rd_csr_en), .o_rd_alu_en (rd_alu_en)); - assign o_dbus_adr = {bufreg_out[31:2], 2'b00}; - serv_bufreg bufreg ( .i_clk (clk), @@ -260,7 +257,7 @@ module serv_top .i_imm_en (bufreg_imm_en), .i_clr_lsb (bufreg_clr_lsb), .o_lsb (lsb), - .o_reg (bufreg_out), + .o_dbus_adr (o_dbus_adr), .o_q (bufreg_q)); serv_ctrl From 8dd75fa752c173e539a8aeed7d1a9af55b6d71d2 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 4 Apr 2020 23:44:29 +0200 Subject: [PATCH 007/289] Stop using states in logic expressions --- rtl/serv_state.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 4db6e5f..ec6e03b 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -62,7 +62,7 @@ module serv_state reg stage_two_pending; - assign o_dbus_cyc = (state == IDLE) & stage_two_pending & i_mem_op & !i_mem_misalign; + assign o_dbus_cyc = !o_cnt_en & stage_two_pending & i_mem_op & !i_mem_misalign; wire trap_pending = WITH_CSR & ((o_ctrl_jump & i_ctrl_misalign) | i_mem_misalign); @@ -90,7 +90,7 @@ module serv_state o_cnt_done <= (o_cnt[4:2] == 3'b111) & o_cnt_r[2]; //Need a strobe for the first cycle in the IDLE state after INIT - stage_two_req <= o_cnt_done & (state == INIT); + stage_two_req <= o_cnt_done & o_init; if (i_rf_ready && !o_cnt_en) if (i_e_op | o_pending_irq | (stage_two_pending & trap_pending)) From 09c7d6dbbfa8f009898908d77f30761ffca51d23 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 5 Apr 2020 00:22:44 +0200 Subject: [PATCH 008/289] Remove FSM from serv_state --- rtl/serv_state.v | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index ec6e03b..c2f9f76 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -18,8 +18,8 @@ module serv_state input wire i_slt_op, input wire i_e_op, input wire i_rd_op, - output wire o_init, - output wire o_cnt_en, + output reg o_init, + output reg o_cnt_en, output reg [4:0] o_cnt, output reg [3:0] o_cnt_r, output wire o_ctrl_pc_en, @@ -36,14 +36,6 @@ module serv_state parameter WITH_CSR = 1; - localparam [1:0] - IDLE = 2'd0, - INIT = 2'd1, - RUN = 2'd2, - TRAP = 2'd3; - - reg [1:0] state; - reg stage_two_req; //Update PC in RUN or TRAP states @@ -53,10 +45,6 @@ module serv_state assign o_mem_bytecnt = o_cnt[4:3]; - assign o_cnt_en = (state != IDLE); - - assign o_init = (state == INIT); - //slt*, branch/jump, shift, load/store wire two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op; @@ -78,8 +66,6 @@ module serv_state //Shift operations require bufreg to hold for one cycle between INIT and RUN before shifting assign o_bufreg_hold = !o_cnt_en & (stage_two_req | ~i_shift_op); - - always @(posedge i_clk) begin if (o_cnt_done) o_ctrl_jump <= o_init & i_take_branch; @@ -92,23 +78,23 @@ module serv_state //Need a strobe for the first cycle in the IDLE state after INIT stage_two_req <= o_cnt_done & o_init; - if (i_rf_ready && !o_cnt_en) - if (i_e_op | o_pending_irq | (stage_two_pending & trap_pending)) - state <= TRAP; - else if (two_stage_op & !stage_two_pending) - state <= INIT; - else - state <= RUN; + if (i_rf_ready & !stage_two_pending) + o_init <= two_stage_op & !o_pending_irq; if (o_cnt_done) - state <= IDLE; + o_init <= 1'b0; + + if (i_rf_ready) + o_cnt_en <= 1'b1; + + if (o_cnt_done) + o_cnt_en <= 1'b0; o_cnt <= o_cnt + {4'd0,o_cnt_en}; if (o_cnt_en) o_cnt_r <= {o_cnt_r[2:0],o_cnt_r[3]}; if (i_rst) begin - state <= IDLE; o_cnt <= 5'd0; stage_two_pending <= 1'b0; o_ctrl_jump <= 1'b0; From 3829d057869481845352d0ff35fee5fadccb5c76 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 15 Apr 2020 10:18:06 +0200 Subject: [PATCH 009/289] Add zcu106 support to servant --- data/zcu106.xdc | 8 +++++++ servant.core | 18 +++++++++++++++- servant/servus.v | 36 +++++++++++++++++++++++++++++++ servant/servus_clock_gen.v | 44 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 data/zcu106.xdc create mode 100644 servant/servus.v create mode 100644 servant/servus_clock_gen.v diff --git a/data/zcu106.xdc b/data/zcu106.xdc new file mode 100644 index 0000000..2d6d0d3 --- /dev/null +++ b/data/zcu106.xdc @@ -0,0 +1,8 @@ +## Clock signal +set_property -dict { PACKAGE_PIN H9 IOSTANDARD LVDS } [get_ports i_clk_p]; +set_property -dict { PACKAGE_PIN G9 IOSTANDARD LVDS } [get_ports i_clk_n]; +create_clock -add -name sys_clk_pin -period 8 [get_nets i_clk]; + +## LED +set_property -dict { PACKAGE_PIN AL11 IOSTANDARD LVCMOS12 } [get_ports q]; +set_property -dict { PACKAGE_PIN AL17 IOSTANDARD LVCMOS12 } [get_ports o_uart_tx] diff --git a/servant.core b/servant.core index 4013e26..34de393 100644 --- a/servant.core +++ b/servant.core @@ -1,6 +1,6 @@ CAPI=2: -name : ::servant:1.0 +name : ::servant:1.0.1 filesets: service: @@ -56,6 +56,13 @@ filesets: - servant/servix_clock_gen.v : {file_type : verilogSource} - servant/servix.v : {file_type : verilogSource} - data/arty_a7_35t.xdc : {file_type : xdc} + + zcu106: + files: + - servant/servus_clock_gen.v : {file_type : verilogSource} + - servant/servus.v : {file_type : verilogSource} + - data/zcu106.xdc : {file_type : xdc} + targets: default: filesets : [soc] @@ -144,6 +151,15 @@ targets: verilator_options : [--trace] toplevel : servant_sim + zcu106: + default_tool: vivado + description : Zynq UltraScale+ MPSoC ZCU106 Evaluation Kit + filesets : [mem_files, soc, zcu106] + parameters : [memfile, memsize] + tools: + vivado: {part : xczu7ev-ffvc1156-2-e} + toplevel : servus + parameters: PLL: datatype : str diff --git a/servant/servus.v b/servant/servus.v new file mode 100644 index 0000000..05fa774 --- /dev/null +++ b/servant/servus.v @@ -0,0 +1,36 @@ +`default_nettype none +module servus + (input wire i_clk_p, + input wire i_clk_n, + output wire o_uart_tx, + output wire q); + + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 8192; + + wire i_clk; + wire clk; + wire rst; + + assign o_uart_tx = q; + + IBUFDS ibufds + (.I (i_clk_p), + .IB (i_clk_n), + .O (i_clk)); + + servus_clock_gen + clock_gen + (.i_clk (i_clk), + .o_clk (clk), + .o_rst (rst)); + + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (clk), + .wb_rst (rst), + .q (q)); + +endmodule diff --git a/servant/servus_clock_gen.v b/servant/servus_clock_gen.v new file mode 100644 index 0000000..0e91c8c --- /dev/null +++ b/servant/servus_clock_gen.v @@ -0,0 +1,44 @@ +`default_nettype none +module servus_clock_gen + (input wire i_clk, + output wire o_clk, + output reg o_rst); + + wire clkfb; + wire locked; + reg locked_r; + + MMCME4_ADV + #(.DIVCLK_DIVIDE (5), + .CLKFBOUT_MULT_F (48.000), + .CLKOUT0_DIVIDE_F (75.0), + .CLKIN1_PERIOD (8.0), //125MHz + .STARTUP_WAIT ("FALSE")) + mmcm + (.CLKFBOUT (clkfb), + .CLKFBOUTB (), + .CLKOUT0 (o_clk), + .CLKOUT0B (), + .CLKOUT1 (), + .CLKOUT1B (), + .CLKOUT2 (), + .CLKOUT2B (), + .CLKOUT3 (), + .CLKOUT3B (), + .CLKOUT4 (), + .CLKOUT5 (), + .CLKOUT6 (), + .CLKIN1 (i_clk), + .CLKIN2 (1'b0), + .CLKINSEL (1'b1), + .LOCKED (locked), + .PWRDWN (1'b0), + .RST (1'b0), + .CLKFBIN (clkfb)); + + always @(posedge o_clk) begin + locked_r <= locked; + o_rst <= !locked_r; + end + +endmodule From 1d311edb7d90cad474e546e8a0c518cdce01a81c Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 10 Apr 2020 21:54:54 +0200 Subject: [PATCH 010/289] Make counter internal in serv_state --- rtl/serv_alu.v | 5 ++--- rtl/serv_bufreg.v | 10 +++++----- rtl/serv_csr.v | 21 ++++++++++++--------- rtl/serv_ctrl.v | 8 ++++---- rtl/serv_state.v | 31 ++++++++++++++++++++++++++----- rtl/serv_top.v | 34 ++++++++++++++++++++++++---------- 6 files changed, 73 insertions(+), 36 deletions(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index 64634ae..e6d7a46 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -4,6 +4,7 @@ module serv_alu input wire clk, input wire i_rst, input wire i_en, + input wire i_cnt0, input wire i_rs1, input wire i_rs2, input wire i_imm, @@ -33,7 +34,6 @@ module serv_alu wire [4:0] shamt; reg shamt_msb; - reg en_r; wire shamt_ser; wire plus_1; @@ -82,7 +82,7 @@ module serv_alu assign result_eq = eq & eq_r; assign result_lt = eq ? lt_r : op_b^lt_sign; - assign plus_1 = i_en & !en_r; + assign plus_1 = i_cnt0; assign o_cmp = i_cmp_eq ? result_eq : result_lt; localparam [15:0] BOOL_LUT = 16'h8E96;//And, Or, =, xor @@ -104,7 +104,6 @@ module serv_alu result_lt_r <= result_lt; end eq_r <= result_eq | ~i_en; - en_r <= i_en; if (i_shamt_en) shamt_msb <= b_inv_plus_1_cy; diff --git a/rtl/serv_bufreg.v b/rtl/serv_bufreg.v index e9358fa..1f8c70c 100644 --- a/rtl/serv_bufreg.v +++ b/rtl/serv_bufreg.v @@ -1,8 +1,8 @@ module serv_bufreg ( input wire i_clk, - input wire [4:2] i_cnt, - input wire [1:0] i_cnt_r, + input wire i_cnt0, + input wire i_cnt1, input wire i_en, input wire i_init, input wire i_loop, @@ -19,7 +19,7 @@ module serv_bufreg reg c_r; reg [31:0] data; - wire clr_lsb = (i_cnt[4:2] == 3'd0) & i_cnt_r[0] & i_clr_lsb; + wire clr_lsb = i_cnt0 & i_clr_lsb; assign {c,q} = {1'b0,(i_rs1 & i_rs1_en)} + {1'b0,(i_imm & i_imm_en & !clr_lsb)} + c_r; @@ -30,9 +30,9 @@ module serv_bufreg if (i_en) data <= {(i_loop & !i_init) ? o_q : q, data[31:1]}; - if ((i_cnt[4:2] == 3'd0) & i_cnt_r[0] & i_init) + if (i_cnt0 & i_init) o_lsb[0] <= q; - if ((i_cnt[4:2] == 3'd0) & i_cnt_r[1] & i_init) + if (i_cnt1 & i_init) o_lsb[1] <= q; end diff --git a/rtl/serv_csr.v b/rtl/serv_csr.v index 40423e1..897e272 100644 --- a/rtl/serv_csr.v +++ b/rtl/serv_csr.v @@ -3,8 +3,11 @@ module serv_csr ( input wire i_clk, input wire i_en, - input wire [4:2] i_cnt, - input wire [3:2] i_cnt_r, + input wire i_cnt0to3, + input wire i_cnt2, + input wire i_cnt3, + input wire i_cnt7, + input wire i_cnt_done, input wire i_e_op, input wire i_ebreak, input wire i_mem_cmd, @@ -56,8 +59,8 @@ module serv_csr wire timer_irq = i_mtip & mstatus_mie & mie_mtie; - assign mcause = (i_cnt[4:2] == 3'd0) ? mcause3_0[0] : //[3:0] - ((i_cnt[4:2] == 3'd7) & i_cnt_r[3]) ? mcause31 //[31] + assign mcause = i_cnt0to3 ? mcause3_0[0] : //[3:0] + i_cnt_done ? mcause31 //[31] : 1'b0; assign o_csr_in = csr_in; @@ -70,13 +73,13 @@ module serv_csr Note: To save resources mstatus_mpie (mstatus bit 7) is not readable or writable from sw */ - if (i_mstatus_en & (i_cnt[4:2] == 3'd0) & i_cnt_r[3]) + if (i_mstatus_en & i_cnt3) mstatus_mie <= csr_in; - if (i_mie_en & (i_cnt[4:2] == 3'd1) & i_cnt_r[3]) + if (i_mie_en & i_cnt7) mie_mtie <= csr_in; - mstatus <= (i_cnt[4:2] == 0) & i_cnt_r[2] & mstatus_mie; + mstatus <= i_cnt2 & mstatus_mie; timer_irq_r <= timer_irq; @@ -95,9 +98,9 @@ module serv_csr end if (i_mcause_en & i_en) begin - if (i_cnt[4:2] == 3'd0) + if (i_cnt0to3) mcause3_0 <= {csr_in, mcause3_0[3:1]}; - if ((i_cnt[4:2] == 3'd7) & i_cnt_r[3]) + if (i_cnt_done) mcause31 <= csr_in; end end diff --git a/rtl/serv_ctrl.v b/rtl/serv_ctrl.v index 2ebd747..203c8a4 100644 --- a/rtl/serv_ctrl.v +++ b/rtl/serv_ctrl.v @@ -5,8 +5,8 @@ module serv_ctrl input wire i_rst, //State input wire i_pc_en, - input wire [4:2] i_cnt, - input wire [2:2] i_cnt_r, + input wire i_cnt12to31, + input wire i_cnt2, input wire i_cnt_done, //Control input wire i_jump, @@ -46,7 +46,7 @@ module serv_ctrl wire offset_a; wire offset_b; - assign plus_4 = i_cnt_r[2] & (i_cnt[4:2] == 3'd0); + assign plus_4 = i_cnt2; assign o_ibus_adr[0] = pc; assign o_bad_pc = pc_plus_offset_aligned; @@ -76,7 +76,7 @@ module serv_ctrl assign o_rd = (i_utype & pc_plus_offset_aligned) | (pc_plus_4 & i_jal_or_jalr); assign offset_a = i_pc_rel & pc; - assign offset_b = i_utype ? (i_imm & (i_cnt[4] | (i_cnt[3:2] == 2'b11))): i_buf; + assign offset_b = i_utype ? (i_imm & i_cnt12to31): i_buf; assign {pc_plus_offset_cy,pc_plus_offset} = offset_a+offset_b+pc_plus_offset_cy_r; assign pc_plus_offset_aligned = pc_plus_offset & en_pc_r; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index c2f9f76..b919264 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -20,8 +20,13 @@ module serv_state input wire i_rd_op, output reg o_init, output reg o_cnt_en, - output reg [4:0] o_cnt, - output reg [3:0] o_cnt_r, + output wire o_cnt0, + output wire o_cnt0to3, + output wire o_cnt12to31, + output wire o_cnt1, + output wire o_cnt2, + output wire o_cnt3, + output wire o_cnt7, output wire o_ctrl_pc_en, output reg o_ctrl_jump, output wire o_ctrl_trap, @@ -36,15 +41,31 @@ module serv_state parameter WITH_CSR = 1; + wire cnt4; + reg stage_two_req; + reg [4:2] o_cnt; + reg [3:0] o_cnt_r; + //Update PC in RUN or TRAP states assign o_ctrl_pc_en = o_cnt_en & !o_init; - assign o_alu_shamt_en = (o_cnt < 5) & o_init; assign o_mem_bytecnt = o_cnt[4:3]; + assign o_cnt0to3 = (o_cnt[4:2] == 3'd0); + assign o_cnt12to31 = (o_cnt[4] | (o_cnt[3:2] == 2'b11)); + assign o_cnt0 = (o_cnt[4:2] == 3'd0) & o_cnt_r[0]; + assign o_cnt1 = (o_cnt[4:2] == 3'd0) & o_cnt_r[1]; + assign o_cnt2 = (o_cnt[4:2] == 3'd0) & o_cnt_r[2]; + assign o_cnt3 = (o_cnt[4:2] == 3'd0) & o_cnt_r[3]; + assign cnt4 = (o_cnt[4:2] == 3'd1) & o_cnt_r[0]; + assign o_cnt7 = (o_cnt[4:2] == 3'd1) & o_cnt_r[3]; + + assign o_alu_shamt_en = (o_cnt0to3 | cnt4) & o_init; + + //slt*, branch/jump, shift, load/store wire two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op; @@ -90,12 +111,12 @@ module serv_state if (o_cnt_done) o_cnt_en <= 1'b0; - o_cnt <= o_cnt + {4'd0,o_cnt_en}; + o_cnt <= o_cnt + {2'd0,o_cnt_r[3]}; if (o_cnt_en) o_cnt_r <= {o_cnt_r[2:0],o_cnt_r[3]}; if (i_rst) begin - o_cnt <= 5'd0; + o_cnt <= 3'd0; stage_two_pending <= 1'b0; o_ctrl_jump <= 1'b0; o_cnt_r <= 4'b0001; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 0463568..70b4c46 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -88,8 +88,13 @@ module serv_top wire init; wire cnt_en; - wire [4:0] cnt; - wire [3:0] cnt_r; + wire cnt0to3; + wire cnt12to31; + wire cnt0; + wire cnt1; + wire cnt2; + wire cnt3; + wire cnt7; wire cnt_done; @@ -167,8 +172,13 @@ module serv_top .i_rd_op (rd_op), .o_init (init), .o_cnt_en (cnt_en), - .o_cnt (cnt), - .o_cnt_r (cnt_r), + .o_cnt0to3 (cnt0to3), + .o_cnt12to31 (cnt12to31), + .o_cnt0 (cnt0), + .o_cnt1 (cnt1), + .o_cnt2 (cnt2), + .o_cnt3 (cnt3), + .o_cnt7 (cnt7), .o_cnt_done (cnt_done), .o_bufreg_hold (bufreg_hold), .o_ctrl_pc_en (ctrl_pc_en), @@ -246,8 +256,8 @@ module serv_top serv_bufreg bufreg ( .i_clk (clk), - .i_cnt (cnt[4:2]), - .i_cnt_r (cnt_r[1:0]), + .i_cnt0 (cnt0), + .i_cnt1 (cnt1), .i_en (!bufreg_hold), .i_init (init), .i_loop (bufreg_loop), @@ -269,8 +279,8 @@ module serv_top .i_rst (i_rst), //State .i_pc_en (ctrl_pc_en), - .i_cnt (cnt[4:2]), - .i_cnt_r (cnt_r[2]), + .i_cnt12to31 (cnt12to31), + .i_cnt2 (cnt2), .i_cnt_done (cnt_done), //Control .i_jump (jump), @@ -295,6 +305,7 @@ module serv_top .clk (clk), .i_rst (i_rst), .i_en (cnt_en), + .i_cnt0 (cnt0), .i_rs1 (rs1), .i_rs2 (rs2), .i_imm (imm), @@ -392,8 +403,11 @@ module serv_top ( .i_clk (clk), .i_en (cnt_en), - .i_cnt (cnt[4:2]), - .i_cnt_r (cnt_r[3:2]), + .i_cnt0to3 (cnt0to3), + .i_cnt2 (cnt2), + .i_cnt3 (cnt3), + .i_cnt7 (cnt7), + .i_cnt_done (cnt_done), .i_e_op (e_op), .i_ebreak (ebreak), .i_mem_cmd (o_dbus_we), From fda7dd288a012cd248e47a01e51a5e3201fc3513 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 14 Apr 2020 16:54:05 +0200 Subject: [PATCH 011/289] Optimize enable signal for mem_if buffers --- rtl/serv_mem_if.v | 52 +++++++++++++++-------------------------------- rtl/serv_top.v | 1 - 2 files changed, 16 insertions(+), 37 deletions(-) diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index fce22df..b9ea5cb 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -4,7 +4,6 @@ module serv_mem_if ( input wire i_clk, input wire i_en, - input wire i_init, input wire i_mem_op, input wire i_signed, input wire i_word, @@ -22,54 +21,35 @@ module serv_mem_if reg signbit; - reg [7:0] dat0; - reg [7:0] dat1; - reg [7:0] dat2; - reg [7:0] dat3; - wire dat0_en; - wire dat1_en; - wire dat2_en; - wire dat3_en; + wire [2:0] tmp = {1'b0,i_bytecnt}+{1'b0,i_lsb}; - wire [1:0] dat_sel = i_bytecnt[1] ? i_bytecnt : (i_bytecnt | i_lsb); + reg [31:0] dat; - wire dat_cur = (dat_sel == 3) ? dat3[0] : - (dat_sel == 2) ? dat2[0] : - (dat_sel == 1) ? dat1[0] : dat0[0]; + wire dat_en = i_en & !tmp[2]; + + wire dat_cur = + ((i_lsb == 2'd3) & dat[24]) | + ((i_lsb == 2'd2) & dat[16]) | + ((i_lsb == 2'd1) & dat[8]) | + ((i_lsb == 2'd0) & dat[0]); wire dat_valid = i_word | (i_bytecnt == 2'b00) | (i_half & !i_bytecnt[1]); + assign o_rd = i_mem_op & (dat_valid ? dat_cur : signbit & i_signed); - assign o_wb_sel[3] = i_word | (i_half & i_lsb[1]) | (i_lsb == 2'b11); + assign o_wb_sel[3] = (i_lsb == 2'b11) | i_word | (i_half & i_lsb[1]); assign o_wb_sel[2] = (i_lsb == 2'b10) | i_word; - assign o_wb_sel[1] = ((i_word | i_half) & !i_lsb[1]) | (i_lsb == 2'b01); + assign o_wb_sel[1] = (i_lsb == 2'b01) | i_word | (i_half & !i_lsb[1]); assign o_wb_sel[0] = (i_lsb == 2'b00); - wire wbyte0 = (i_bytecnt == 2'b00); - wire wbyte1 = ((i_bytecnt == 2'b01) & !i_lsb[0]); - wire wbyte2 = ((i_bytecnt == 2'b10) & !i_lsb[1]); - wire wbyte3 = ((i_bytecnt == 2'b11) & !i_lsb[1]); - - assign dat0_en = i_en & (i_init ? wbyte0 : (dat_sel == 2'd0)); - assign dat1_en = i_en & (i_init ? (wbyte0 | wbyte1) : (dat_sel == 2'd1)); - assign dat2_en = i_en & (i_init ? (wbyte0 | wbyte2) : (dat_sel == 2'd2)); - assign dat3_en = i_en & (i_init ? (wbyte0 | wbyte1 | wbyte3) : (dat_sel == 2'd3)); - - assign o_wb_dat = {dat3,dat2,dat1,dat0}; + assign o_wb_dat = dat; always @(posedge i_clk) begin - - if (dat0_en) - dat0 <= {i_rs2, dat0[7:1]}; - if (dat1_en) - dat1 <= {i_rs2, dat1[7:1]}; - if (dat2_en) - dat2 <= {i_rs2, dat2[7:1]}; - if (dat3_en) - dat3 <= {i_rs2, dat3[7:1]}; + if (dat_en) + dat <= {i_rs2, dat[31:1]}; if (i_wb_ack) - {dat3,dat2,dat1,dat0} <= i_wb_rdt; + dat <= i_wb_rdt; if (dat_valid) signbit <= dat_cur; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 70b4c46..9c9ea9d 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -381,7 +381,6 @@ module serv_top ( .i_clk (clk), .i_en (cnt_en), - .i_init (init), .i_mem_op (mem_op), .i_signed (mem_signed), .i_word (mem_word), From 4f902829a3dc5e49a5d72108bb0f2851eb6b9fca Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 19 Apr 2020 23:06:54 +0200 Subject: [PATCH 012/289] Bump core version --- serv.core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serv.core b/serv.core index f09c6dd..fe9c899 100644 --- a/serv.core +++ b/serv.core @@ -1,6 +1,6 @@ CAPI=2: -name : ::serv:1.0 +name : ::serv:1.0.1 filesets: core: From b2004f741a802ef65607e681d3ed50f937985069 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 21 Apr 2020 12:28:42 +0200 Subject: [PATCH 013/289] Update README --- README.md | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index fdcc38e..8cd5480 100644 --- a/README.md +++ b/README.md @@ -66,26 +66,23 @@ Download the tests repo Run the compliance tests -`cd $SERV/riscv-compliance && make TARGETDIR=$SERV/serv/riscv-target RISCV_TARGET=serv RISCV_DECICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$SERV/workspace/build/serv_0/verilator_tb-verilator/Vserv_wrapper` +`cd $SERV/riscv-compliance && make TARGETDIR=$SERV/serv/riscv-target RISCV_TARGET=serv RISCV_DECICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$SERV/workspace/build/servant_1.0.1/verilator_tb-verilator/Vservant_sim` ## Run on hardware -Only supported so far is a single threaded Zephyr hello world example on the icebreaker tinyFPGA BX and arty A7 35T boards. Some -packages should be installed before running it (and shoud be accessible in your PATH variable): -- [icestorm](https://github.com/cliffordwolf/icestorm). -- [nextpnr](https://github.com/YosysHQ/nextpnr). +The servant SoC has been ported to a number of different FPGA boards. To see all currently supported targets run -And do not forget to add fusesoc-cores in your fusesoc lib : -- locally: -``` - fusesoc library add fusesoc-cores https://github.com/fusesoc/fusesoc-cores -``` -- globally: -``` - fusesoc library add --global fusesoc-cores https://github.com/fusesoc/fusesoc-cores -``` + fusesoc core show servant -Run with `--memfile=$SERV/sw/blinky.hex` as the last argument to run the LED blink example instead of hello world. +By default, these targets have the program memory preloaded with a small Zephyr hello world example that writes its output on a UART pin. Don't forget to install the appropriate toolchain (e.g. icestorm, Vivado, Quartus...) and add to your PATH + +Some targets also depend on functionality in the FuseSoC base library (fusesoc-cores). Running `fusesoc library list` should tell you if fusesoc-cores is already available. If not, add it to your workspace with + + fusesoc library add fusesoc-cores https://github.com/fusesoc/fusesoc-cores + +Now we're ready to build. Note, for all the cases below, it's possible to run with `--memfile=$SERV/sw/blinky.hex` +(or any other suitable program) as the last argument to preload the LED blink example +instead of hello world. ### TinyFPGA BX @@ -93,7 +90,7 @@ Pin A6 is used for UART output with 115200 baud rate. cd $SERV/workspace fusesoc run --target=tinyfpga_bx servant - tinyprog --program build/serv_0/tinyfpga_bx-icestorm/serv_0.bin + tinyprog --program build/servant_1.0.1/tinyfpga_bx-icestorm/servant_1.0.1.bin ### Icebreaker @@ -110,6 +107,7 @@ blinky.hex change D10 to H5 (led[4]) in data/arty_a7_35t.xdc). cd $SERV/workspace fusesoc run --target=arty_a7_35t servant + ## Other targets The above targets are run on the servant SoC, but there are some targets defined for the CPU itself. Verilator can be run in lint mode to check for design problems by running @@ -128,7 +126,6 @@ This will synthesize for the default Vivado part. To synthesise for a specific d fusesoc run --tool=vivado serv --pnr=none --part=xc7a100tcsg324-1 -At the time of writing, only the icestorm and vivado backends support running synthesis only. ## Good to know From a4eb6c01fef442d0eb342950b544ec39a8eb8212 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 25 Aug 2019 22:41:46 +0200 Subject: [PATCH 014/289] Add ulx3s 85k servant target --- data/ulx3s.lpf | 14 ++++++++++++ servant.core | 19 ++++++++++++++++ servant/ecppll.v | 38 ++++++++++++++++++++++++++++++++ servant/servant_ecp5.v | 33 +++++++++++++++++++++++++++ servant/servant_ecp5_clock_gen.v | 25 +++++++++++++++++++++ 5 files changed, 129 insertions(+) create mode 100644 data/ulx3s.lpf create mode 100644 servant/ecppll.v create mode 100644 servant/servant_ecp5.v create mode 100644 servant/servant_ecp5_clock_gen.v diff --git a/data/ulx3s.lpf b/data/ulx3s.lpf new file mode 100644 index 0000000..0ea49d6 --- /dev/null +++ b/data/ulx3s.lpf @@ -0,0 +1,14 @@ +LOCATE COMP "clk" SITE "G2"; +IOBUF PORT "clk" PULLMODE=NONE IO_TYPE=LVCMOS33; +FREQUENCY PORT "clk" 25.000 MHZ; +LOCATE COMP "q" SITE "B2"; +IOBUF PORT "q" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4; + +LOCATE COMP "btn0" SITE "D6"; # BTN_PWRn (inverted logic) +IOBUF PORT "btn0" PULLMODE=UP IO_TYPE=LVCMOS33; + +LOCATE COMP "wifi_gpio0" SITE "L2"; +IOBUF PORT "wifi_gpio0" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4; + +LOCATE COMP "uart_txd" SITE "L4"; # FPGA transmits to ftdi +IOBUF PORT "uart_txd" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4; diff --git a/servant.core b/servant.core index 34de393..aa39668 100644 --- a/servant.core +++ b/servant.core @@ -57,6 +57,13 @@ filesets: - servant/servix.v : {file_type : verilogSource} - data/arty_a7_35t.xdc : {file_type : xdc} + ulx3s: + files: + - data/ulx3s.lpf : {file_type : LPF} + - servant/ecppll.v : {file_type : verilogSource} + - servant/servant_ecp5_clock_gen.v : {file_type : verilogSource} + - servant/servant_ecp5.v : {file_type : verilogSource} + zcu106: files: - servant/servus_clock_gen.v : {file_type : verilogSource} @@ -134,6 +141,18 @@ targets: - memsize toplevel : servant_tb + ulx3s_85: + default_tool: diamond + description : ULX3S 85k version + filesets : [mem_files, soc, ulx3s] + parameters : [memfile, memsize] + tools: + diamond: + part : LFE5U-85F-6BG381C + trellis: + nextpnr_options : [--package, CABGA381, --85k] + toplevel: servant_ecp5 + verilator_tb: default_tool: verilator filesets : [soc, servant_tb] diff --git a/servant/ecppll.v b/servant/ecppll.v new file mode 100644 index 0000000..bae4953 --- /dev/null +++ b/servant/ecppll.v @@ -0,0 +1,38 @@ +module pll(input clki, + output locked, + output clko +); +wire clkfb; +wire clkos; +wire clkop; +(* ICP_CURRENT="12" *) (* LPF_RESISTOR="8" *) (* MFG_ENABLE_FILTEROPAMP="1" *) (* MFG_GMCREF_SEL="2" *) +EHXPLLL #( + .PLLRST_ENA("DISABLED"), + .INTFB_WAKE("DISABLED"), + .STDBY_ENABLE("DISABLED"), + .DPHASE_SOURCE("DISABLED"), + .CLKOP_FPHASE(0), + .CLKOP_CPHASE(18), + .OUTDIVIDER_MUXA("DIVA"), + .CLKOP_ENABLE("ENABLED"), + .CLKOP_DIV(38), + .CLKFB_DIV(5), + .CLKI_DIV(8), + .FEEDBK_PATH("INT_OP") + ) pll_i ( + .CLKI(clki), + .CLKFB(clkfb), + .CLKINTFB(clkfb), + .CLKOP(clkop), + .RST(1'b0), + .STDBY(1'b0), + .PHASESEL0(1'b0), + .PHASESEL1(1'b0), + .PHASEDIR(1'b0), + .PHASESTEP(1'b0), + .PLLWAKESYNC(1'b0), + .ENCLKOP(1'b0), + .LOCK(locked) + ); +assign clko = clkop; +endmodule diff --git a/servant/servant_ecp5.v b/servant/servant_ecp5.v new file mode 100644 index 0000000..a868d57 --- /dev/null +++ b/servant/servant_ecp5.v @@ -0,0 +1,33 @@ +`default_nettype none +module servant_ecp5 +( + input wire clk, + input wire btn0, + output wire wifi_gpio0, + output wire uart_txd, + output wire q); + + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 8192; + + wire wb_clk; + wire wb_rst; + + assign wifi_gpio0 = btn0; + assign uart_txd = q; + + servant_ecp5_clock_gen clock_gen + (.i_clk (clk), + .i_rst (!btn0), + .o_clk (wb_clk), + .o_rst (wb_rst)); + + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (wb_clk), + .wb_rst (wb_rst), + .q (q)); + +endmodule diff --git a/servant/servant_ecp5_clock_gen.v b/servant/servant_ecp5_clock_gen.v new file mode 100644 index 0000000..0c5d24a --- /dev/null +++ b/servant/servant_ecp5_clock_gen.v @@ -0,0 +1,25 @@ +`default_nettype none +module servant_ecp5_clock_gen + ( + input i_clk, + input i_rst, + output o_clk, + output o_rst); + + wire locked; + + reg [1:0] rst_reg; + always @(posedge o_clk) + if (i_rst) + rst_reg <= 2'b11; + else + rst_reg <= {!locked, rst_reg[1]}; + + assign o_rst = rst_reg[0]; + + pll pll + (.clki (i_clk), + .clko (o_clk), + .locked (locked)); + +endmodule From 6ddf4b5a466c1ebe273b53c287c23afc8e7a1eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Muguruza?= Date: Thu, 23 Apr 2020 09:07:28 +0200 Subject: [PATCH 015/289] Add Alhambra board to repo (#23) * Add Alhambra preliminary pcf * Add Alhambra to targets * Fix uart pin number * Update synth values * Fix clock values * Add Alhambra board to Readme * Make small explanation about Alhambra baud rate --- README.md | 9 ++++++++- data/alhambra.pcf | 5 +++++ servant.core | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 data/alhambra.pcf diff --git a/README.md b/README.md index 8cd5480..b312369 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ The servant SoC has been ported to a number of different FPGA boards. To see all By default, these targets have the program memory preloaded with a small Zephyr hello world example that writes its output on a UART pin. Don't forget to install the appropriate toolchain (e.g. icestorm, Vivado, Quartus...) and add to your PATH -Some targets also depend on functionality in the FuseSoC base library (fusesoc-cores). Running `fusesoc library list` should tell you if fusesoc-cores is already available. If not, add it to your workspace with +Some targets also depend on functionality in the FuseSoC base library (fusesoc-cores). Running `fusesoc library list` should tell you if fusesoc-cores is already available. If not, add it to your workspace with fusesoc library add fusesoc-cores https://github.com/fusesoc/fusesoc-cores @@ -107,6 +107,13 @@ blinky.hex change D10 to H5 (led[4]) in data/arty_a7_35t.xdc). cd $SERV/workspace fusesoc run --target=arty_a7_35t servant +### Alhambra II + +Pin 61 is used for UART output with 38400 baud rate (note that it works with non-standard 43200 value too). This pin is connected to a FT2232H chip in board, that manages the communications between the FPGA and the computer. + + cd $SERV/workspace + fusesoc run --target=alhambra servant + iceprog -d i:0x0403:0x6010:0 build/servant_1.0.1/alhambra-icestorm/servant_1.0.1.bin ## Other targets diff --git a/data/alhambra.pcf b/data/alhambra.pcf new file mode 100644 index 0000000..9c902dc --- /dev/null +++ b/data/alhambra.pcf @@ -0,0 +1,5 @@ +# 12 MHz clock +set_io i_clk 49 + +# RS232 +set_io q 61 diff --git a/servant.core b/servant.core index aa39668..de048d3 100644 --- a/servant.core +++ b/servant.core @@ -45,6 +45,7 @@ filesets: tinyfpga_bx: {files: [data/tinyfpga_bx.pcf : {file_type : PCF}]} icebreaker : {files: [data/icebreaker.pcf : {file_type : PCF}]} + alhambra : {files: [data/alhambra.pcf : {file_type : PCF}]} nexys_a7: files: @@ -107,6 +108,18 @@ targets: pnr: next toplevel : service + alhambra: + default_tool : icestorm + description: Open-hardware iCE40HX4K FPGA board + filesets : [mem_files, soc, service, alhambra] + generate: [alhambra_pll] + parameters : [memfile, memsize, PLL=ICE40_CORE] + tools: + icestorm: + nextpnr_options : [--hx8k, --package, tq144:4k, --freq, 16] + pnr: next + toplevel : service + lint: default_tool : verilator filesets : [soc] @@ -246,3 +259,9 @@ generate: parameters: freq_in : 16 freq_out : 32 + + alhambra_pll: + generator: icepll + parameters: + freq_in : 12 + freq_out : 16 From c0fc72b3535c6525ad93653d327080d9c85e9a8e Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 27 Apr 2020 13:58:32 +0200 Subject: [PATCH 016/289] Add upduino2 servant target --- data/upduino2.pcf | 4 ++ servant.core | 15 ++++++++ servant/servant_upduino2.v | 77 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 data/upduino2.pcf create mode 100644 servant/servant_upduino2.v diff --git a/data/upduino2.pcf b/data/upduino2.pcf new file mode 100644 index 0000000..9611af5 --- /dev/null +++ b/data/upduino2.pcf @@ -0,0 +1,4 @@ +set_io g 39 +set_io b 40 +set_io r 41 +set_io q 14 diff --git a/servant.core b/servant.core index de048d3..81fba29 100644 --- a/servant.core +++ b/servant.core @@ -65,6 +65,11 @@ filesets: - servant/servant_ecp5_clock_gen.v : {file_type : verilogSource} - servant/servant_ecp5.v : {file_type : verilogSource} + upduino2: + files: + - servant/servant_upduino2.v : {file_type : verilogSource} + - data/upduino2.pcf : {file_type : PCF} + zcu106: files: - servant/servus_clock_gen.v : {file_type : verilogSource} @@ -166,6 +171,16 @@ targets: nextpnr_options : [--package, CABGA381, --85k] toplevel: servant_ecp5 + upduino2: + default_tool : icestorm + filesets : [mem_files, soc, upduino2] + parameters : [memfile, memsize] + tools: + icestorm: + nextpnr_options: [--package, sg48, --up5k, --freq, 24] + pnr: next + toplevel : servant_upduino2 + verilator_tb: default_tool: verilator filesets : [soc, servant_tb] diff --git a/servant/servant_upduino2.v b/servant/servant_upduino2.v new file mode 100644 index 0000000..7c43004 --- /dev/null +++ b/servant/servant_upduino2.v @@ -0,0 +1,77 @@ +`default_nettype none +module servant_upduino2 + ( + output wire g, + output wire b, + output wire r, + output wire q); + + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 8192; + parameter PLL = "NONE"; + + wire clk; + wire clk48; + wire locked; + + SB_HFOSC inthosc + ( + .CLKHFPU(1'b1), + .CLKHFEN(1'b1), + .CLKHF(clk48)); + + SB_PLL40_CORE + #( + .FEEDBACK_PATH("SIMPLE"), + .DIVR(4'b0010), + .DIVF(7'b0111111), + .DIVQ(3'b110), + .FILTER_RANGE(3'b001)) + pll + (.LOCK(locked), + .RESETB(1'b1), + .BYPASS(1'b0), + .REFERENCECLK(clk48), + .PLLOUTCORE(clk)); + + SB_RGBA_DRV + #( + .CURRENT_MODE ("0b1"), + .RGB0_CURRENT ("0b000111"), + .RGB1_CURRENT ("0b000111"), + .RGB2_CURRENT ("0b000111")) + RGBA_DRIVER + ( + .CURREN(1'b1), + .RGBLEDEN(1'b1), + .RGB0PWM(q), + .RGB1PWM(q), + .RGB2PWM(q), + .RGB0(g), + .RGB1(b), + .RGB2(r)); + + reg rst = 1'b1; + +/* + //Delayed reset + reg [25:0] cnt; + always @(posedge clk) begin + if (!cnt[25]) + cnt <= cnt + 1; + rst <= !cnt[25]; + end + */ + + always @(posedge clk) + rst <= !locked; + + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (clk), + .wb_rst (rst), + .q (q)); + +endmodule From 2a76adc8dbf952c7961e3a3b82128f6c886a9f50 Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Wed, 6 May 2020 20:07:29 +0200 Subject: [PATCH 017/289] Add compatibility with Xilinx ISE --- rtl/serv_rf_ram_if.v | 5 ++--- rtl/serv_rf_top.v | 4 ++-- servant/servant_ram.v | 2 ++ 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/rtl/serv_rf_ram_if.v b/rtl/serv_rf_ram_if.v index a0744ec..64da74c 100644 --- a/rtl/serv_rf_ram_if.v +++ b/rtl/serv_rf_ram_if.v @@ -2,7 +2,8 @@ module serv_rf_ram_if #(parameter width=8, parameter csr_regs=4, - parameter depth=32*(32+csr_regs)/width) + parameter depth=32*(32+csr_regs)/width, + parameter l2w = $clog2(width)) ( //SERV side input wire i_clk, @@ -27,8 +28,6 @@ module serv_rf_ram_if output wire [$clog2(depth)-1:0] o_raddr, input wire [width-1:0] i_rdata); - localparam l2w = $clog2(width); - reg rgnt; assign o_ready = rgnt | i_wreq; diff --git a/rtl/serv_rf_top.v b/rtl/serv_rf_top.v index 66aec5d..de00d38 100644 --- a/rtl/serv_rf_top.v +++ b/rtl/serv_rf_top.v @@ -3,7 +3,8 @@ module serv_rf_top #(parameter RESET_PC = 32'd0, parameter WITH_CSR = 1, - parameter RF_WIDTH = 2) + parameter RF_WIDTH = 2, + parameter RF_L2D = $clog2((32+(WITH_CSR*4))*32/RF_WIDTH)) ( input wire clk, input wire i_rst, @@ -44,7 +45,6 @@ module serv_rf_top input wire i_dbus_ack); localparam CSR_REGS = WITH_CSR*4; - localparam RF_L2D = $clog2((32+CSR_REGS)*32/RF_WIDTH); wire rf_wreq; wire rf_rreq; diff --git a/servant/servant_ram.v b/servant/servant_ram.v index 11e058c..91340f1 100644 --- a/servant/servant_ram.v +++ b/servant/servant_ram.v @@ -32,7 +32,9 @@ module servant_ram initial if(|memfile) begin +`ifndef ISE $display("Preloading %m from %s", memfile); +`endif $readmemh(memfile, mem); end From 95c5c027a1bb52054df4daa8f3fa3106e0294b33 Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Wed, 6 May 2020 20:10:13 +0200 Subject: [PATCH 018/289] Add Saanlima pipistrello spartan6 LX45 --- README.md | 8 ++++++++ data/pipistrello.ucf | 12 ++++++++++++ servant.core | 19 +++++++++++++++++++ servant/servis.v | 28 ++++++++++++++++++++++++++++ servant/servis_clock_gen.v | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 101 insertions(+) create mode 100644 data/pipistrello.ucf create mode 100644 servant/servis.v create mode 100644 servant/servis_clock_gen.v diff --git a/README.md b/README.md index b312369..99f4eba 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,14 @@ blinky.hex change D10 to H5 (led[4]) in data/arty_a7_35t.xdc). cd $SERV/workspace fusesoc run --target=arty_a7_35t servant +### Saanlima Pipistrello (Spartan6 LX45) + +Pin A10 (usb_data<1>) is used for UART output with 57600 baud rate (to use +blinky.hex change A10 to V16 (led[0]) in data/pipistrello.ucf). + + cd $SERV/workspace + fusesoc run --target=pipistrello servant + ### Alhambra II Pin 61 is used for UART output with 38400 baud rate (note that it works with non-standard 43200 value too). This pin is connected to a FT2232H chip in board, that manages the communications between the FPGA and the computer. diff --git a/data/pipistrello.ucf b/data/pipistrello.ucf new file mode 100644 index 0000000..a1fe990 --- /dev/null +++ b/data/pipistrello.ucf @@ -0,0 +1,12 @@ +CONFIG VCCAUX=3.3; + +NET i_clk LOC = H17 | IOSTANDARD = LVTTL; + +NET i_clk TNM_NET = i_clk; +TIMESPEC TS_USER_CLOCK = PERIOD i_clk 50000 kHz; + + +# uart tx +NET q LOC = A10 | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ; +# led0 +#NET q LOC = V16 | IOSTANDARD = LVCMOS33; diff --git a/servant.core b/servant.core index 81fba29..a08d317 100644 --- a/servant.core +++ b/servant.core @@ -58,6 +58,12 @@ filesets: - servant/servix.v : {file_type : verilogSource} - data/arty_a7_35t.xdc : {file_type : xdc} + pipistrello: + files: + - servant/servis_clock_gen.v : {file_type : verilogSource} + - servant/servis.v : {file_type : verilogSource} + - data/pipistrello.ucf : {file_type : UCF} + ulx3s: files: - data/ulx3s.lpf : {file_type : LPF} @@ -149,6 +155,19 @@ targets: vivado: {part : xc7a35ticsg324-1L} toplevel : servix + pipistrello: + default_tool: ise + description : Saanlima pipistrello + filesets : [mem_files, soc, pipistrello] + parameters : [memfile, memsize] + tools: + ise: + family : Spartan6 + device : xc6slx45 + package : csg324 + speed : -3 + toplevel : servis + sim: default_tool: icarus filesets : [soc, servant_tb] diff --git a/servant/servis.v b/servant/servis.v new file mode 100644 index 0000000..f601d31 --- /dev/null +++ b/servant/servis.v @@ -0,0 +1,28 @@ +`default_nettype none +module servis +( + input wire i_clk, + output wire q); + + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 8192; + parameter PLL = "NONE"; + + wire wb_clk; + wire wb_rst; + + servis_clock_gen + clock_gen + (.i_clk (i_clk), + .o_clk (wb_clk), + .o_rst (wb_rst)); + + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (wb_clk), + .wb_rst (wb_rst), + .q (q)); + +endmodule diff --git a/servant/servis_clock_gen.v b/servant/servis_clock_gen.v new file mode 100644 index 0000000..a8b9067 --- /dev/null +++ b/servant/servis_clock_gen.v @@ -0,0 +1,34 @@ +`default_nettype none +module servis_clock_gen + (input wire i_clk, + output wire o_clk, + output reg o_rst); + + wire clkfb; + wire locked; + reg locked_r; + + PLL_BASE + #(.BANDWIDTH("OPTIMIZED"), + .CLKFBOUT_MULT(16), + .CLKIN_PERIOD(20.0), //50MHz + .CLKOUT1_DIVIDE(50), //16MHz + .DIVCLK_DIVIDE(1)) + PLL_BASE_inst + (.CLKOUT1(o_clk), + .CLKOUT2(), + .CLKOUT3(), + .CLKOUT4(), + .CLKOUT5(), + .CLKFBOUT(clkfb), + .LOCKED(locked), + .CLKIN(i_clk), + .RST(1'b0), + .CLKFBIN(clkfb)); + + always @(posedge o_clk) begin + locked_r <= locked; + o_rst <= !locked_r; + end + +endmodule From 794748dac4d318643e6b360b08d83a332cc6b7fd Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 6 May 2020 20:51:55 +0200 Subject: [PATCH 019/289] Add support for LX9 Microboard --- data/lx9_microboard.ucf | 9 +++++++++ servant.core | 20 +++++++++++++++++++ servant/servant_lx9.v | 32 ++++++++++++++++++++++++++++++ servant/servant_lx9_clock_gen.v | 35 +++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 data/lx9_microboard.ucf create mode 100644 servant/servant_lx9.v create mode 100644 servant/servant_lx9_clock_gen.v diff --git a/data/lx9_microboard.ucf b/data/lx9_microboard.ucf new file mode 100644 index 0000000..3d73549 --- /dev/null +++ b/data/lx9_microboard.ucf @@ -0,0 +1,9 @@ +CONFIG VCCAUX=3.3; + +NET i_clk LOC = V10 | IOSTANDARD = LVCMOS33; +NET i_rst LOC = V4 | IOSTANDARD = LVCMOS33 | PULLDOWN; +NET q LOC = P4 | IOSTANDARD = LVCMOS18; +NET o_uart_tx LOC = T7 | IOSTANDARD = LVCMOS33; + +NET i_clk TNM_NET = clk; +TIMESPEC TS_USER_CLOCK = PERIOD clk 40000 kHz; diff --git a/servant.core b/servant.core index a08d317..c9c4f95 100644 --- a/servant.core +++ b/servant.core @@ -47,6 +47,12 @@ filesets: icebreaker : {files: [data/icebreaker.pcf : {file_type : PCF}]} alhambra : {files: [data/alhambra.pcf : {file_type : PCF}]} + lx9_microboard: + files: + - servant/servant_lx9_clock_gen.v : {file_type : verilogSource} + - servant/servant_lx9.v : {file_type : verilogSource} + - data/lx9_microboard.ucf : {file_type : UCF} + nexys_a7: files: - servant/servix_clock_gen.v : {file_type : verilogSource} @@ -108,6 +114,20 @@ targets: pnr: next toplevel : service + lx9_microboard: + default_tool: ise + description : LX9 Microboard + filesets : [mem_files, soc, lx9_microboard] + parameters : [memfile, memsize] + tools: + ise: + family : Spartan6 + device : xc6slx9 + package : csg324 + speed : -2 + toplevel : servant_lx9 + + tinyfpga_bx: default_tool : icestorm filesets : [mem_files, soc, service, tinyfpga_bx] diff --git a/servant/servant_lx9.v b/servant/servant_lx9.v new file mode 100644 index 0000000..41c2c2a --- /dev/null +++ b/servant/servant_lx9.v @@ -0,0 +1,32 @@ +`default_nettype none +module servant_lx9 +( + input wire i_clk, + input wire i_rst, + output wire o_uart_tx, + output wire q); + + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 8192; + + wire wb_clk; + wire wb_rst; + + assign o_uart_tx = q; + + servant_lx9_clock_gen + clock_gen + (.i_clk (i_clk), + .i_rst (i_rst), + .o_clk (wb_clk), + .o_rst (wb_rst)); + + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (wb_clk), + .wb_rst (wb_rst), + .q (q)); + +endmodule diff --git a/servant/servant_lx9_clock_gen.v b/servant/servant_lx9_clock_gen.v new file mode 100644 index 0000000..bd9d4ba --- /dev/null +++ b/servant/servant_lx9_clock_gen.v @@ -0,0 +1,35 @@ +`default_nettype none +module servant_lx9_clock_gen + (input wire i_clk, + input wire i_rst, + output wire o_clk, + output reg o_rst); + + wire clkfb; + wire locked; + reg locked_r; + + PLL_BASE + #(.BANDWIDTH("OPTIMIZED"), + .CLKFBOUT_MULT(16), + .CLKIN_PERIOD(25.0), //40MHz + .CLKOUT1_DIVIDE(40), //16MHz + .DIVCLK_DIVIDE(1)) + PLL_BASE_inst + (.CLKOUT1(o_clk), + .CLKOUT2(), + .CLKOUT3(), + .CLKOUT4(), + .CLKOUT5(), + .CLKFBOUT(clkfb), + .LOCKED(locked), + .CLKIN(i_clk), + .RST(i_rst), + .CLKFBIN(clkfb)); + + always @(posedge o_clk) begin + locked_r <= locked; + o_rst <= !locked_r; + end + +endmodule From dd65d6097a31f14283ddbeb813f8d154b829ce05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Muguruza?= Date: Fri, 8 May 2020 13:38:33 +0200 Subject: [PATCH 020/289] Update alhambra board (#29) * update pll out and add quotation marks to avoid parse error * Update Alhambra II baud rate * Update nextpnr freq option to 32 --- README.md | 2 +- servant.core | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 99f4eba..1a09a06 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ blinky.hex change A10 to V16 (led[0]) in data/pipistrello.ucf). ### Alhambra II -Pin 61 is used for UART output with 38400 baud rate (note that it works with non-standard 43200 value too). This pin is connected to a FT2232H chip in board, that manages the communications between the FPGA and the computer. +Pin 61 is used for UART output with 115200 baud rate. This pin is connected to a FT2232H chip in board, that manages the communications between the FPGA and the computer. cd $SERV/workspace fusesoc run --target=alhambra servant diff --git a/servant.core b/servant.core index c9c4f95..3b45ac0 100644 --- a/servant.core +++ b/servant.core @@ -127,7 +127,7 @@ targets: speed : -2 toplevel : servant_lx9 - + tinyfpga_bx: default_tool : icestorm filesets : [mem_files, soc, service, tinyfpga_bx] @@ -147,7 +147,7 @@ targets: parameters : [memfile, memsize, PLL=ICE40_CORE] tools: icestorm: - nextpnr_options : [--hx8k, --package, tq144:4k, --freq, 16] + nextpnr_options : [--hx8k, --package, "tq144:4k", --freq, 32] pnr: next toplevel : service @@ -318,4 +318,4 @@ generate: generator: icepll parameters: freq_in : 12 - freq_out : 16 + freq_out : 32 From 40b018af6667b54e5c4f05d4844148f4c04e09e7 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 8 May 2020 22:56:31 +0200 Subject: [PATCH 021/289] Align RISC-V compliance test target code with upstream changes --- riscv-target/serv/compliance_io.h | 4 ++-- riscv-target/serv/device/rv32i/Makefile.include | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/riscv-target/serv/compliance_io.h b/riscv-target/serv/compliance_io.h index 65e0148..5bfa263 100644 --- a/riscv-target/serv/compliance_io.h +++ b/riscv-target/serv/compliance_io.h @@ -27,9 +27,9 @@ //----------------------------------------------------------------------- #define RVTEST_IO_INIT -#define RVTEST_IO_WRITE_STR(_STR) +#define RVTEST_IO_WRITE_STR(_SP, _STR) #define RVTEST_IO_CHECK() -#define RVTEST_IO_ASSERT_GPR_EQ(_R, _I) +#define RVTEST_IO_ASSERT_GPR_EQ(_SP, _R, _I) #define RVTEST_IO_ASSERT_SFPR_EQ(_F, _R, _I) #define RVTEST_IO_ASSERT_DFPR_EQ(_D, _R, _I) diff --git a/riscv-target/serv/device/rv32i/Makefile.include b/riscv-target/serv/device/rv32i/Makefile.include index 9ef57a7..046cff8 100644 --- a/riscv-target/serv/device/rv32i/Makefile.include +++ b/riscv-target/serv/device/rv32i/Makefile.include @@ -6,8 +6,8 @@ endif RUN_TARGET=\ $(TARGET_SIM) \ +timeout=100000000 \ - +signature=$(work_dir_isa)/$(*).signature.output \ - +firmware=$(work_dir_isa)/$<.hex 2> $(work_dir_isa)/$@ + +signature=$(*).signature.output \ + +firmware=$(<).hex 2> $@ RISCV_PREFIX ?= riscv32-unknown-elf- RISCV_GCC ?= $(RISCV_PREFIX)gcc @@ -16,11 +16,11 @@ RISCV_OBJDUMP ?= $(RISCV_PREFIX)objdump RISCV_GCC_OPTS ?= -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles COMPILE_TARGET=\ - $$(RISCV_GCC) $(2) $$(RISCV_GCC_OPTS) \ + $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \ -I$(ROOTDIR)/riscv-test-env/ \ -I$(TARGETDIR)/$(RISCV_TARGET)/ \ -T$(TARGETDIR)/$(RISCV_TARGET)/link.ld $$< \ - -o $(work_dir_isa)/$$@; \ - $$(RISCV_OBJCOPY) -O binary $(work_dir_isa)/$$@ $(work_dir_isa)/$$@.bin; \ - $$(RISCV_OBJDUMP) -D $(work_dir_isa)/$$@ > $(work_dir_isa)/$$@.objdump; \ - python3 $(TARGETDIR)/$(RISCV_TARGET)/makehex.py $(work_dir_isa)/$$@.bin 2048 > $(work_dir_isa)/$$@.hex; + -o $$@; \ + $$(RISCV_OBJCOPY) -O binary $$@ $$@.bin; \ + $$(RISCV_OBJDUMP) -D $$@ > $$@.objdump; \ + python3 $(TARGETDIR)/$(RISCV_TARGET)/makehex.py $$@.bin 2048 > $$@.hex; From 9606e3503d91840da2e6889d59cbc1caf6bd205d Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 26 May 2020 22:43:23 +0200 Subject: [PATCH 022/289] Inline shift_reg --- rtl/serv_alu.v | 16 +++++----------- rtl/serv_ctrl.v | 27 +++++++-------------------- rtl/shift_reg.v | 20 -------------------- serv.core | 1 - 4 files changed, 12 insertions(+), 52 deletions(-) delete mode 100644 rtl/shift_reg.v diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index e6d7a46..f690621 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -31,7 +31,7 @@ module serv_alu reg result_lt_r; - wire [4:0] shamt; + reg [4:0] shamt; reg shamt_msb; wire shamt_ser; @@ -47,14 +47,6 @@ module serv_alu wire op_b = i_op_b_rs2 ? i_rs2 : i_imm; assign shamt_ser = i_sh_right ? op_b : b_inv_plus_1; - shift_reg #(.LEN (5)) shamt_reg - (.clk (clk), - .i_rst (i_rst), - .i_en (i_shamt_en), - .i_d (shamt_ser), - .o_q (shamt[0]), - .o_par (shamt[4:1])); - ser_shift shift ( .i_clk (clk), @@ -105,8 +97,10 @@ module serv_alu end eq_r <= result_eq | ~i_en; - if (i_shamt_en) - shamt_msb <= b_inv_plus_1_cy; + if (i_shamt_en) begin + shamt_msb <= b_inv_plus_1_cy; + shamt <= {shamt_ser,shamt[4:1]}; + end end endmodule diff --git a/rtl/serv_ctrl.v b/rtl/serv_ctrl.v index 203c8a4..f5899a5 100644 --- a/rtl/serv_ctrl.v +++ b/rtl/serv_ctrl.v @@ -21,7 +21,7 @@ module serv_ctrl output wire o_rd, output wire o_bad_pc, //External - output wire [31:0] o_ibus_adr, + output reg [31:0] o_ibus_adr, output wire o_ibus_cyc, input wire i_ibus_ack); @@ -39,7 +39,7 @@ module serv_ctrl wire pc_plus_offset_aligned; wire plus_4; - wire pc; + wire pc = o_ibus_adr[0]; wire new_pc; @@ -48,25 +48,10 @@ module serv_ctrl assign plus_4 = i_cnt2; - assign o_ibus_adr[0] = pc; assign o_bad_pc = pc_plus_offset_aligned; assign {pc_plus_4_cy,pc_plus_4} = pc+plus_4+pc_plus_4_cy_r; - shift_reg - #( - .LEN (32), - .INIT (RESET_PC)) - pc_reg - ( - .clk (clk), - .i_rst (i_rst), - .i_en (i_pc_en), - .i_d (new_pc), - .o_q (pc), - .o_par (o_ibus_adr[31:1]) - ); - generate if (WITH_CSR) assign new_pc = i_trap ? (i_csr_pc & en_pc_r) : i_jump ? pc_plus_offset_aligned : pc_plus_4; @@ -87,13 +72,15 @@ module serv_ctrl pc_plus_4_cy_r <= i_pc_en & pc_plus_4_cy; pc_plus_offset_cy_r <= i_pc_en & pc_plus_offset_cy; - if (i_pc_en) - en_pc_r <= 1'b1; - else if (o_ibus_cyc & i_ibus_ack) + if (i_pc_en) begin + en_pc_r <= 1'b1; + o_ibus_adr <= {new_pc, o_ibus_adr[31:1]}; + end else if (o_ibus_cyc & i_ibus_ack) en_pc_r <= 1'b0; if (i_rst) begin en_pc_r <= 1'b1; + o_ibus_adr <= RESET_PC; end end diff --git a/rtl/shift_reg.v b/rtl/shift_reg.v deleted file mode 100644 index 64b5ed7..0000000 --- a/rtl/shift_reg.v +++ /dev/null @@ -1,20 +0,0 @@ -module shift_reg - #(parameter LEN = 0, - parameter INIT = 0) - ( - input wire clk, - input wire i_rst, - input wire i_en, - input wire i_d, - output wire o_q, - output wire [LEN-2:0] o_par); - - reg [LEN-1:0] data; - assign o_q = data[0]; - assign o_par = data[LEN-1:1]; - always @(posedge clk) - if (i_rst) - data <= INIT; - else if (i_en) - data <= {i_d, data[LEN-1:1]}; -endmodule diff --git a/serv.core b/serv.core index fe9c899..f8aba06 100644 --- a/serv.core +++ b/serv.core @@ -6,7 +6,6 @@ filesets: core: files: - rtl/serv_params.vh : {is_include_file : true} - - rtl/shift_reg.v - rtl/ser_shift.v - rtl/serv_bufreg.v - rtl/serv_alu.v From 188fd2ecc83fe4150498f81e88d57efe399eca28 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 26 May 2020 22:45:53 +0200 Subject: [PATCH 023/289] Restore nettype to wire in toplevels This is needed to prevent breaking sources following SERV that don't handle nettype properly --- rtl/serv_rf_top.v | 1 + rtl/serv_top.v | 1 + 2 files changed, 2 insertions(+) diff --git a/rtl/serv_rf_top.v b/rtl/serv_rf_top.v index de00d38..ef0ae41 100644 --- a/rtl/serv_rf_top.v +++ b/rtl/serv_rf_top.v @@ -161,3 +161,4 @@ module serv_rf_top .i_dbus_ack (i_dbus_ack)); endmodule +`default_nettype wire diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 9c9ea9d..65b59b0 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -492,3 +492,4 @@ module serv_top `endif endmodule +`default_nettype wire From 707f63ae8cb75200b5c107b0eaedc8ba5a10b6f7 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 26 May 2020 22:48:40 +0200 Subject: [PATCH 024/289] Rename ser_shift to serv_shift for consistency --- rtl/serv_alu.v | 2 +- rtl/{ser_shift.v => serv_shift.v} | 2 +- serv.core | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename rtl/{ser_shift.v => serv_shift.v} (97%) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index f690621..b5e1164 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -47,7 +47,7 @@ module serv_alu wire op_b = i_op_b_rs2 ? i_rs2 : i_imm; assign shamt_ser = i_sh_right ? op_b : b_inv_plus_1; - ser_shift shift + serv_shift shift ( .i_clk (clk), .i_load (i_init), diff --git a/rtl/ser_shift.v b/rtl/serv_shift.v similarity index 97% rename from rtl/ser_shift.v rename to rtl/serv_shift.v index 8ec995b..70a80db 100644 --- a/rtl/ser_shift.v +++ b/rtl/serv_shift.v @@ -1,5 +1,5 @@ `default_nettype none -module ser_shift +module serv_shift ( input wire i_clk, input wire i_load, diff --git a/serv.core b/serv.core index f8aba06..353bdf3 100644 --- a/serv.core +++ b/serv.core @@ -6,7 +6,7 @@ filesets: core: files: - rtl/serv_params.vh : {is_include_file : true} - - rtl/ser_shift.v + - rtl/serv_shift.v - rtl/serv_bufreg.v - rtl/serv_alu.v - rtl/serv_csr.v From acbedbe9c4bbff4bb0d2cdda725a95f2e1c42adc Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 26 May 2020 22:52:09 +0200 Subject: [PATCH 025/289] Prepare for release --- serv.core | 2 +- servant.core | 2 +- serving.core | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/serv.core b/serv.core index 353bdf3..a0c2fa4 100644 --- a/serv.core +++ b/serv.core @@ -1,6 +1,6 @@ CAPI=2: -name : ::serv:1.0.1 +name : ::serv:1.0.2 filesets: core: diff --git a/servant.core b/servant.core index 3b45ac0..0be6684 100644 --- a/servant.core +++ b/servant.core @@ -1,6 +1,6 @@ CAPI=2: -name : ::servant:1.0.1 +name : ::servant:1.0.2 filesets: service: diff --git a/serving.core b/serving.core index 63bca35..01714c4 100644 --- a/serving.core +++ b/serving.core @@ -1,6 +1,6 @@ CAPI=2: -name : ::serving:0 +name : ::serving:1.0.2 filesets: rtl: From a742002707de46a685d94b788a26b684542a69a7 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 5 Jun 2020 15:30:51 +0200 Subject: [PATCH 026/289] Add links to movies --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 1a09a06..b90d4e1 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ SERV is an award-winning bit-serial RISC-V core +If you want to know more about SERV, what a bit-serial CPU is and what it's good for, I recommend starting out by watching the movies [introduction to SERV](https://diode.zone/videos/watch/0230a518-e207-4cf6-b5e2-69cc09411013) and the [presentation from the Zürich 2019 RISC-V workshop](https://www.youtube.com/watch?v=xjIxORBRaeQ) + ## Prerequisites Create a directory to keep all the different parts of the project together. We From 19e94bc0328a31a0bedb033e2b32241cc7e98cc3 Mon Sep 17 00:00:00 2001 From: Eric Brombaugh Date: Sun, 26 Jul 2020 14:57:49 -0700 Subject: [PATCH 027/289] Add OrangeCrab R0.2 servant target Added OrangeCrab R0.2 servant target --- README.md | 8 +++ data/orangecrab_r02.lpf | 17 +++++++ servant.core | 15 ++++++ servant/servant_orangecrab.v | 96 ++++++++++++++++++++++++++++++++++++ 4 files changed, 136 insertions(+) create mode 100644 data/orangecrab_r02.lpf create mode 100644 servant/servant_orangecrab.v diff --git a/README.md b/README.md index b90d4e1..7c68ab3 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,14 @@ Pin 9 is used for UART output with 57600 baud rate. cd $SERV/workspace fusesoc run --target=icebreaker servant +### OrangeCrab R0.2 + +Pin D1 is used for UART output with 115200 baud rate. + + cd $SERV/workspace + fusesoc run --target=orangecrab_r0.2 servant + dfu-util -d 1209:5af0 -D build/servant_1.0.2/orangecrab_r0.2-trellis/servant_1.0.2.bit + ### Arty A7 35T Pin D10 (uart_rxd_out) is used for UART output with 57600 baud rate (to use diff --git a/data/orangecrab_r02.lpf b/data/orangecrab_r02.lpf new file mode 100644 index 0000000..2a96dde --- /dev/null +++ b/data/orangecrab_r02.lpf @@ -0,0 +1,17 @@ +LOCATE COMP "clk" SITE "A9"; +IOBUF PORT "clk" PULLMODE=NONE IO_TYPE=LVCMOS33; +FREQUENCY PORT "clk" 48.000 MHZ; + +LOCATE COMP "r" SITE "K4"; +LOCATE COMP "g" SITE "M3"; +LOCATE COMP "b" SITE "J3"; + +IOBUF PORT "r" IO_TYPE=LVCMOS33; +IOBUF PORT "g" IO_TYPE=LVCMOS33; +IOBUF PORT "b" IO_TYPE=LVCMOS33; + +LOCATE COMP "btn" SITE "J17"; # BTN_PWRn (inverted logic) +IOBUF PORT "btn" PULLMODE=UP IO_TYPE=LVCMOS33; + +LOCATE COMP "tx" SITE "M18"; # FPGA serial output +IOBUF PORT "tx" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4; diff --git a/servant.core b/servant.core index 0be6684..df41dba 100644 --- a/servant.core +++ b/servant.core @@ -64,6 +64,11 @@ filesets: - servant/servix.v : {file_type : verilogSource} - data/arty_a7_35t.xdc : {file_type : xdc} + orangecrab: + files: + - data/orangecrab_r02.lpf : {file_type : LPF} + - servant/servant_orangecrab.v : {file_type : verilogSource} + pipistrello: files: - servant/servis_clock_gen.v : {file_type : verilogSource} @@ -175,6 +180,16 @@ targets: vivado: {part : xc7a35ticsg324-1L} toplevel : servix + orangecrab_r0.2: + default_tool: trellis + description : OrangeCrab R0.2 + filesets : [mem_files, soc, orangecrab] + parameters : [memfile, memsize] + tools: + trellis: + nextpnr_options : [--package, CSFBGA285, --25k] + toplevel: servant_orangecrab + pipistrello: default_tool: ise description : Saanlima pipistrello diff --git a/servant/servant_orangecrab.v b/servant/servant_orangecrab.v new file mode 100644 index 0000000..a82c9bf --- /dev/null +++ b/servant/servant_orangecrab.v @@ -0,0 +1,96 @@ +`default_nettype none +module servant_orangecrab +( + input wire clk, + input wire btn, + output wire r, + output wire g, + output wire b, + output wire tx +); + + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 8192; + + wire wb_clk; + wire pll_locked; + EHXPLLL #( + .CLKI_DIV(6), + .CLKFB_DIV(4), + .CLKOP_DIV(15), + .CLKOS_DIV(8), + .CLKOS2_DIV(8), + .CLKOS3_DIV(8), + .CLKOP_ENABLE("ENABLED"), + .CLKOS_ENABLE("DISABLED"), + .CLKOS2_ENABLE("DISABLED"), + .CLKOS3_ENABLE("DISABLED"), + .CLKOP_CPHASE(0), + .CLKOS_CPHASE(0), + .CLKOS2_CPHASE(0), + .CLKOS3_CPHASE(0), + .CLKOP_FPHASE(0), + .CLKOS_FPHASE(0), + .CLKOS2_FPHASE(0), + .CLKOS3_FPHASE(0), + .FEEDBK_PATH("CLKOP"), + .CLKOP_TRIM_POL("RISING"), + .CLKOP_TRIM_DELAY(0), + .CLKOS_TRIM_POL("RISING"), + .CLKOS_TRIM_DELAY(0), + .OUTDIVIDER_MUXA("DIVA"), + .OUTDIVIDER_MUXB("DIVB"), + .OUTDIVIDER_MUXC("DIVC"), + .OUTDIVIDER_MUXD("DIVD"), + .PLL_LOCK_MODE(0), + .PLL_LOCK_DELAY(200), + .STDBY_ENABLE("DISABLED"), + .REFIN_RESET("DISABLED"), + .SYNC_ENABLE("DISABLED"), + .INT_LOCK_STICKY("ENABLED"), + .DPHASE_SOURCE("DISABLED"), + .PLLRST_ENA("DISABLED"), + .INTFB_WAKE("DISABLED") + ) uPLL ( + .CLKI(clk), // ref input + .CLKFB(wb_clk), // ext fb input + .PHASESEL1(0), // msbit phs adj select + .PHASESEL0(0), // lsbit phs adj select + .PHASEDIR(0), // phs adj dir + .PHASESTEP(0), // phs adj step + .PHASELOADREG(0), // load phs adj + .STDBY(0), // power down pll + .PLLWAKESYNC(0), // int/ext fb switching @ wakeup + .RST(0), // pll reset + .ENCLKOP(1), // primary output enable + .ENCLKOS(0), // secondary output enable + .ENCLKOS2(0), // secondary output enable + .ENCLKOS3(0), // secondary output enable + .CLKOP(wb_clk), // primary output + .CLKOS(), // secondary output + .CLKOS2(), // secondary output + .CLKOS3(), // secondary output + .LOCK(pll_locked), // lock indicator + .INTLOCK(), // internal lock indictor + .REFCLK(), // output of ref select mux + .CLKINTFB() // internal fb + ); + + reg wb_rst; + always @(posedge wb_clk) + wb_rst <= ~pll_locked; + + wire q; + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (wb_clk), + .wb_rst (wb_rst), + .q (q)); + + assign r = q; + assign g = q; + assign b = q; + assign tx = q; +endmodule From 119473d50600a849b36a27ac1e86c7d7c6e1148e Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 28 May 2020 16:32:53 +0200 Subject: [PATCH 028/289] Move CSR_SOURCE_ constants into serv_csr.v --- rtl/serv_csr.v | 6 +++++- rtl/serv_params.vh | 6 ------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/rtl/serv_csr.v b/rtl/serv_csr.v index 897e272..ebf4919 100644 --- a/rtl/serv_csr.v +++ b/rtl/serv_csr.v @@ -29,7 +29,11 @@ module serv_csr input wire i_d, output wire o_q); -`include "serv_params.vh" + localparam [1:0] + CSR_SOURCE_CSR = 2'b00, + CSR_SOURCE_EXT = 2'b01, + CSR_SOURCE_SET = 2'b10, + CSR_SOURCE_CLR = 2'b11; reg mstatus; reg mstatus_mie; diff --git a/rtl/serv_params.vh b/rtl/serv_params.vh index 0cf79d9..d28b172 100644 --- a/rtl/serv_params.vh +++ b/rtl/serv_params.vh @@ -1,9 +1,3 @@ -localparam [1:0] - CSR_SOURCE_CSR = 2'b00, - CSR_SOURCE_EXT = 2'b01, - CSR_SOURCE_SET = 2'b10, - CSR_SOURCE_CLR = 2'b11; - localparam [1:0] CSR_MSCRATCH = 2'b00, CSR_MTVEC = 2'b01, From a614e427b8deb47484c24a6b4e49d9de3f6d0488 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 12 Jun 2020 22:23:02 +0200 Subject: [PATCH 029/289] Move immediate decoder to separate module --- rtl/serv_decode.v | 39 +++++++-------------------------------- rtl/serv_immdec.v | 41 +++++++++++++++++++++++++++++++++++++++++ rtl/serv_top.v | 15 +++++++++++++-- serv.core | 1 + 4 files changed, 62 insertions(+), 34 deletions(-) create mode 100644 rtl/serv_immdec.v diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index d66a1e0..1dbfdef 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -4,7 +4,6 @@ module serv_decode input wire clk, //Input input wire i_cnt_en, - input wire i_cnt_done, input wire [31:2] i_wb_rdt, input wire i_wb_en, input wire i_alu_cmp, @@ -54,7 +53,7 @@ module serv_decode output wire o_csr_d_sel, output wire o_csr_imm, //To top - output wire o_imm, + output wire [3:0] o_immdec_ctrl, output wire o_op_b_source, output wire o_rd_csr_en, output wire o_rd_alu_en); @@ -172,20 +171,14 @@ module serv_decode assign o_alu_bool_op = funct3[1:0]; - reg signbit; - - reg [8:0] imm19_12_20; - reg imm7; - reg [5:0] imm30_25; - reg [4:0] imm24_20; - reg [4:0] imm11_7; - - wire [1:0] m2; + //True for S (STORE) or B (BRANCH) type instructions + //False for J type instructions + assign o_immdec_ctrl[0] = opcode[3:0] == 4'b1000; //True for OP-IMM, LOAD, STORE, JALR //False for LUI, AUIPC, JAL - assign m2[0] = (opcode[1:0] == 2'b00) | (opcode[2:1] == 2'b00); - assign m2[1] = opcode[4] & !opcode[0]; - wire m3 = opcode[4]; + assign o_immdec_ctrl[1] = (opcode[1:0] == 2'b00) | (opcode[2:1] == 2'b00); + assign o_immdec_ctrl[2] = opcode[4] & !opcode[0]; + assign o_immdec_ctrl[3] = opcode[4]; assign o_alu_rd_sel[0] = (funct3 == 3'b000); // Add/sub assign o_alu_rd_sel[1] = (funct3[1:0] == 2'b01); //Shift @@ -204,31 +197,13 @@ module serv_decode op22 <= i_wb_rdt[22]; op26 <= i_wb_rdt[26]; - //Immediate decoder - signbit <= i_wb_rdt[31]; - imm19_12_20 <= {i_wb_rdt[19:12],i_wb_rdt[20]}; - imm7 <= i_wb_rdt[7]; - imm30_25 <= i_wb_rdt[30:25]; - imm24_20 <= i_wb_rdt[24:20]; - imm11_7 <= i_wb_rdt[11:7]; end if (i_cnt_en) begin - imm19_12_20 <= {m3 ? signbit : imm24_20[0], imm19_12_20[8:1]}; - imm7 <= signbit; - imm30_25 <= {m2[1] ? imm7 : m2[0] ? signbit : imm19_12_20[0], imm30_25[5:1]}; - imm24_20 <= {imm30_25[0], imm24_20[4:1]}; - imm11_7 <= {imm30_25[0], imm11_7[4:1]}; if (csr_op & o_csr_d_sel) o_rf_rs1_addr <= {1'b0,o_rf_rs1_addr[4:1]}; end end - //True for S (STORE) or B (BRANCH) type instructions - //False for J type instructions - wire m1 = opcode[3:0] == 4'b1000; - - assign o_imm = i_cnt_done ? signbit : m1 ? imm11_7[0] : imm24_20[0]; - //0 (OP_B_SOURCE_IMM) when OPIMM //1 (OP_B_SOURCE_RS2) when BRANCH or OP assign o_op_b_source = opcode[3]; diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v new file mode 100644 index 0000000..1e6d61a --- /dev/null +++ b/rtl/serv_immdec.v @@ -0,0 +1,41 @@ +`default_nettype none +module serv_immdec + ( + input wire i_clk, + //Input + input wire i_cnt_en, + input wire [31:2] i_wb_rdt, + input wire i_wb_en, + input wire i_cnt_done, + input wire [3:0] i_ctrl, + output wire o_imm); + + reg signbit; + + reg [8:0] imm19_12_20; + reg imm7; + reg [5:0] imm30_25; + reg [4:0] imm24_20; + reg [4:0] imm11_7; + + + assign o_imm = i_cnt_done ? signbit : i_ctrl[0] ? imm11_7[0] : imm24_20[0]; + + always @(posedge i_clk) begin + if (i_wb_en) begin + signbit <= i_wb_rdt[31]; + imm19_12_20 <= {i_wb_rdt[19:12],i_wb_rdt[20]}; + imm7 <= i_wb_rdt[7]; + imm30_25 <= i_wb_rdt[30:25]; + imm24_20 <= i_wb_rdt[24:20]; + imm11_7 <= i_wb_rdt[11:7]; + end + if (i_cnt_en) begin + imm19_12_20 <= {i_ctrl[3] ? signbit : imm24_20[0], imm19_12_20[8:1]}; + imm7 <= signbit; + imm30_25 <= {i_ctrl[2] ? imm7 : i_ctrl[1] ? signbit : imm19_12_20[0], imm30_25[5:1]}; + imm24_20 <= {imm30_25[0], imm24_20[4:1]}; + imm11_7 <= {imm30_25[0], imm11_7[4:1]}; + end + end +endmodule diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 65b59b0..2e1a988 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -61,6 +61,8 @@ module serv_top wire [4:0] rs1_addr; wire [4:0] rs2_addr; + wire [3:0] immdec_ctrl; + wire take_branch; wire e_op; wire ebreak; @@ -198,7 +200,6 @@ module serv_top .clk (clk), //Input .i_cnt_en (cnt_en), - .i_cnt_done (cnt_done), .i_wb_rdt (i_ibus_rdt[31:2]), .i_wb_en (o_ibus_cyc & i_ibus_ack), .i_alu_cmp (alu_cmp), @@ -249,10 +250,20 @@ module serv_top .o_csr_d_sel (csr_d_sel), .o_csr_imm (csr_imm), //To top - .o_imm (imm), + .o_immdec_ctrl (immdec_ctrl), .o_rd_csr_en (rd_csr_en), .o_rd_alu_en (rd_alu_en)); + serv_immdec immdec + ( + .i_clk (clk), + .i_cnt_en (cnt_en), + .i_wb_rdt (i_ibus_rdt[31:2]), + .i_wb_en (o_ibus_cyc & i_ibus_ack), + .i_ctrl (immdec_ctrl), + .i_cnt_done (cnt_done), + .o_imm (imm)); + serv_bufreg bufreg ( .i_clk (clk), diff --git a/serv.core b/serv.core index a0c2fa4..c848468 100644 --- a/serv.core +++ b/serv.core @@ -12,6 +12,7 @@ filesets: - rtl/serv_csr.v - rtl/serv_ctrl.v - rtl/serv_decode.v + - rtl/serv_immdec.v - rtl/serv_mem_if.v - rtl/serv_rf_if.v - rtl/serv_rf_ram_if.v From 8775b321d90165d4eef44732a772d6ce47e0d3b6 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 12 Jun 2020 23:03:15 +0200 Subject: [PATCH 030/289] Move jump decision logic to serv_state --- rtl/serv_decode.v | 15 +++++---------- rtl/serv_state.v | 13 +++++++++++-- rtl/serv_top.v | 11 +++++++---- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 1dbfdef..7457b97 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -6,9 +6,9 @@ module serv_decode input wire i_cnt_en, input wire [31:2] i_wb_rdt, input wire i_wb_en, - input wire i_alu_cmp, //To state - output wire o_take_branch, + output wire o_bne_or_bge, + output wire o_cond_branch, output wire o_e_op, output wire o_ebreak, output wire o_branch_op, @@ -33,7 +33,7 @@ module serv_decode output wire o_alu_cmp_uns, output wire o_alu_sh_signed, output wire o_alu_sh_right, - output wire [3:0] o_alu_rd_sel, + output wire [3:0] o_alu_rd_sel, //To RF output reg [4:0] o_rf_rd_addr, output reg [4:0] o_rf_rs1_addr, @@ -97,13 +97,8 @@ module serv_decode //False for JALR/LOAD/STORE/OP/OPIMM? assign o_bufreg_clr_lsb = opcode[4] & ((opcode[1:0] == 2'b00) | (opcode[1:0] == 2'b11)); - //Take branch for jump or branch instructions (opcode == 1x0xx) if - //a) It's an unconditional branch (opcode[0] == 1) - //b) It's a conditional branch (opcode[0] == 0) of type beq,blt,bltu (funct3[0] == 0) and ALU compare is true - //c) It's a conditional branch (opcode[0] == 0) of type bne,bge,bgeu (funct3[0] == 1) and ALU compare is false - //Only valid during the last cycle of INIT, when the branch condition has - //been calculated. - assign o_take_branch = opcode[4] & !opcode[2] & (opcode[0] | (i_alu_cmp^funct3[0])); + assign o_bne_or_bge = funct3[0]; + assign o_cond_branch = !opcode[0]; assign o_ctrl_utype = !opcode[4] & opcode[2] & opcode[0]; assign o_ctrl_jal_or_jalr = opcode[4] & opcode[0]; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index b919264..ba80f7c 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -11,7 +11,9 @@ module serv_state output wire o_rf_wreq, input wire i_rf_ready, output wire o_rf_rd_en, - input wire i_take_branch, + input wire i_cond_branch, + input wire i_bne_or_bge, + input wire i_alu_cmp, input wire i_branch_op, input wire i_mem_op, input wire i_shift_op, @@ -65,6 +67,13 @@ module serv_state assign o_alu_shamt_en = (o_cnt0to3 | cnt4) & o_init; + //Take branch for jump or branch instructions (opcode == 1x0xx) if + //a) It's an unconditional branch (opcode[0] == 1) + //b) It's a conditional branch (opcode[0] == 0) of type beq,blt,bltu (funct3[0] == 0) and ALU compare is true + //c) It's a conditional branch (opcode[0] == 0) of type bne,bge,bgeu (funct3[0] == 1) and ALU compare is false + //Only valid during the last cycle of INIT, when the branch condition has + //been calculated. + wire take_branch = i_branch_op & (!i_cond_branch | (i_alu_cmp^i_bne_or_bge)); //slt*, branch/jump, shift, load/store wire two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op; @@ -89,7 +98,7 @@ module serv_state always @(posedge i_clk) begin if (o_cnt_done) - o_ctrl_jump <= o_init & i_take_branch; + o_ctrl_jump <= o_init & take_branch; if (o_cnt_en) stage_two_pending <= o_init; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 2e1a988..501c0b9 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -63,7 +63,8 @@ module serv_top wire [3:0] immdec_ctrl; - wire take_branch; + wire bne_or_bge; + wire cond_branch; wire e_op; wire ebreak; wire branch_op; @@ -165,7 +166,9 @@ module serv_top .o_rf_wreq (o_rf_wreq), .i_rf_ready (i_rf_ready), .o_rf_rd_en (rd_en), - .i_take_branch (take_branch), + .i_bne_or_bge (bne_or_bge), + .i_cond_branch (cond_branch), + .i_alu_cmp (alu_cmp), .i_branch_op (branch_op), .i_mem_op (mem_op), .i_shift_op (shift_op), @@ -202,9 +205,9 @@ module serv_top .i_cnt_en (cnt_en), .i_wb_rdt (i_ibus_rdt[31:2]), .i_wb_en (o_ibus_cyc & i_ibus_ack), - .i_alu_cmp (alu_cmp), //To state - .o_take_branch (take_branch), + .o_bne_or_bge (bne_or_bge), + .o_cond_branch (cond_branch), .o_e_op (e_op), .o_ebreak (ebreak), .o_branch_op (branch_op), From 1c4e793885abf0abebc8591fed6cd0461d3ceb6d Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 14 Jun 2020 01:07:19 +0200 Subject: [PATCH 031/289] Move CSR immediate decoder to immdec --- rtl/serv_decode.v | 10 ++-------- rtl/serv_immdec.v | 5 ++++- rtl/serv_top.v | 7 ++++--- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 7457b97..c6fcba8 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -3,7 +3,6 @@ module serv_decode ( input wire clk, //Input - input wire i_cnt_en, input wire [31:2] i_wb_rdt, input wire i_wb_en, //To state @@ -51,7 +50,7 @@ module serv_decode output wire o_csr_mcause_en, output wire [1:0] o_csr_source, output wire o_csr_d_sel, - output wire o_csr_imm, + output wire o_csr_imm_en, //To top output wire [3:0] o_immdec_ctrl, output wire o_op_b_source, @@ -146,7 +145,7 @@ module serv_decode assign o_csr_source = funct3[1:0]; assign o_csr_d_sel = funct3[2]; - assign o_csr_imm = o_rf_rs1_addr[0]; + assign o_csr_imm_en = csr_op & o_csr_d_sel; assign o_csr_addr = (op26 & !op20) ? CSR_MSCRATCH : (op26 & !op21) ? CSR_MEPC : @@ -191,11 +190,6 @@ module serv_decode op21 <= i_wb_rdt[21]; op22 <= i_wb_rdt[22]; op26 <= i_wb_rdt[26]; - - end - if (i_cnt_en) begin - if (csr_op & o_csr_d_sel) - o_rf_rs1_addr <= {1'b0,o_rf_rs1_addr[4:1]}; end end diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v index 1e6d61a..974967d 100644 --- a/rtl/serv_immdec.v +++ b/rtl/serv_immdec.v @@ -4,6 +4,8 @@ module serv_immdec input wire i_clk, //Input input wire i_cnt_en, + input wire i_csr_imm_en, + output wire o_csr_imm, input wire [31:2] i_wb_rdt, input wire i_wb_en, input wire i_cnt_done, @@ -20,10 +22,11 @@ module serv_immdec assign o_imm = i_cnt_done ? signbit : i_ctrl[0] ? imm11_7[0] : imm24_20[0]; + assign o_csr_imm = imm19_12_20[4]; always @(posedge i_clk) begin if (i_wb_en) begin - signbit <= i_wb_rdt[31]; + signbit <= i_wb_rdt[31] & !i_csr_imm_en; imm19_12_20 <= {i_wb_rdt[19:12],i_wb_rdt[20]}; imm7 <= i_wb_rdt[7]; imm30_25 <= i_wb_rdt[30:25]; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 501c0b9..3fdebfa 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -143,7 +143,7 @@ module serv_top wire csr_en; wire [1:0] csr_addr; wire csr_pc; - + wire csr_imm_en; wire new_irq; wire trap_taken; @@ -202,7 +202,6 @@ module serv_top ( .clk (clk), //Input - .i_cnt_en (cnt_en), .i_wb_rdt (i_ibus_rdt[31:2]), .i_wb_en (o_ibus_cyc & i_ibus_ack), //To state @@ -251,7 +250,7 @@ module serv_top .o_csr_mcause_en (csr_mcause_en), .o_csr_source (csr_source), .o_csr_d_sel (csr_d_sel), - .o_csr_imm (csr_imm), + .o_csr_imm_en (csr_imm_en), //To top .o_immdec_ctrl (immdec_ctrl), .o_rd_csr_en (rd_csr_en), @@ -261,6 +260,8 @@ module serv_top ( .i_clk (clk), .i_cnt_en (cnt_en), + .i_csr_imm_en (csr_imm_en), + .o_csr_imm (csr_imm), .i_wb_rdt (i_ibus_rdt[31:2]), .i_wb_en (o_ibus_cyc & i_ibus_ack), .i_ctrl (immdec_ctrl), From 88a1a4343877a407597fdab03a0665e8ad21ad78 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 4 Aug 2020 22:46:01 +0200 Subject: [PATCH 032/289] Refactor and Use ALU subtractor for comparisons --- rtl/serv_alu.v | 43 ++++++++++++++++--------------------------- rtl/serv_decode.v | 9 ++++++--- rtl/serv_top.v | 7 ++++--- 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index b5e1164..30f033b 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -4,6 +4,7 @@ module serv_alu input wire clk, input wire i_rst, input wire i_en, + input wire i_shift_op, input wire i_cnt0, input wire i_rs1, input wire i_rs2, @@ -15,7 +16,7 @@ module serv_alu input wire i_sub, input wire [1:0] i_bool_op, input wire i_cmp_eq, - input wire i_cmp_uns, + input wire i_cmp_sig, output wire o_cmp, input wire i_shamt_en, input wire i_sh_right, @@ -34,18 +35,10 @@ module serv_alu reg [4:0] shamt; reg shamt_msb; - wire shamt_ser; - wire plus_1; - wire add_cy; reg add_cy_r; - wire b_inv_plus_1; - wire b_inv_plus_1_cy; - reg b_inv_plus_1_cy_r; - wire op_b = i_op_b_rs2 ? i_rs2 : i_imm; - assign shamt_ser = i_sh_right ? op_b : b_inv_plus_1; serv_shift shift ( @@ -59,22 +52,21 @@ module serv_alu .i_d (i_buf), .o_q (result_sh)); - wire add_b = i_sub ? b_inv_plus_1 : op_b; - assign {add_cy,result_add} = i_rs1+add_b+add_cy_r; - assign {b_inv_plus_1_cy,b_inv_plus_1} = {1'b0,~op_b}+plus_1+b_inv_plus_1_cy_r; + //Sign-extended operands + wire rs1_sx = i_rs1 & i_cmp_sig; + wire op_b_sx = op_b & i_cmp_sig; - reg lt_r; + wire result_lt = rs1_sx + ~op_b_sx + add_cy; + + wire add_a = i_rs1 & ~i_shift_op; + wire add_b = op_b^i_sub; + + assign {add_cy,result_add} = add_a+add_b+add_cy_r; reg eq_r; - wire lt_sign = i_cnt_done & !i_cmp_uns; + assign result_eq = !result_add & eq_r; - wire eq = (i_rs1 == op_b); - - assign result_eq = eq & eq_r; - assign result_lt = eq ? lt_r : op_b^lt_sign; - - assign plus_1 = i_cnt0; assign o_cmp = i_cmp_eq ? result_eq : result_lt; localparam [15:0] BOOL_LUT = 16'h8E96;//And, Or, =, xor @@ -82,15 +74,12 @@ module serv_alu assign o_rd = (i_rd_sel[0] & result_add) | (i_rd_sel[1] & result_sh) | - (i_rd_sel[2] & result_lt_r & plus_1) | + (i_rd_sel[2] & result_lt_r & i_cnt0) | (i_rd_sel[3] & result_bool); always @(posedge clk) begin - add_cy_r <= i_en & add_cy; - b_inv_plus_1_cy_r <= i_en & b_inv_plus_1_cy; - - lt_r <= result_lt & i_en; + add_cy_r <= i_en ? add_cy : i_sub; if (i_en) begin result_lt_r <= result_lt; @@ -98,8 +87,8 @@ module serv_alu eq_r <= result_eq | ~i_en; if (i_shamt_en) begin - shamt_msb <= b_inv_plus_1_cy; - shamt <= {shamt_ser,shamt[4:1]}; + shamt_msb <= add_cy; + shamt <= {result_add,shamt[4:1]}; end end diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index c6fcba8..1e3a637 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -29,7 +29,7 @@ module serv_decode output wire o_alu_sub, output wire [1:0] o_alu_bool_op, output wire o_alu_cmp_eq, - output wire o_alu_cmp_uns, + output wire o_alu_cmp_sig, output wire o_alu_sh_signed, output wire o_alu_sh_right, output wire [3:0] o_alu_rd_sel, @@ -117,7 +117,10 @@ module serv_decode (!opcode[2] & opcode[4] & opcode[0]) | (!opcode[2] & !opcode[3] & !opcode[0])) & (|o_rf_rd_addr); - assign o_alu_sub = opcode[3] & imm30/*alu_sub_r*/; + //True for sub, sll*, b*, slt* + //False for add*, sr* + assign o_alu_sub = (!funct3[2] & (funct3[0] | (opcode[3] & imm30))) | funct3[1] | opcode[4]; + /* 300 0_000 mstatus RWSC @@ -154,7 +157,7 @@ module serv_decode assign o_alu_cmp_eq = funct3[2:1] == 2'b00; - assign o_alu_cmp_uns = (funct3[0] & funct3[1]) | (funct3[1] & funct3[2]); + assign o_alu_cmp_sig = ~((funct3[0] & funct3[1]) | (funct3[1] & funct3[2])); assign o_alu_sh_signed = imm30; assign o_alu_sh_right = funct3[2]; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 3fdebfa..e7fc9c7 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -110,7 +110,7 @@ module serv_top wire alu_sub; wire [1:0] alu_bool_op; wire alu_cmp_eq; - wire alu_cmp_uns; + wire alu_cmp_sig; wire alu_cmp; wire alu_shamt_en; wire alu_sh_signed; @@ -229,7 +229,7 @@ module serv_top .o_alu_sub (alu_sub), .o_alu_bool_op (alu_bool_op), .o_alu_cmp_eq (alu_cmp_eq), - .o_alu_cmp_uns (alu_cmp_uns), + .o_alu_cmp_sig (alu_cmp_sig), .o_alu_sh_signed (alu_sh_signed), .o_alu_sh_right (alu_sh_right), .o_alu_rd_sel (alu_rd_sel), @@ -319,6 +319,7 @@ module serv_top ( .clk (clk), .i_rst (i_rst), + .i_shift_op (shift_op), .i_en (cnt_en), .i_cnt0 (cnt0), .i_rs1 (rs1), @@ -331,7 +332,7 @@ module serv_top .i_sub (alu_sub), .i_bool_op (alu_bool_op), .i_cmp_eq (alu_cmp_eq), - .i_cmp_uns (alu_cmp_uns), + .i_cmp_sig (alu_cmp_sig), .o_cmp (alu_cmp), .i_shamt_en (alu_shamt_en), .i_sh_right (alu_sh_right), From fe79ea40880943c259d774201f2725133f4878fd Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 13 Aug 2020 23:32:15 +0200 Subject: [PATCH 033/289] Add initial documentation --- doc/Makefile | 19 +++++++ doc/conf.py | 53 +++++++++++++++++++ doc/index.rst | 116 ++++++++++++++++++++++++++++++++++++++++++ doc/make.bat | 35 +++++++++++++ doc/serv_alu.png | Bin 0 -> 9058 bytes doc/serv_alu_int.png | Bin 0 -> 37958 bytes doc/serv_bufreg.png | Bin 0 -> 9616 bytes doc/serv_csr.png | Bin 0 -> 11217 bytes doc/serv_ctrl.png | Bin 0 -> 11766 bytes doc/serv_dataflow.png | Bin 0 -> 33811 bytes doc/serv_decode.png | Bin 0 -> 7469 bytes doc/serv_mem_if.png | Bin 0 -> 10595 bytes doc/serv_rf_top.png | Bin 0 -> 10030 bytes 13 files changed, 223 insertions(+) create mode 100644 doc/Makefile create mode 100644 doc/conf.py create mode 100644 doc/index.rst create mode 100644 doc/make.bat create mode 100644 doc/serv_alu.png create mode 100644 doc/serv_alu_int.png create mode 100644 doc/serv_bufreg.png create mode 100644 doc/serv_csr.png create mode 100644 doc/serv_ctrl.png create mode 100644 doc/serv_dataflow.png create mode 100644 doc/serv_decode.png create mode 100644 doc/serv_mem_if.png create mode 100644 doc/serv_rf_top.png diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..298ea9e --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,19 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/doc/conf.py b/doc/conf.py new file mode 100644 index 0000000..dbd08a8 --- /dev/null +++ b/doc/conf.py @@ -0,0 +1,53 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'SERV' +copyright = '2020, Olof Kindgren' +author = 'Olof Kindgren' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinxcontrib.wavedrom' +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] diff --git a/doc/index.rst b/doc/index.rst new file mode 100644 index 0000000..3a83165 --- /dev/null +++ b/doc/index.rst @@ -0,0 +1,116 @@ +.. SERV documentation master file, created by + sphinx-quickstart on Mon Feb 24 00:01:33 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +SERV user manual +================================ + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +Modules +------- + +SERV is a bit-serial CPU which means that the internal datapath is one bit wide. :ref:`dataflow` show the internal dataflow. For each instructions, data is read from the register file or the immediate fields of the instruction word and the result of the operation is stored back into the register file. Reading and writing memory is handled through the memory interface module. + +.. _dataflow: + +.. figure:: serv_dataflow.png + + SERV internal dataflow + +serv_rf_top +^^^^^^^^^^^ + +.. image:: serv_rf_top.png + +serv_rf_top is a top-level convenience wrapper that includes SERV and the default RF implementation and just exposes the timer IRQ and instruction/data wishbone buses. + +serv_top +^^^^^^^^ + +serv_top is the top-level of the SERV core without an RF + +serv_alu +^^^^^^^^ + +.. image:: serv_alu.png + +serv_alu handles alu and shift operations. For shift ops, the data to be shifted resides in bufreg. It also contains the logic for comparisons used by the slt* and conditional branch instructions + +.. image:: serv_alu_int.png + +serv_bufreg +^^^^^^^^^^^ + +.. image:: serv_bufreg.png + +For two-stage operations, serv_bufreg holds data between stages. This data can be the effective address for branches or load/stores or data to be shifted for shift ops. It has a serial output for streaming out results during stage two and a parallel output that forms the dbus address. serv_bufreg also keeps track of the two lsb when calculating adresses. This is used to check for alignment errors + +serv_csr +^^^^^^^^ + +.. image:: serv_csr.png + +serv_csr handles CSR accesses and all status related to (timer) interrupts. Out of the eight CSRs supported by SERV, only four resides in serv_csr (mstatus, mie, mcause and mip) and for those registers, SERV only implement the bits required for ecall, ebreak, misalignment and timer interrupts. The four remaining CSRs are commonly stored in the RF + +serv_ctrl +^^^^^^^^^ + +.. image:: serv_ctrl.png + +serv_ctrl keeps track of the current PC and contains the logic needed to calculate the next PC. + +serv_decode +^^^^^^^^^^^ + +.. image:: serv_decode.png + +serv_decode is responsible for decoding the operation word coming from ibus into a set of control signals that are used internally in SERV. It also assembles the 32-bit immediate used by some instructions. During the life cycle of an operation all control signals (except one) are static and the immediate is streamed out during the first run stage + +serv_mem_if +^^^^^^^^^^^ + +.. image:: serv_mem_if.png + +serv_mem_if prepares the data to be sent out on the dbus during store operations and serializes the incoming data during loads + +serv_rf_if +^^^^^^^^^^ + +serv_rf_if is the gateway between the core and an RF implementation. It transforms all control signals that affect register reads or writes and exposes two read and write ports to the RF. This allows implementors to plug in an RF implementation that is best suited for the technology to be used. + +serv_rf_ram +^^^^^^^^^^^ + +serv_rf_ram is the default RF implementation using an SRAM-like interface. Suitable for FPGA implementations + +serv_rf_ram_if +^^^^^^^^^^^^^^ + +serv_rf_ram_if converts between the SERV RF IF and the serv_rf_ram interface + +serv_state +^^^^^^^^^^ + +serv_state keeps track of the state for the core and contains all dynamic control signals during an operations life time. Also controls the accesses towards the RF and dbus + +shift_reg +^^^^^^^^^ + +shift_reg is a shift register implementation used in various places in SERV + +serv_shift +^^^^^^^^^^ + +serv_shift lives inside the ALU and contains the control logic for shift operations diff --git a/doc/make.bat b/doc/make.bat new file mode 100644 index 0000000..27f573b --- /dev/null +++ b/doc/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/doc/serv_alu.png b/doc/serv_alu.png new file mode 100644 index 0000000000000000000000000000000000000000..7edd15bcdaca3455d6dc09460ac74e3d3d9a900b GIT binary patch literal 9058 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 DXgp|+ literal 0 HcmV?d00001 diff --git a/doc/serv_alu_int.png b/doc/serv_alu_int.png new file mode 100644 index 0000000000000000000000000000000000000000..0b49dcb01fa036e4c85b70775219ce13a31d8520 GIT binary patch literal 37958 zcmdSBXIPV28#NjbN3fw_MWxuVn@SR;rjbG_Aqi2zBtQzJkwA)68+H&Zpa>$USkbXy z1q+HeDu`fL1XPLzK~SWg9d+iN_x--}@BBH}g#&rY-uv0l-uJ!kwN_>$i{U?NxYKY5 z1Tu<3CU77SYhUp1hwUHWh#++DW(dTApeG9SN@IjPDjYHkf&cZ_EI3rA*6C*<2(#dD zkw&v9OfHf}i zzpfWa!&ScA7+FGMd*Tpa4Zs!`0JY3@MxV} zt@?Et46(>#5g3JKAbOJ~{MXU2@L0Jd+;S8_1dsB2%-|CF?@^L4Pz{lx)4^jGn!=C< z^g_0+y)tz#@r4vImyV0LN8$g$GLOj}7O54;~U3nxUj9XvWxJ4h!j_La@Pn;+SCA zBn*p+i=u!}zkd8__L66b0!7+t` zAogGx6a=Oq2FAp~JlJ?G7y>&GoD+dRVzB~@KEf!C6o<1oVIF>rh=_201R4uoI*Aq$ z1B*2y4H_(!1wL}bNQ5pxi;clhso-NU7ywx#WSKxK^56ih0W3>wBvJ(BLc;?E!5mJk z0SZTkA(^ZwtUsDYHVdQC2&gnrj*8KlQDlmUEF|Fqa4OIg0vRjC3g8h4D%*pr=EE^~ zOYh(xRgZ}Z2Upk~{7>f#v<%bK}yN)JX1AA`|?#YmC~(54_kV2}t&jX^006f7Gj zmIt6n*hsQD48|Ae!g>BUDFwk)2ggDs8iiOBh|!Ww5hkpkkjjCw*+vBs!IUW@i3+4R z#?m5HjzM4qktm(kUxlY2Bh4OMr6iC5hYMgdg`bp!H%AyO%O*Aw8>kTqMu<@P$%3>Bp`6XaL?RJn z5|hh9as!1@wGqsdSRVsrQ_v#~VX(XvcAB5Ji^$ZYONJ4+9(T}91Py^To z9f?UN>ERL_PO4%dJdhk5iwfg2aZ)e{E)2)vYK#IMk78MZJUKMnFPesunj*Pkf>y|f zGL`;BJr_$N3Sz?HJUluQ7tQ9Yg8hg(xSxhVMeAhXHU?4%HyQB+J>C#0Qk%m9BZc%Z zltk*Gv9U_P#hWS&zA^^s&IvwfaQ`Un!v5@`wk3XFh`#j5FKabPT-Cs$Ad(E_ld zaS<_8wGr%ZT%ab1q|?B83~iJWt&B9m^m;5doNO8I&mT)H(|WK7DF0Z?6k(ZYGx&uP z$f6~vFf~?y!b&74JXdFyh@*{Am`Y~k1nDE;CKSgq-(0K-%Q9J(U91`zW(j(hS&C(1 z&{zo~0?9)Jq2&rB%1B~)#G*ilBo+pSg@ZeBG?_S>qs5S-2@pKpzmJ1G}l_Hb@3#aK#FsK5j&~bh)S7QLtgy9&t;bB4< zh;oWBoCl8&GX+qD%3!@Vi~#3G$)j{)h6*N@_=UkVB$$kckAg=jc|yLC5`aZ0DEcTG zNGv2UPkJRMk|YDhIGAKo@S@rDNJE&GU;ryq5FLmJ(8Tx&jj<9K7A<1Lu){PGff_uA6ccV>BIHUs zN=q;j2&71^2w@ac2{8dkOe`1&!KjUvnh23(BnxTKMJqXBetNJh3`jU!O7s9v6^)68 z;bWCdGnvC?6Y=4G;TXA$799l-kHW{svXy}vlq4F(ii~CJp(++7BF4y-_{mApL2^Cc zz*SiSWq?o^gH-DSgo-dsBrQrE&V?C*6(Bw^L`n)NKuk5zggCgt$N;yXVL^C|hNhz6 zHCm_)j~1F(!8)BK4y*j}=wKu?C?JA>kmCKJ;Nc`emRPUEYQu2|b^y^xiw$OiyG)!w z5?zGXbBG2lPOOXw#A#S&DMw3=WFiP=u2Kg@tC$!lpB%wgk#VGGy$4@MiZb)%NF)^- z#71bj(FQdZ5g5Qli&;1`Ck%=eL`(E=U6@)DMKx(DQNdAip`0gFQ#@d?I#MK*h(X4f zqH#hVnMfAHX_jcKq6IOKI--XWP8IRBG-)7KVIs@86aj*Rrz1FIIWGXb9}*KM5#Uup z24t8(YmNyB_5+V)0`HX~Cg21?Qlx?=07p=88Jy2SV9h+ShdxXRkCX|ZQkG?7sX0L$ zQKVm(Stv65>p4};RT_16d^{YV+Zj>A~_4ngpv%wTq%wzAR5GK z5``J0BQWR&E{=}Efu&6#1<3qk0?k|`5heBW*RtUnsD$fB6_bM_r4jU4Ej5@Z)M3pk zB8Ftvs7V1TjtDP>)47xg5F1Gt0!@Sy1z`h8F*LOv5$T~YNc^?vD5{uYlEGALdX$F& zhcqLIxL8!AnU0GHHd*o&z&A(?_)Vb*VI(dU3YQp^Tt3S$5Eo&VE5r3Do|ujWPf28$ z$ZU>0OpN4mz(+173Mn@kO%xdyiIj3BQDT#k7HLMt1`3QG2+$tclIRHr6IUjWF|*ZX zcqE(2B$5cx1QAn%H%B93XntUDI5|?~5h2A}LZ}L<1wjqRM2HNM2qf7ICmV1&3NPG) zLnMTuak3zylwkJ2h8z8f3}}#4rBRDeIE|QUmUsvPXbcTGh>3ujs3wLX)+0bpV-VqJ zO*mC73RFqZRJn|545mN{0-eG{#ROobaJEow4i3_3sFa_n)ZYO5rf}gn1}Qes$cu&2 zL@E}IBjs>~9FJfwpC{&Ou@YI3BuJt(TT&)Nfb{pEdoaiWcp1`9M)3%zzz9Mafq}(~ zq9f>Jq#!6-0cH+lI~WJ0=0*`H#%Kduh6sSlIKf;vJ}6v-jzG|`3~gYH6sC#h(V^jV zEu5-~iq;Wf;g1VjHwFd8Y8fgNIaq>4TIvXr8Hof9`S~j)rZ9g& zPoR3Z~W3o;6VnIt6}$72haeu_vj98_Kefu+_^ z2Fj6P{9vvIuZ7X0qNr*jSEvm#iNpP%91Rw!2_|w$s$dVWJaGCjnH-8yA{c5O)`Jwm zlT&a?D4NbuF?b9=Qz#O&oXzo<`jf=k zV3HwHMIv&dl_ZRw38P@qa1j4UfeH#$s3(9VjujG324ajQpLoRT{DlOp0Y;J=k!Ui4 zM&b#hQ8*72gM*4z!N3(zu}X~(R);BgVsw-=Ocf@>NukE5aHxM^lwY8Vht%@fP$MOn zrIGuqC_F!?kqY$y-6;YCFtHK}hRuf~Sx_V)LQ9K*Q%&FuLTUCO)5HwESgMW*P{&|{ zgyL{Blo8|4Bgl174FjQ}>ETQ|N+kp#1}8OA16g6gT7+Me2L~M~kVb*ZksB072j?vL zgb$~{1?;dOBUCT<7b27zQ;Z)A7mNq6M4%6&k~K zV2gQl8OIP21J)RTc{n*wkAz2(V=($ar81aG4GZJyk%1ui2~~VOKFFwy6p84;`al7R z?x!Tk7(t-$(2{~9Na0GM2aTwXVMkMgMPeA@iMrzS0 zE_m}K|7eqejZyQ1kTGyklolh63NYwASVCDepB3rB1hi zj*U=(4Z;8)!p#rmdZu*sWQ+mdzU!FW|ryiZeS*5{KsSueV9bqQUqwQaT# z2>i#ZwgmTqKOm>^Bdj4%SFh`7&MrxMnI8o5M}hmK>c$~yqZisjt|fKa;LUN6>b#*= zkV$DdE6J($zDv%!LLft`9Y?mbTai;H*g#6on!dhIdvWkT_r=XszrM1=YgOzXtnN^K zY>VCc&TdG7rK?b3NgVcFMMg^W`+F2@^xHc-Y$;4=!`8OLxd{ihO8XP?7a0XV1*_ zqo$A+3eWDZsp0k;JffbC(OQRf8bVC(#-AHZ&&ZH}|NM&kXBfrYRm-Qx=R$ZtJ1a

zj&f`LkB)cy6I1-tm*|^)Uz}IwV|DM#dSW3_?w8lCDWVKQtPPLeLx#@wPA+&-y3(#{ z)A;$F<#M^4dpTBllyh+S{al~iMJq1t_}sO9wr}3RX!p(Gf9*Q>$0(<&{@(A6Mt{h+ zbjw^=hIhH$?LgGCKf|eU$m$QFr)*@Oo}bIgX}THM-_w=9dgzGiiVXLzrhKf;gx0ps z)>_)uG3{jvNO9Uf_bZ>Do%=SnrE77zP4mZRXOM=^%loyjF2%^f6!tWd9rv>mn{o&H z+)sp-<{V<|qu$?x+T3y#g7J$TF)TD=z{=)z1gU@7Rr9$eQDqyga#bbTMv~+7Ui$6s z$0wHgAEfR)0H(fmvuDV~=yiKMlt*VTws%5qNKa4iq*T#%Ey$Zq-&6Q7J9)^k>Xt`` z*9;V`Ol<0U5_;HS7Paczrxz_(zrW5O<`S3oyjaaFR=t9MinkUF&4s#7aB$Udu5`8C z-a190+P+J$VEF}TbNzY2{&+~)u!Xi|xMB8;O~nKId=hj1468U$xw(F0S+aEHtr4Gw zxO&U{Tqi6sYSJfnrP?R9ySdF5JoIMlTS7b|t$d(wY_huY$A5ZAbxiS4KCjAPdQ&po znY_vs7c|MjVimpiXiz@-wejY|Zb%>4KEFCVJkY+uu5z%x;%4u+Px&t|>OOq<3MMt> zP(YTL8kcaX{q7e?#0~e68`jy_W{+d`FS{5$Yv-aB!o+)r59x4aQd;}F8L=Oq*305l zZ;QW=c#Pj_eY&bXIiul7Vw{tCpzlX*ne_hC(~??U#EG4a#oy}x=OVQFbwRmHqUWn~ zrypcv@%CPwW4s3YzP5IZW!!EeC9Eo4=~Xjl%!p~un7OZe49!(;ikBBoUxF`P?EJJ? z9U7yphKJuR+_|GX)ujy#q4D3X7d-K4Y0tW^Zku>K#c8NG@8*#C^4*(lN#_0x=iFy~ z-x98y3)x^=Jx@7=j>@UL_d6PNG0kxiUtjdbj3_CiZJ$n*f$h)=3(fd^YhvigA4{(U z*pwb3ZFTC=ReJX>=Hl}saGP@pD(IjU1EccIA`u$$}5a$ zGFp`_yl^J=)AQEpCE0UUT+&kpr_J<*c%;8>_l?V56sjD}TG`-ur=|PGcJOA?Ad@%G zv}(YwOuiKR>FA=01NCK1U}yI!q&J%fBxE`@Tz+Qr2`U z>r-i++lDnXf>;>55(KEfc67_Kw=JFu7SSlXw9^8I{opM;9I^O{@AtMke(J=9LIQ2~ zqJv-y9>t5CLQd&G{Ao?NxqehjW2z7D`;RKYDVyd;OrL{?=zEX$f|Dbh__uAED-#D0 zpI%+&dlgMPd1lYY^r4{{zaFEGzSm>j%g_3_dU9%I6gg?jx=pF}?_yhPHiAh#Jlk{F z9;DpioVqTA9_tJfuXP%FDf-8o8(;$J#PD%QGa)#!@x`3o8bw{rwML9JL8r7 zJd$?8#>G7)i^TzwDw@rC@?VkDWF;`|b=Hc1W@~Um(6t7|8ThC7|UVg#% zNl_>o>-6Em!jLoj8~;H2TEAWKROiZDFltq0ju-b#1llP{Z!ogefNT3 z9N7K`cZZlM{Y9;{#~xiVeZ>t_+WYjSnLC^P^8HhJiEY=Chh#O->GXpG{k?&Wx3|_- zj-IxJbus!~z{M}Q$mR>zN2Nhb6TeN}Fh25T$OVn)j?J8f3+b~Ep^5$H%zb|?E-eh( zFwN7*+9x!Dy>lsXu*Cdot({|y2g7_x-*R9O1h>|z?)Jvo{wZh`>-y@ULE`ZNU>CJ~ zslVAeAkB>@t@{4?{rOLjOX_G!%x z8{KOv>u;ufc+o(I3ePEsKfX5c(IIEnFMhJ$OI5Ys?@Hbbt4%||V8er~^_|UZ^PA*h z&9ASn$~v#Lwt%93SZdkv(9)1sb(dm}QOU?`h<18@{evhFvit@YyK`nyckBmS3fiQTc@Cp_JXVtNJ*V7vF4U0#0yWY z^t?%+d7(V)NTEPeDHI>MbhinRm70?)XmTXhbH#!_}*_vMl{F# zjxq0huM7_KD!d^~fp_%V4SN>ccg(FbHBIY6W2~I8(KAO)hR-}esq#E>kzW+jn%FVu zt$QDE$Y|m!t|eK`Yi}t1>$LpqmMecuLkkvu5oaZDtO6l7=*2dD$)4aeNX2TfD=6xx z*^u_aw5*fMFXAr8eyVoSS$AF^=91atQ;-%?;z~OqJSW~0Rhe>mh|5>eY47+ROgbdk z&m5O7s!SH7Pw{X$KaW$e!D(7U#g+&xcy&uY-pVIXC=|uojrPw>+uwE!HHnWbPM+bL z%pcYCFl450l4UQxIE97PyESb=BOE8pAPpik++hi8woN%ORvG{B7q0E5t$(FUI_~=K zO^-t!II%cx!la^>ov?Phf_?ACfBg34rv2uBA_4B^H;)~Q2{WGe{3(BQ=u}aCOag}8 zQ1LK%qrK1jw<-2MwEw!a<=vFO)-JoOP7uHA1%W5>nD19+&MIm7AZkr#_spB%rB|K0 zN;m(Q?j4+MF0KB4=6{cZ)CRCi7+7=@oX!_h7KfI(k8p66{EkbO(X_nV+#Tj;9TxC= z#$-=l&;Gwe^Xx@+_xGYx{+(_973)Dt4H;a=w|!vTsoDCdeccRzVBDaJ}L|6?}J(Dr)#*w8tQTl~Wekh)is|C3mL z)kk;ZXk;?^d#3&7u9ipsas8WTmrychANh_nep%@R58FWfg4uY4d&J?K^2M&6t`GhI z)aQc@e@vODu|_It=Cr;jUK~^uvhV%7$^r&y?G};gx%|f z#b(8}y`}>IRKO37uRZ%ca`xd5(wXQDqd+WKw|*3F#8j){R}|g*mKw^Ql#&}QXt(yn zGJfJc%C^|#s=0xO3TKi4-onRZ&L77}x}EA$^ttYWcFph!3&_3S+w6OKKzOSLk*l^J zpu;WSKEFElS%<61!w=iJ;eHmv{bO%hi1YS0Z~v5(Zxdw%oJ#499B14$afxRdZSRnA zncX(&A%oMm7DYZeiPSa_`eCJNhIo>@ujKZYhs6LLY<+%K?%2`R-WEMQUtYD}3RGP_ z%^%zYGJXFEXk!{@W@OA5h%afDVXFU{;qd4%^YHQDGe`SJKF}p@wXW>Ir3{O1{|DcI zYEI_h>TPq#^x;Ht=h(b0c2zY;0&Cq)v*5FRyFNTQJaoi_wSD_Q3OPC$RLF7@mL^;s zh${-YItK>Zp3u{B_*5I-Y$B}wFs0Of!0umN{8OY=ck@mN$9IeoY;{6)Dz`gZH?pTq zsBk-VT2kKn-IQZrIVc+JYw`(#mr*8GjvDT7Hm$vx?~`mdhLoJ$^x0`>&iikp?O)#C z(o+nuCMY#G^&}Os@~o9FFFag(C&BU4%;p@gRnz@4hmORcp*(dkbwiXW|NyXtT6-R%kx zRt~_Q;dgs?l4%KNr~KDA7QXH&&!6F0+}zpns1=ra+-B*^2_q2Chq?PEe_bmL9@A2!dY?xVUpYy%!YhJfWvuzbvBsqJRdTM+Stu8JD4fv(J zQ-8*Pe12|oL}kvtmI<34e)!RrdFw>KAC)@%U1e_WYfH=)ta9ng%(XYrmz>(RG;&<` z>SaqkzpOWYaB+vkQGbBy@Cd_7I&sl**4LFsgN~8ZSK8O-w_n`Ke_h0XoicI%Oi<8_ zdsAR+tveEUxTY_6KL2D@Nqp}d!{?W0#kYo^Qv&#+_`G#;`;V5}^HWw?^`NjU2T)B7 z*Kj<$Qu(2P4LCbs1hxG~o`e2-oasMHGwAy0j3KkE#CiFU`RkS?5-ruC%Ow28isW?2=_+>8&Thq*xQNI1 zvJj(+X+?>Edy@Rq#Hnh4%xhz^{>2vk?-jyi>!F?NzF9lEl|=0RuMR0~bBy7_!~F7F z3kR0raJWn5af0K_T_tIAV|2Dv$WihyGj;m=v$CU_sfj6+9=-Lg9cCdf7n9)scYbNPm5umTKS7*g3p* z`^#(IpniSW=I-wP;mNjT=c6Xq9uE$z;{l9j>Eb?FD0BkrWqrv&Ph?m3?$88w#hAUG zCO9DE1h1NAZs5;P>E8eM6IdmgI2=yR9eZ~-KwRd7-Ep)DpveG7cScPpT3$W#XOnlp zq_iXtbKVc|Z}@Y-ykXBp{{RqC_WFuR!5CXM%nP$&)=!2LlGzAAzv7mLftyq`{q-^a z;+Wiwsf;M(WXJt0Uu@A>mpwUz00ctnAAlF!0BV7W-&a}B^mWbrMT4%~2C@o!+f-~b zsCHXnF59XdTp8=F?R6+wl`j)aJ|Y^#KYhxzMWH3fN&AqYaqUCBI_}JvXScdLZ`iQY zznE3X*Do_=j0mHHK4Uh$x#e)~A*S~a!q&$lCqa{((5mCJJpl`oe0S%3|GjAS=!**{ z<=6o3Ez-$5?t+sa;JiXFeX8{Op1ow`AMJSi(PBWKf;9$teQgF)TA6bYA$?G_VeE|T z(dCG$HERUFXxb!nHb%P|&>Z_2n|%PrepGM#!>k!YGp}|7OEN8`cN9ZxjL+SIo{9d3 z`%jx4`|HvyJNMTzhW!8GV|#ta&V(V~{eDH40>ij}_E0kHSJ0!G{lPBjG`3;^SC&H|=q ze^C}Ha>DpU%QJ6pnT%h!>^!%w6KpowjkR_^A)!aqq;s-|t2u#zU3K+k!|c))s9NTf z{CGd5_4U=uk3_yBhmV`HfAPFYnYOR4uHwi29n|aZrpun3Tye*SyowIU*_!?n%ZjTX z>{~h)24mOd0M2R&mX5Tm0>$9eP^$^(ml{OVf3x;ko!wV%wDe4_7$t7J>orksZApgx zFcH9L|J>=pJk70A5 z?RGQ!*AUHdA#U+LG=QP`pDzMl%0fX^JlF&1{pwu{mvxqdyM)=@UzYzl*x#1ONU?^! zxtJXHUV6LCf5v~^{p1r?>7chTR#kcU^+mzOs(k}a$`h#|*RviSqSwxB_FMA@o5M-> zw%bz)`S7B+=qR}_!)3_YHQUNx0gicG^kvIB{rfQhH{wcaHeR{ErDFx4*Y_Bn0-oaN zf56(B9;tmxZ}88`#H!48T59pFWhH3UOO|dkBiH+cGoVX;G2#PRL*}pU-F@u)%abcE z%f5YlmZgHk`j$5;+jq4ADqt>P;X47bcBDLRw&G3ol=k%HgC#w!^N)i1V5_s&lA}t- zwM}of*LQur;2pVsSNm^!a<4iw3j%X*-3++7F#+as+xCscaX)V60RZ0lHiKCWUQDeH0H^&R%mxA) zt$8c@wFX%t*g9<~Zyy03{g!;ry60yWi{ns0#67~!Cn=ULCLD{Gt$RM<)8OgVFZec1 zh&{RH*13Q@oe|Sgy)MVtVAu1aZh+)7*mvf6%9SFM%Oc@fa{uTy+M+ce4P}|XeLNEK zSGSFu^H>Ss*z$k?bM!-)0>Dh>IP(jYHqjAp-Z^vp?@TWJBk4?0V2-#At;CE2Q* ztMWR#8&i+jj~u|pb!+06dA?iKS~E9Bu&&bkRk7OT-GhD0LNj;z2&{d$;&(NhZdwwg zXdi7#FQIjLNO{pp>9iRfPn=QqE-D3c+ zh5h2km<74h`uo4vJpv+#@3bZQs=?clMOP0cgj_WTF_WH_ZFC&v=sKarHf=@MtOFphmFrVV zEkMT2Ny=>uY`Fi1(BHV^dhcgIl()hvb6aYU?Y>m$BJA@!Skaw4A<8n^sE}YVT37F> z;|q=L4J{M;-VyxwZm9I}>1m!(oA84*u@N6}Wib*Ec$?>2{dugUjQV?7dxAk;vVS8R zw`loOsFfH*o!YjqEL7r|u$Lw(Iq3#n@h)uP%la_`uZ(whH(|fHodXhIb7i~8j&VFE zalq6+#o(D;m>5?v@%3R489AvYRmQjE+r3_2P7wi??zBI_dU2rNC*tefO>ancV~XiH zP5Jd$od33|d84LyH0P(i^w*?E_kL4asKHB#pPr-6ozOPk_H%R{xcu_`g^*#(>h7NG zahU&X)(F?kx7*muU|uz|B&+Fb!?Gb)2YNoVKJCpN=ydOCOB_6w)1($>Pt`=1>4Gn0 z%v*N;c&o9r_w&+PQAgDhpZ8&N{sw}zW#oa2x+X@KXC;4*@a&wcoz=8fHTO3S(A8^? zI>e*X2D=1aVKQE89@OD7t-Q)e^ ztz(Qp3;3*7udg<|90}*-axBVe!q24?Wm!t@Zjs9Ei@%+y#|u68+|VT(2TOmv-`i>m z!L9$^0Et7E(qIOpnf;Pstt z3+Ru8c#C7p?^LYI$_To-0RzDfp zdtb*oI6BteNZw+9P+no>Q$BIg`?VFvDJNoQ`SJiq^gFZs49V3?b2N6WQybH^WK2~K zm3Xh($UHIX+i&GH+&}Osk=dHqB=$y&n~~7eBnFKDXT#b!5EV7y`a0 zVV84m(7j2cW<~0&{`LZN0Ja>O+_}wtxpmo=*|+_ zWUFm>KvFmKCD3(mTwSr^0_8;9(aW{Eq>rv%CFC#BR-|J;zJBFoUd;V*b!g73us`g& zu5FCo@-{3*lU=8SESiVy-JyTzISa-y4RvtMy0P!$7>fV^aU_2>o(06^pEonKTW$8*R&3s>J$%E_fW_92 zofPtDz5ga~Hg0w~h(KK%cR$aX4l?+Gi6KUdg5(r^P{NP_KS@c+n8A_RgbKSc%*?ls zq9j>1(^Q=KjcZdKXMM&Dadb(zS7GliPycH-CAD%spgYI6hNY0Z4V6}96_wLccVes> z4u1P|ts?jQaOB|IGTP4~u4#PxXQ?-B)04!8DXD*Uq@4Yh*;Jf0HaAy&oe{f1R(I>_ zcdNMJF23&@@e1OmaqP`Qmw4F|EHz%`{DxPRaThW_!0U`QJN>=RmB%SDhZ}WgSnf*+ zH%dV&W~f?>-K^aYZHUJ%idIL?`B~3}B;!}Y*DZbKW)Wb3CKp-WIPv!h8}cDCBi6PY z2s_to5JVsw4CuF@*=TG6!B(4SSGXhBH~lf)}x&KtMu^@D@u?vuY| zue%^#6mli=?(W4!syLS`L#EjqH|BoO6^>tbux(;XJ7v9>H1FD`ihN&Br?N^B_s*26 z_N3k2=e$#vu?0N|0G0uQb;58S3^woWsAl6eTAwiYre&0+zgWu=>yBkk8Xt|;d%l^K zaH6sv^js2J@T=zoM=YmYET;-9Zx{U2onYQ<(z=(Hk=V7KfwlAk2nPu5;5n~1ZDhMW zv-H2;drHPX&D=W*nn}0&-^=f8vRsb+KQ2Fh+|sM_66Y@tHBt$qh&2ts(=}dFx677p zvy-w_;|1!kc$8-uC=+tVI=s9 zxp&M!op5!!(t!LvrOz=t#rY-9!P|1zG`n{r#%w-F+s!#Gz9j>hh^>4C%nWIp#?8fn z>ii6ps;+;Sd(Fl+-}h%0-0p>Y;4|nIbiA5*vuI&?8tuw9sbs{ z^Nsc?s5I_;;`q3pW9RKbMJ}1P=@?~U=$E3iXOWiTe(NNdMZzWnOT*)0kma{Ic|?%` zy_D~UUtbkE&@u5RMKFnx1hn~sJ?Xz?um$mI)$N~@96#rY!+t7diatnPU?o}G~%&O%6?RJ#YP=6ZRzoEr3XVkEsz z9E|S=d2MUg&DY@0JPS$P3pBpNaX&g*D2zhob-+hk@WLSQd2oU3^Sm^%w56?Lgs}n9 z=HeZ7r=KJiPai*zOZKvVFt&D$i%-IG)JjAj@DcDTQX?A5HUj?DJ#gTB1aRcc+gk}p z<9Bzq&j_48vwsN399JzGOeT0bJUSy~qS6Bo1xyxRj6P^Ckv%-nGCH{3_SCMoYoAXT z>F%2w|1Aq>RC@tKTz3WCFcyf0JA4uo%uV|YHIfr`Z_4}PF3hl7ISuC3eYvfKW?@W# zLFkY8`+zGh)YRWVM%qvvob%x&9rs_3H(Xo_fN%j z=ijC=EgYBRQu4+zMPFV2876YD=SgYv#ipEmKztl2_Z)sQ{!4WFSKy*(F1nuy8Tw*E zz-^mCQ0<&udENTa>&^VUy0jT#lrL$8`{oCCv^TNr(!M#VYN9?oK5-W0cvN;FFiLtX z4?C)SalZ5Qsh>em7-sncddFWuQr z8h2;j7bySd>nRKMK38|$?bIE>AK3CnxDaN4e~qMV{Z?^J|as zkJYc7Z}We+shUB_HoDio;G*g4Y?QouE!a5uvvFT#tgGg(X7IA~1AQh7bG2vqwSEzp z+QQ&75qiLKrM=h!=wHHCC%J9`%x+0^Gy3hAAO~QWA{9Nmx(W?2HZy(%*3?lj&}YHU zK*whqF!vTbpSu5AnR{C2rbRzjA;eYq>&DYFeJzv<06?v&V3KHn&0>G&pAa5=KSFNI zNy{>hcF4V(32T2yF8V!U$boeU_|dRgdGyuq&&>h)Z&>#pK!mpxJ&bq|`rGZ4zV~;{ zx5vhU;*VX#ddh{D+vjeG0FN1X=hJDPKIhc5k-2lrX9y#F@muV_xfnOH<6i?d>OSBG z9*q*GfIfDtT_--#d?jM6yY{-uv;E77;@8m&yt_w%i$MVNI+gp*mm-++c$0HQmejND z&XMjn=%?d{sqIRH*lwUou#1Co$W8a_h9{n_}*9$)>h|vzZlXRY#B%azf;o=3eufG49|P) zSRXm`ss*t95Ily|+cdA67{YSA@S<2)HP%!fd6sA-ffUVFz5sKZ_b>GM3|d-UfDlJ^2dZbRydV{ghYuP({5 z_>O)JuzJ4vLieVLi*r6(Z@jX6V8`6RntpJ5;Z_KEQ4`(iDj?Ch0lsyjUD{HS&tJ*u zz=^WSnPNT8m|O-b;MN(qhat8w3E=-U^8wj;Ja4n>|LulF-XUCgjoYbfo83uf+mB7T ziM-Uq^u6oxD_!?=b`Y)KGM-if#(2TZs|WnycEGdvxwTkDf-g)Ke2>p1Sv2rJ1lPkKnn z7#E;F+T7Xq>;00=#8gxXFgPCla1<5!IACFPGas~odvwx$(w6@j(6X_)4~M^wyS;lN zm_yrz|83Cx?>2Wk=jxv(em)=fBl>QJyZyU+SsB2oxqa?fFaUDWOS`|{x*nwZl>VlK zp~J^jO&mWmVD0DESLc`f_uv^t;>}Z34k|l4yB6nPdUIiKde*eu&hH<_|1(>FKE9>^ zk}_~ha4IUdOhz;V%BbPRFb7w|jf7o8W{KQdEU^c|tN!hgEViHN`+4o(FaHuC&5xH! zlR-7TFt8zi`)lvCe@`Hg6i!tGj}T6^`~N(nN$>oY{O=jv4V zjun+qfolZX)mE1ab~_%VpumZfJ(hYO9&ny?^WRU(*mNi!7%Xy}<2%`x;(oyCz}NuD z!vi@@U2Ca3=J){*2safdM8_U@FOB_}Y4$XC%FG{6m)8*26@`{EuCDriex|qkKdt5& z=k-+j317qvenz&7ZA~#vEB%^<=(lYH;nFCVVR3f=MJdrO7;z(xF`TvAOmR~sZ+7( zq%D*3N~U$_u51l$~E0by^yG{8A-< zXA{;pH=*Zk78sx`_fBN?%0DFWU1%uB>*jC&g*|2WC?U>~SpBh2fKFm2t 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�?l~AVp%@0Hel}6U2pu{2 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 literal 0 HcmV?d00001 diff --git a/doc/serv_ctrl.png b/doc/serv_ctrl.png new file mode 100644 index 0000000000000000000000000000000000000000..469b133c8d0d2751b9fba765135da15250b1aeb1 GIT binary patch literal 11766 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 literal 0 HcmV?d00001 diff --git a/doc/serv_dataflow.png b/doc/serv_dataflow.png new file mode 100644 index 0000000000000000000000000000000000000000..df802f12ddf0166bc09c94839ce51e0ff606497e GIT binary patch literal 33811 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 literal 0 HcmV?d00001 diff --git a/doc/serv_decode.png b/doc/serv_decode.png new file mode 100644 index 0000000000000000000000000000000000000000..1449e7ecf2a2010e8236e9f8b76b5c9ef98aa984 GIT binary patch literal 7469 zcmc&(c|6qX_oqd-x}vlZQOL;BER3;-S(xk`)JRHH zmXu0vDKXkCrR0*WluFqN{XXb^f8RfU|NUOCc|D%xJm;L}ob!1<&pFaaM2z+_gJl{T z8roQIBt=6*69@EFzi9!j1$KXkhK5$K6cs4t$s;*2EDdv**L=?$3XT#;q~ksMaUJPi~K1>1mOHc&?@6k-nZutNY1*wGg12xrXG zGubTuFNOp`JSQfGX%0o(+kydBpg;()#}nw`Is8~T@K=t2hr;dV=frUUD>%XyYzZu2 zSm9g&un`J|fPo(bm_l>JtVjW{3q4CTFN`H+vgZ}UU?~mU`OD*?WwV7K4zXK zjwP0G1pIk22-Mcm7B;^iRR~%0vk|N~PB?3J7KQ?B^UDZ;OwO-k$9UkQz+AeAz>&@t z@ngaxq$G!VCVVFE7ZVb2avMO=Stj-Ye0;c6AVZVD%orX;;w2~2qXeulCX+?t`6-wT zDS_h14iIBwr2c3gQsKx5keEX~=@2BHjwH({u@WC(7~>Ng8yQXq$AG~|4weMNARO@s z1ri$VO%N;W*a~`tA|6L%5V(9-e1_785+xtNx9B4FOIG7y^uy6$C08e;&`rt@3 zgq%vpd-7Ofum>q7es(Jx98TwZ2;np+ng+qhfFq)%BrZpQ7s9C=b_4+-v;#+l+arX0 zh!6?(1m=g457}LWRsD5G7_xpa@8m4~mV&lSy9E zFdwV~4GE5jlmJ17_CXN&{%}trBMNEH@S{3F1#Adg&a`(>;IRm9pf{it-HR>&hY>J# z7+N5jCxXQD(7-GTBd2))&g24pfDbiB0SM>VK>|7aa6bqdhT^bf3LMJ=_@X=sL^)UD z9itEev@zgtwoe>{8Wk^r`*0ni!hIw7B7eX?2u~p{Ktd!jq62wea-@TZC`QH7{i5T@ zBuqSk=}G5$(;zgygdM{qA+Q9BZ#X8L63q=GLxL?jPR z03+EDZ?6cFf0GOb8ia=j~ zoG+Wi_JrGUiC_gJLQIte_ybF^5=I2f0W0Qu2RaDhX#aR-T!0uRWFuf)6o4z9-X3&3 z!oz{$8y3KqF@2)ROlk}PCt`}oz+x26gG%s=j}S$({J}hXDU2rPdQt*>(Q*n{=!Xd4 z26(a+Vt`PA6#DrGiXeDMJQB>{2FPjgu~>gLIS|X@MtLbv3b+_&hXzBqK!BnNG-+5E zPJyNp9i==5)Gj`pIvZ^~T(lz-f}zH6pgs{{M28q6T+Xtm!ufH0FP5AdAIC)rc@aFA zh!Z7bOQC*3bTpE!pr8Ro(Rh}Bc$8cyVF+T;1SphihhWK(EWA7-5Gx~jhjHRX(Lzr- zjS}NQ;S-|?0a7#sjzW6FD0II7QgmDd(I*V%#dO58M0Pj{!~t-HXCT0q#Q~bQ*&t)E z7=HHA3||6~63>E!+bJBwV&mxugd)b#-d=!)BUw-)&NJNJKOP(<@`N*C;<;~90JX>a z6To6$30lhWlhFVW^K=vVO1 z2L~hjzI&wVB%`+s+UYE6SR}Vzx1eNc+4=>w87uZ7y}cQ)9Fn)!Z?4_k@y$q_{^{-5 ztACzV#(rx4nKe~ibcgESa(Sq`+407OmEX+QtXVVs)S)BQno*XD!{Kxvb$;1;6Cx12 z3vO%+(LCy;uCGTe=C@om%FD~!WVu2hYoFP%;_smCO1Irsk%@_kH_}gMjb(U~8#GS2 z?le;&?gsb5SG14r*r6I2o6YJy^`Z+KXr;b2Rp@GgI(f<@e9ZXS~U0@ily~u4}QHynxU-)J@RPY+3iZL z`zeAF^SYEc{&I~pw?WdGdYzQcNlmiB0-fLNxUYVvbG70QyaT$H|%&< zf-HT|Ybm&(*|tPA4Bpjm`{w&V+#_@|=C}=UjToS+R%T|>Wt!qU6w^E@;E0X7J9g`m7d2lYGi3m15kcXI}sPvC)wSO(t7RaHR{$pB5rNGXHNqPWb)3i@Zr!@I#I5vzc(A9g`JBf>1BB3Idi1RT*W$Z) z{>=9S$+n^Q+Ttq{r{fLW6Yt6sevI;>8&r#V9ruFq9d{Lec%KWPfq(8;nC<-b&Lgis zZ&hmJ=k3bLKMFw(f_6MWzQ*P;Ei@sswVY?w-f@Gw?qyL>*4K_ILBd#HL+&f?+TOMb z38(oI+4FkcyH=j6DHAEvi@D&bj9j8>USf)xsMc}+P5-RhwD9bb6^7RthpYk$&s`*( zPM)?oP=YZ}-nP0Y3Y(W`_ercEYv+E%C(^IG{+hA3)_J+n+MM0TGS=seBQ{$$_!QYqZ%^P{W zrF#0um|uMS?W0D16iQgy;InM!t{bc0-Qc!7TzKY|Z$`1s`(583t?Rn0-r&Fo1vxmk z6(~y%VovOsg!J&&WmLPLXm+xrH$GI#ZbMF79Qkac5r z?|g(4HI2J`?%%!ZGTE1VBqL6+HxS#SPhGrtaar`s0<%JYe^oHXM>)F2r_QT4> zyMc-h@VRewe3<=se220tQ7KwRSpXQ&f;`AuS`cJ zevntu`k!*O(z5I5837C)^}?i}uyA!w!gyy&n3wveXdHcW(F%BOCRrJ>Tt~z=>>9C<=n2pb5>QCb6)0#sY9u0R^r+h4a zyixDS&f;sQn>zHq&gsj~E?k?J@Tlj=gd^-ODLH4;5CAqQ{~UF6bUY5qhVNdCJUNTC zX=du6n|w0D({)37(C#T0P;$TX&8uc@o2SORj}(0bl;3%$ro_;KywN!h@50-?A=!m!y3ll!%Ry8(KxK3w4U#ij~9sgQUS&{kr2A3uZ{{p}by(r>GiQIK> zRzrp4L$vDmu`z_JmsPV_inor)gy-nYK`$C zQE}hRJurCX+P#8Cm7$AVn7KFpYsCla|CV8fOKf+k@A~|v^wm!56>b-LG_&8a zy@GEE&ohkkj)6Ml-P(+jh%|&=@?#Uv>EyIBzC|lW$`H?tfLJ7aTE_ z8p+QS=a^P6+%)yV)iIs-^H8N`Z<*oR%w1Y*wppCevmmAp3=PQ55}urZc&4{yWY%XC zF=m1k&Cc%bp|{ePoT#`4Z>_RugO%-VfwVa-C2L(fF$Iww9t1n$db6HDemb$6|1}wEF{Y((Oerj=})UKif zlDXarmv6PShdy(+v!d#et(rtL?^`yHkl+9%{*u*F&+J}fm%Yhr%~f6iY=T3S_i3w; zlH=~kv_4(nv2bu5>zg99;Y_a%d9%|Z0Gm6~pr=Zwj%`wJH!+#Sud`uXh&c;{Or2CLFBWg1jX+@zTRUvQseDayarA(x$c(|t8ytHjlL>dEt~QlY5V zvPBc5;v`E@*$Vsd!&|;T11?oq;+njI`Q`nsD-lg=t#8I@{pf~=ot$HCt48*x;7ru3 zSMo9MrZ}vANc`O^;v!pSAA4D=RsecR~yJ zk;yu*L*Ci1=k8&>E5=**fc%hl&U>Gn6QTTx_YT?l0&lnN%Cwg{nNgFqZPK!8U)xjL3Bd_(3 zg3ziJy!NRa^fs6hG`)J(I<2YV=}%S2$~{xc=VSiVj}L9FtV-eMbC7i(+bUw!dA&7I zuQX`u@#7s`RCj8|ab*R1AyPl~mfqXM!J@m>K(xGvZo=6EoH*(a>uq#dPde3`Wm;b! z63apPzCUROZg)2vGCYZy{vlHxSVv1A^F2GY9|&h;E=HE$Ug`Ye{=T0!?Kv>^@V=if zn>bw$TR43$k}hg#e`*{^Y&jmH=v5R1-`PSq3EjSH;Ca$nnQ|A=c|2^PtEyue{5%er$0Zt&5zu$`)JO{$06S`$p_<1Ydux-mBdSC zgpX}unyQ0VZD}??SO9=1?Z_Ju*LRC0Zv&g!LS;R*n{OvLZ?|FC0WY{2ue(W8b?V-#RG;U4XH!+&}KsoKRnpZwoC>&9eXPI>vdkdJ-s=!mIoDR>Dh zOPu~;hN1_)&TXAqwoLqSpAI^$WzXN%jPk--(S)^Q$h`zdn;z;fRo3FM?<#xeO@$mv@Bv{yrjN> z+mdu)c$i_wp@cScF^axx^mVPe()G=& zDdP>Mj&e7ayHEZ!v}ZsTc^l9nEuA)yPHq%jh5DiG(DeMtny6Vu^;IkXKaEZ zF+1FRZi~9L%9z#Gkf+ms>KMQIPGS)IH@Syf4zXLVPG`2>;1U4Pkh}qSHZpO8%_Nt#KKw&(St$ z{xjg}l*9L#Q}(dSvHe?ABXy=V_lJ5`hHad>wNvIt?f<*u!^)@-9XGqLFFK7MYUt_M zITkI!93~F2UBapa9XSQNY6iZuT?Bk=LEskTW!f|e%b>hB(7pw=2pd=Lb1I)%>mGWt z`|&&VnO{g{ah6LT8XOcB-P8f#q%@N73r>K?bDL`)S?h>ZdEA10B1aEdXOW$f{6}sb+mZu09pUQutZHUnIWg-jbp>B4v`S2g^Som4B2JrN)Isk3>4_JRy^52?w zd=jMH^fQxmoXj9{fJ9=PtlT<}(wk(9^w-GXK;nDY7WW*CIZvB|Jb7?dYGd^*jjyWNXudm}hm0X7`ZH6+ z%1(~1-W+z1+;=7K-Ty1M{@*P7|I#Buk#rJi`;~wq3f#R)gB-se(B8~TxpVaM`JoTb ztxo5J0>y;c2cfX92q-?xX7Goj$+p3_m5lNjY|}-8UX$eglk-41KzpOhiIS3% zsKyJ};pwpszm}`Pm&v*4vam<#C#txc=l2t#3?+>HtPE+HPd}TrE%c%l?JB7FSBtu9=uJk>aTkC$H~#LugdgRBGcT{u!e{uKcibUJ zZ)fy<6)b&@)Bh!+0LjUD_VnqRn=Z$`4Q>m*y?RKd*ZZO)H7+N?N&fP{0d?C~tO5E%OW zJ4EW=^FJBQ^i*z~eLd~C%DdCk)VTd5BDm(-o1L~L*2ipsgml*VDfO{Z5tf<(c6=K? zl?Vm$**PBp!Mao#q;eR@SY6wN+FWZ<9=Km3 z-49UOj!+i{>QpQiOSQSTw-U*x zMI#e#?WovQac0k*UzV9G7Hzz!Qh8F%4!_MbARE)mGcz;ib|QcbOa)!MptSZ&`k_n9 zvn;Z#{wlVzM`nq~1~Nou3+`09+$pJT{%HHQ-pwO#$@{kc=zJ=iUNXz39T6cQI1 z7qB8CQq=*Jy)(FNf7TzUKLpem+h%KwXcOJ*leb=!45K4_20JIN@43!e-nLL>r+cr5 z02CdcFJI^qpIna`#flZ36jZ_gt79`m&p>NsYwmr!NXZ&}HbZ~gn&cUJ3RhG6JK@3D{ z>$kYfw+Q)LiQ*mUtus)&-RtW}zqd<~=_NLc?fmlWt#SU0{K(HGmM#-mE2@qZ_&2Bq N7DYr}_55S+{{RcDD|!F` literal 0 HcmV?d00001 diff --git a/doc/serv_mem_if.png b/doc/serv_mem_if.png new file mode 100644 index 0000000000000000000000000000000000000000..babcf55e0d5844e9bcef868da0d2d7efd5762308 GIT binary patch literal 10595 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 literal 0 HcmV?d00001 diff --git a/doc/serv_rf_top.png b/doc/serv_rf_top.png new file mode 100644 index 0000000000000000000000000000000000000000..9774ed270766330157b851888564aebc5fecb53e GIT binary patch literal 10030 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 Date: Sun, 16 Aug 2020 00:06:13 +0200 Subject: [PATCH 034/289] Add dependencies for building documentation --- doc/conf.py | 2 ++ doc/requirements.txt | 1 + 2 files changed, 3 insertions(+) create mode 100644 doc/requirements.txt diff --git a/doc/conf.py b/doc/conf.py index dbd08a8..0d96a97 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -51,3 +51,5 @@ html_theme = 'alabaster' # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] + +master_doc = 'index' diff --git a/doc/requirements.txt b/doc/requirements.txt new file mode 100644 index 0000000..5443f82 --- /dev/null +++ b/doc/requirements.txt @@ -0,0 +1 @@ +sphinxcontrib-wavedrom From bf0ec16ef812067152ff5c339e1c233241321e3d Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 16 Aug 2020 23:25:09 +0200 Subject: [PATCH 035/289] Update ALU documentation --- doc/index.rst | 6 +++++- doc/serv_alu_int.png | Bin 37958 -> 50111 bytes 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/index.rst b/doc/index.rst index 3a83165..a277464 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -46,7 +46,11 @@ serv_alu .. image:: serv_alu.png -serv_alu handles alu and shift operations. For shift ops, the data to be shifted resides in bufreg. It also contains the logic for comparisons used by the slt* and conditional branch instructions +serv_alu handles alu and shift operations. The first input operand (A) comes from i_rs1 and the second operand (B) comes from i_rs2 or i_imm depending on the type of operation. The data passes through one or more of the add/sub, shift control or bool logic unit and finally ends up in o_rd to be written to the destination register. The output o_cmp is used for conditional branches to decide whether or not to take the branch. + +The add/sub unit can do additions A+B or subtractions A-B by converting it to A+BÌ…+1. Subtraction mode (i_sub = 1) is also used for the comparisions in the slt* and conditional branch instructions. Finally, it is also used to negate the B operand for left shifts by clearing the A operand (i_shift_op =1). The +1 used in subtraction mode is done by preloading the carry input with 1. Less-than comparisons are handled by converting the expression AZ*l?H|!XM@X{(+)A;4rB0cYTpu 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 literal 37958 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%0DFWU1%uB>*jC&g*|2WC?U>~SpBh2fKFm2t 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 Date: Mon, 17 Aug 2020 10:37:41 +0200 Subject: [PATCH 036/289] Update serv_bufreg documentation --- doc/index.rst | 4 +++- doc/serv_bufreg_int.png | Bin 0 -> 22781 bytes 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 doc/serv_bufreg_int.png diff --git a/doc/index.rst b/doc/index.rst index a277464..951dddd 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -59,7 +59,9 @@ serv_bufreg .. image:: serv_bufreg.png -For two-stage operations, serv_bufreg holds data between stages. This data can be the effective address for branches or load/stores or data to be shifted for shift ops. It has a serial output for streaming out results during stage two and a parallel output that forms the dbus address. serv_bufreg also keeps track of the two lsb when calculating adresses. This is used to check for alignment errors +For two-stage operations, serv_bufreg holds data between stages. This data can be the effective address for branches or load/stores or data to be shifted for shift ops. It has a serial output for streaming out results during stage two and a parallel output that forms the dbus address. serv_bufreg also keeps track of the two lsb when calculating adresses. This is used to check for alignment errors. In order to support these different modes, the input to the shift register can come from rs1, the immediate (imm), rs1+imm or looped back from the shift register output. The latter is used for shift operations. For some operations, the LSB of the immediate is cleared before written to the shift register. bufreg also latches and exposes the two LSB bits of the data written to the shift register. These are used to check data/address alignment issues early. + +.. image:: serv_bufreg_int.png serv_csr ^^^^^^^^ diff --git a/doc/serv_bufreg_int.png b/doc/serv_bufreg_int.png new file mode 100644 index 0000000000000000000000000000000000000000..972aac110fccb10c6681f7fdd8931d06f2b172ae GIT binary patch literal 22781 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 QD1_|U^|L{?zTKsN19wPpPyhe` literal 0 HcmV?d00001 From 915cdf793395ab48cc52c0225660eb6eeff41133 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 17 Aug 2020 13:00:29 +0200 Subject: [PATCH 037/289] Move RF address decoding to serv_immdec --- rtl/serv_decode.v | 11 ++--------- rtl/serv_immdec.v | 12 ++++++++++-- rtl/serv_rf_if.v | 6 ++++-- rtl/serv_top.v | 12 ++++++------ 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 1e3a637..14bc21d 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -33,10 +33,6 @@ module serv_decode output wire o_alu_sh_signed, output wire o_alu_sh_right, output wire [3:0] o_alu_rd_sel, - //To RF - output reg [4:0] o_rf_rd_addr, - output reg [4:0] o_rf_rs1_addr, - output reg [4:0] o_rf_rs2_addr, //To mem IF output wire o_mem_signed, output wire o_mem_word, @@ -115,12 +111,12 @@ module serv_decode //False for STORE, BRANCH, MISC-MEM assign o_rd_op = (opcode[2] | (!opcode[2] & opcode[4] & opcode[0]) | - (!opcode[2] & !opcode[3] & !opcode[0])) & (|o_rf_rd_addr); + (!opcode[2] & !opcode[3] & !opcode[0])); //True for sub, sll*, b*, slt* //False for add*, sr* assign o_alu_sub = (!funct3[2] & (funct3[0] | (opcode[3] & imm30))) | funct3[1] | opcode[4]; - + /* 300 0_000 mstatus RWSC @@ -183,9 +179,6 @@ module serv_decode assign o_alu_rd_sel[3] = (funct3[2] & !(funct3[1:0] == 2'b01)); //Bool always @(posedge clk) begin if (i_wb_en) begin - o_rf_rd_addr <= i_wb_rdt[11:7]; - o_rf_rs1_addr <= i_wb_rdt[19:15]; - o_rf_rs2_addr <= i_wb_rdt[24:20]; funct3 <= i_wb_rdt[14:12]; imm30 <= i_wb_rdt[30]; opcode <= i_wb_rdt[6:2]; diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v index 974967d..1a7c5b6 100644 --- a/rtl/serv_immdec.v +++ b/rtl/serv_immdec.v @@ -2,7 +2,7 @@ module serv_immdec ( input wire i_clk, - //Input + //Input input wire i_cnt_en, input wire i_csr_imm_en, output wire o_csr_imm, @@ -10,6 +10,10 @@ module serv_immdec input wire i_wb_en, input wire i_cnt_done, input wire [3:0] i_ctrl, + //To RF + output reg [4:0] o_rf_rd_addr, + output reg [4:0] o_rf_rs1_addr, + output reg [4:0] o_rf_rs2_addr, output wire o_imm); reg signbit; @@ -32,6 +36,10 @@ module serv_immdec imm30_25 <= i_wb_rdt[30:25]; imm24_20 <= i_wb_rdt[24:20]; imm11_7 <= i_wb_rdt[11:7]; + + o_rf_rd_addr <= i_wb_rdt[11:7]; + o_rf_rs1_addr <= i_wb_rdt[19:15]; + o_rf_rs2_addr <= i_wb_rdt[24:20]; end if (i_cnt_en) begin imm19_12_20 <= {i_ctrl[3] ? signbit : imm24_20[0], imm19_12_20[8:1]}; @@ -40,5 +48,5 @@ module serv_immdec imm24_20 <= {imm30_25[0], imm24_20[4:1]}; imm11_7 <= {imm30_25[0], imm11_7[4:1]}; end - end + end endmodule diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index b26e75f..2160150 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -50,6 +50,8 @@ module serv_rf_if ********** Write side *********** */ + wire rd_wen = i_rd_wen & (|i_rd_waddr); + generate if (WITH_CSR) begin wire rd = (i_ctrl_rd ) | @@ -71,7 +73,7 @@ module serv_rf_if assign o_wreg0 = i_trap ? {4'b1000,CSR_MTVAL} : {1'b0,i_rd_waddr}; assign o_wreg1 = i_trap ? {4'b1000,CSR_MEPC} : {4'b1000,i_csr_addr}; - assign o_wen0 = i_trap | i_rd_wen; + assign o_wen0 = i_trap | rd_wen; assign o_wen1 = i_trap | i_csr_en; /* @@ -105,7 +107,7 @@ module serv_rf_if assign o_wreg0 = i_rd_waddr; assign o_wreg1 = 5'd0; - assign o_wen0 =i_rd_wen; + assign o_wen0 = rd_wen; assign o_wen1 = 1'b0; /* diff --git a/rtl/serv_top.v b/rtl/serv_top.v index e7fc9c7..57b0642 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -233,10 +233,6 @@ module serv_top .o_alu_sh_signed (alu_sh_signed), .o_alu_sh_right (alu_sh_right), .o_alu_rd_sel (alu_rd_sel), - //To RF - .o_rf_rd_addr (rd_addr), - .o_rf_rs1_addr (rs1_addr), - .o_rf_rs2_addr (rs2_addr), //To mem IF .o_mem_cmd (o_dbus_we), .o_mem_signed (mem_signed), @@ -266,6 +262,10 @@ module serv_top .i_wb_en (o_ibus_cyc & i_ibus_ack), .i_ctrl (immdec_ctrl), .i_cnt_done (cnt_done), + //To RF + .o_rf_rd_addr (rd_addr), + .o_rf_rs1_addr (rs1_addr), + .o_rf_rs2_addr (rs2_addr), .o_imm (imm)); serv_bufreg bufreg @@ -462,10 +462,10 @@ module serv_top rvfi_rd_wdata <= {o_wdata0,rvfi_rd_wdata[31:1]}; if (cnt_done & ctrl_pc_en) begin rvfi_pc_rdata <= pc; - if (!rd_en) + if (!(rd_en & (|rd_addr))) begin rvfi_rd_addr <= 5'd0; - if (!rd_en | !(|rd_addr)) rvfi_rd_wdata <= 32'd0; + end end rvfi_trap <= trap; if (rvfi_valid) begin From b405c5b78af752dcbae742666b99f541cd968fe0 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 25 Aug 2020 19:04:45 +0200 Subject: [PATCH 038/289] Add serv_csr block diagram --- doc/index.rst | 2 ++ doc/serv_csr_int.png | Bin 0 -> 67258 bytes 2 files changed, 2 insertions(+) create mode 100644 doc/serv_csr_int.png diff --git a/doc/index.rst b/doc/index.rst index 951dddd..fbfb4b9 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -70,6 +70,8 @@ serv_csr serv_csr handles CSR accesses and all status related to (timer) interrupts. Out of the eight CSRs supported by SERV, only four resides in serv_csr (mstatus, mie, mcause and mip) and for those registers, SERV only implement the bits required for ecall, ebreak, misalignment and timer interrupts. The four remaining CSRs are commonly stored in the RF +.. image:: serv_csr_int.png + serv_ctrl ^^^^^^^^^ diff --git a/doc/serv_csr_int.png b/doc/serv_csr_int.png new file mode 100644 index 0000000000000000000000000000000000000000..dad320bf20ab046d747e2b175d1b5bcec7a131d0 GIT binary patch literal 67258 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 Date: Tue, 25 Aug 2020 22:32:00 -0700 Subject: [PATCH 039/289] Update README.md (#35) Add link to user manual. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7c68ab3..81fc244 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ SERV is an award-winning bit-serial RISC-V core If you want to know more about SERV, what a bit-serial CPU is and what it's good for, I recommend starting out by watching the movies [introduction to SERV](https://diode.zone/videos/watch/0230a518-e207-4cf6-b5e2-69cc09411013) and the [presentation from the Zürich 2019 RISC-V workshop](https://www.youtube.com/watch?v=xjIxORBRaeQ) +There's also an official [SERV user manual](https://serv.readthedocs.io/en/latest/#) with fancy block diagrams and an in-depth description of how some things work. + ## Prerequisites Create a directory to keep all the different parts of the project together. We From fa6c420b108ccfc79f64699aaa1c1d1c5121c683 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 25 Aug 2020 22:28:12 +0200 Subject: [PATCH 040/289] Remove redundant mstatus register --- rtl/serv_csr.v | 6 +----- rtl/serv_top.v | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/rtl/serv_csr.v b/rtl/serv_csr.v index ebf4919..b827958 100644 --- a/rtl/serv_csr.v +++ b/rtl/serv_csr.v @@ -4,7 +4,6 @@ module serv_csr input wire i_clk, input wire i_en, input wire i_cnt0to3, - input wire i_cnt2, input wire i_cnt3, input wire i_cnt7, input wire i_cnt_done, @@ -35,7 +34,6 @@ module serv_csr CSR_SOURCE_SET = 2'b10, CSR_SOURCE_CLR = 2'b11; - reg mstatus; reg mstatus_mie; reg mstatus_mpie; reg mie_mtie; @@ -55,7 +53,7 @@ module serv_csr (i_csr_source == CSR_SOURCE_CSR) ? csr_out : 1'bx; - assign csr_out = (i_mstatus_en & i_en & mstatus) | + assign csr_out = (i_mstatus_en & mstatus_mie & i_cnt3) | i_rf_csr_out | (i_mcause_en & i_en & mcause); @@ -83,8 +81,6 @@ module serv_csr if (i_mie_en & i_cnt7) mie_mtie <= csr_in; - mstatus <= i_cnt2 & mstatus_mie; - timer_irq_r <= timer_irq; if (i_mret) begin diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 57b0642..576e425 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -419,7 +419,6 @@ module serv_top .i_clk (clk), .i_en (cnt_en), .i_cnt0to3 (cnt0to3), - .i_cnt2 (cnt2), .i_cnt3 (cnt3), .i_cnt7 (cnt7), .i_cnt_done (cnt_done), From 3aa1a2c6e5142aa9c63ed907500f26a85d872daf Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 25 Aug 2020 22:51:31 +0200 Subject: [PATCH 041/289] Simplify and document mstatus/mcause assignments --- rtl/serv_csr.v | 68 +++++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/rtl/serv_csr.v b/rtl/serv_csr.v index b827958..df9f249 100644 --- a/rtl/serv_csr.v +++ b/rtl/serv_csr.v @@ -71,38 +71,56 @@ module serv_csr always @(posedge i_clk) begin - /* - Note: To save resources mstatus_mpie (mstatus bit 7) is not - readable or writable from sw - */ - if (i_mstatus_en & i_cnt3) - mstatus_mie <= csr_in; - if (i_mie_en & i_cnt7) mie_mtie <= csr_in; timer_irq_r <= timer_irq; - if (i_mret) begin - mstatus_mie <= mstatus_mpie; - end + /* + The mie bit in mstatus gets updated under three conditions - if (i_trap_taken) begin - mstatus_mpie <= mstatus_mie; - mstatus_mie <= 1'b0; - mcause31 <= i_pending_irq; - mcause3_0 <= i_pending_irq ? 4'd7 : - i_e_op ? {!i_ebreak, 3'b011} : - i_mem_misalign ? {2'b01, i_mem_cmd, 1'b0} : - 4'd0; - end + When a trap is taken, the bit is cleared + During an mret instruction, the bit is restored from mpie + During a mstatus CSR access instruction it's assigned when + bit 3 gets updated - if (i_mcause_en & i_en) begin - if (i_cnt0to3) - mcause3_0 <= {csr_in, mcause3_0[3:1]}; - if (i_cnt_done) - mcause31 <= csr_in; - end + These conditions are all mutually exclusibe + */ + if (i_trap_taken | i_mstatus_en & i_cnt3 | i_mret) + mstatus_mie <= !i_trap_taken & (i_mret ? mstatus_mpie : csr_in); + + /* + Note: To save resources mstatus_mpie (mstatus bit 7) is not + readable or writable from sw + */ + if (i_trap_taken) + mstatus_mpie <= mstatus_mie; + + /* + The four lowest bits in mcause hold the exception code + + These bits get updated under three conditions + + During an mcause CSR access function, they are assigned when + bits 0 to 3 gets updated + + During an external interrupt the exception code is set to + 7, since SERV only support timer interrupts + + During an exception, the exception code is assigned to indicate + if it was caused by an ebreak instruction (3), + ecall instruction (11), misaligned load (4), misaligned store (6) + or misaligned jump (0) + */ + if (i_mcause_en & i_en & i_cnt0to3 | i_trap_taken) + mcause3_0 <= !i_trap_taken ? {csr_in, mcause3_0[3:1]} : + i_pending_irq ? 4'd7 : + i_e_op ? {!i_ebreak, 3'b011} : + i_mem_misalign ? {2'b01, i_mem_cmd, 1'b0} : + 4'd0; + + if (i_mcause_en & i_cnt_done | i_trap_taken) + mcause31 <= i_trap_taken ? i_pending_irq : csr_in; end endmodule From 25e86fdd3c551b2edf810b84befc6babbd70429c Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 26 Aug 2020 16:44:58 +0200 Subject: [PATCH 042/289] Small optimization of instruction fetching logic --- rtl/serv_ctrl.v | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/rtl/serv_ctrl.v b/rtl/serv_ctrl.v index f5899a5..108fd2a 100644 --- a/rtl/serv_ctrl.v +++ b/rtl/serv_ctrl.v @@ -72,16 +72,11 @@ module serv_ctrl pc_plus_4_cy_r <= i_pc_en & pc_plus_4_cy; pc_plus_offset_cy_r <= i_pc_en & pc_plus_offset_cy; - if (i_pc_en) begin - en_pc_r <= 1'b1; - o_ibus_adr <= {new_pc, o_ibus_adr[31:1]}; - end else if (o_ibus_cyc & i_ibus_ack) - en_pc_r <= 1'b0; + if (o_ibus_cyc & i_ibus_ack | i_pc_en | i_rst) + en_pc_r <= i_pc_en | i_rst; - if (i_rst) begin - en_pc_r <= 1'b1; - o_ibus_adr <= RESET_PC; + if (i_pc_en | i_rst) begin + o_ibus_adr <= i_rst ? RESET_PC : {new_pc, o_ibus_adr[31:1]}; end end - endmodule From 0d5bc0c3c13bf33fa748f5f244699b3c2b3a212f Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 26 Aug 2020 16:45:22 +0200 Subject: [PATCH 043/289] Document serv_ctrl --- doc/index.rst | 9 ++++++++- doc/serv_ctrl_int.png | Bin 0 -> 48574 bytes 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 doc/serv_ctrl_int.png diff --git a/doc/index.rst b/doc/index.rst index fbfb4b9..db44beb 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -77,7 +77,14 @@ serv_ctrl .. image:: serv_ctrl.png -serv_ctrl keeps track of the current PC and contains the logic needed to calculate the next PC. +serv_ctrl keeps track of the current PC and contains the logic needed to calculate the next PC. The PC is stored in shift register with a parellel output connected to the instruction bus. New instructions are fetched by asserting o_ibus_cyc until there is a response on i_ibus_ack. Instruction fetches occur when the reset signal is deasserted, which is what gets SERV started, or when the PC has finished updating its value. + +The new PC can come from three sources. For normal instructions, it is incremented by four, which is the next 32-bit address. Jumps can be absolute or relative to the current PC. Absolute jumps are precalculated in serv_bufreg and written directly to the PC. PC relative jumps have the offset part precalculated in serv_bufreg which gets added to the current PC before storing as the new PC. The third source for the new PC comes from the CSR registers when entering or returning traps. + +Some operations (LUI, AUIPC, jumps, entering or returning from traps) also update the destination register through o_rd. In the case of misaligned instruction traps, the invalid PC is written to o_bad_pc to be passed to mtval. + +.. image:: serv_ctrl_int.png + serv_decode ^^^^^^^^^^^ diff --git a/doc/serv_ctrl_int.png b/doc/serv_ctrl_int.png new file mode 100644 index 0000000000000000000000000000000000000000..292145e8a19d88a819e3e9a0a2db4619e7ff898b GIT binary patch literal 48574 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 literal 0 HcmV?d00001 From 9959cb37434ac5bf6dca66b4e04758b32762fce4 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 27 Aug 2020 21:03:52 +0200 Subject: [PATCH 044/289] Add schematic for serv_decode --- doc/index.rst | 4 +++- doc/serv_dataflow.png | Bin 33811 -> 38897 bytes doc/serv_decode.png | Bin 7469 -> 7358 bytes doc/serv_decode_int.png | Bin 0 -> 78694 bytes 4 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 doc/serv_decode_int.png diff --git a/doc/index.rst b/doc/index.rst index db44beb..e393a36 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -91,7 +91,9 @@ serv_decode .. image:: serv_decode.png -serv_decode is responsible for decoding the operation word coming from ibus into a set of control signals that are used internally in SERV. It also assembles the 32-bit immediate used by some instructions. During the life cycle of an operation all control signals (except one) are static and the immediate is streamed out during the first run stage +serv_decode is responsible for decoding the operation word coming from ibus into a set of control signals that are used internally in SERV. + +.. image:: serv_decode_int.png serv_mem_if ^^^^^^^^^^^ diff --git a/doc/serv_dataflow.png b/doc/serv_dataflow.png index df802f12ddf0166bc09c94839ce51e0ff606497e..a7acae3e4b01cb9fe05bb5143f966331ed32e980 100644 GIT binary patch literal 38897 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

2(boGzQQ6S8}uVJ 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 diff --git a/doc/serv_decode.png b/doc/serv_decode.png index 1449e7ecf2a2010e8236e9f8b76b5c9ef98aa984..596073fd61ea039783d8fed7f2231363c0ac7520 100644 GIT binary patch literal 7358 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 N7DYr}_55S+{{RcDD|!F` diff --git a/doc/serv_decode_int.png b/doc/serv_decode_int.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf1e79a118d4d5e40f5b87314775eab640119d9 GIT binary patch literal 78694 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 Date: Mon, 28 Sep 2020 15:31:31 -0400 Subject: [PATCH 045/289] serv on iCEstick HX1K FPGA Evaluation Board (#34) * Lattice iCEstick Evaluation Board PCF File * Added Lattice iCEstick Evaluation Board to servant fusesoc config * Fixed icestick pcf to use LED as q since default memfile is blinky * Updated README.md with iCEstick evaluation board details --- README.md | 8 ++++++++ data/icestick.pcf | 8 ++++++++ servant.core | 19 ++++++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 data/icestick.pcf diff --git a/README.md b/README.md index 81fc244..c407bba 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,14 @@ Pin 61 is used for UART output with 115200 baud rate. This pin is connected to a fusesoc run --target=alhambra servant iceprog -d i:0x0403:0x6010:0 build/servant_1.0.1/alhambra-icestorm/servant_1.0.1.bin +### iCEstick + +Pin 95 is used as the GPIO output which is connected to the board's green LED. Due to this board's limited Embedded BRAM, programs with a maximum of 7168 bytes can be loaded. The default program for this board is blinky.hex. + + cd $SERV/workspace + fusesoc run --target=icestick servant + iceprog build/servant_1.0.2/icestick-icestorm/servant_1.0.2.bin + ## Other targets The above targets are run on the servant SoC, but there are some targets defined for the CPU itself. Verilator can be run in lint mode to check for design problems by running diff --git a/data/icestick.pcf b/data/icestick.pcf new file mode 100644 index 0000000..e99e6a2 --- /dev/null +++ b/data/icestick.pcf @@ -0,0 +1,8 @@ +# 12 MHz clock input +set_io i_clk 21 + +# Onboard LED (Green) +set_io q 95 + +# UART TX +#set_io q 62 diff --git a/servant.core b/servant.core index df41dba..d28f6c0 100644 --- a/servant.core +++ b/servant.core @@ -46,6 +46,7 @@ filesets: tinyfpga_bx: {files: [data/tinyfpga_bx.pcf : {file_type : PCF}]} icebreaker : {files: [data/icebreaker.pcf : {file_type : PCF}]} alhambra : {files: [data/alhambra.pcf : {file_type : PCF}]} + icestick : {files: [data/icestick.pcf : {file_type : PCF}]} lx9_microboard: files: @@ -132,7 +133,6 @@ targets: speed : -2 toplevel : servant_lx9 - tinyfpga_bx: default_tool : icestorm filesets : [mem_files, soc, service, tinyfpga_bx] @@ -261,6 +261,17 @@ targets: vivado: {part : xczu7ev-ffvc1156-2-e} toplevel : servus + icestick: + default_tool : icestorm + filesets : [mem_files, soc, service, icestick] + generate: [icestick_pll] + parameters : [memfile=blinky.hex, memsize=7168, PLL=ICE40_CORE] + tools: + icestorm: + nextpnr_options : [--hx1k, --package, tq144, --freq, 32] + pnr: next + toplevel : service + parameters: PLL: datatype : str @@ -334,3 +345,9 @@ generate: parameters: freq_in : 12 freq_out : 32 + + icestick_pll: + generator: icepll + parameters: + freq_in : 12 + freq_out : 32 From f10cb89ae4c8c01bc6988aef0d09a029d34e6463 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 29 Sep 2020 14:12:57 +0200 Subject: [PATCH 046/289] Fix double-defined result_lt wire --- rtl/serv_alu.v | 1 - 1 file changed, 1 deletion(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index 30f033b..e6bc3cc 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -27,7 +27,6 @@ module serv_alu wire result_add; wire result_eq; - wire result_lt; wire result_sh; reg result_lt_r; From ee6a86705d19aff37c96a56c21ce09625ac8d4e5 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 29 Sep 2020 17:52:02 +0200 Subject: [PATCH 047/289] Set size of WITH_CSR to avoid Quartus warning --- rtl/serv_state.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index ba80f7c..c776949 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -41,7 +41,7 @@ module serv_state output reg o_cnt_done, output wire o_bufreg_hold); - parameter WITH_CSR = 1; + parameter [0:0] WITH_CSR = 1; wire cnt4; From ed9b774ebaea183c703dee79c0e5889f98e7c624 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 29 Sep 2020 17:57:26 +0200 Subject: [PATCH 048/289] Add support for DE0 Nano --- README.md | 7 +++++++ data/de0_nano.sdc | 8 ++++++++ data/de0_nano.tcl | 11 +++++++++++ servant.core | 17 +++++++++++++++++ servant/servive.v | 31 +++++++++++++++++++++++++++++++ servant/servive_clock_gen.v | 34 ++++++++++++++++++++++++++++++++++ 6 files changed, 108 insertions(+) create mode 100644 data/de0_nano.sdc create mode 100644 data/de0_nano.tcl create mode 100644 servant/servive.v create mode 100644 servant/servive_clock_gen.v diff --git a/README.md b/README.md index c407bba..e29d3b2 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,13 @@ blinky.hex change D10 to H5 (led[4]) in data/arty_a7_35t.xdc). cd $SERV/workspace fusesoc run --target=arty_a7_35t servant +### DE0 Nano + +FPGA Pin D11 (Connector JP1, pin 38) is used for UART output with 57600 baud rate. DE0 Nano needs an external 3.3V UART to connect to this pin + + cd $SERV/workspace + fusesoc run --target=de0_nano servant + ### Saanlima Pipistrello (Spartan6 LX45) Pin A10 (usb_data<1>) is used for UART output with 57600 baud rate (to use diff --git a/data/de0_nano.sdc b/data/de0_nano.sdc new file mode 100644 index 0000000..7a5fcef --- /dev/null +++ b/data/de0_nano.sdc @@ -0,0 +1,8 @@ +# Main system clock (50 Mhz) +create_clock -name "clk" -period 20.000ns [get_ports {i_clk}] + +# Automatically constrain PLL and other generated clocks +derive_pll_clocks -create_base_clocks + +# Automatically calculate clock uncertainty to jitter and other effects. +derive_clock_uncertainty diff --git a/data/de0_nano.tcl b/data/de0_nano.tcl new file mode 100644 index 0000000..0db6ad3 --- /dev/null +++ b/data/de0_nano.tcl @@ -0,0 +1,11 @@ +set_location_assignment PIN_R8 -to i_clk +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to i_clk + +set_location_assignment PIN_A15 -to q +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to q + +set_location_assignment PIN_D11 -to uart_txd +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to uart_txd + +set_location_assignment PIN_J15 -to i_rst_n +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to i_rst_n diff --git a/servant.core b/servant.core index d28f6c0..d927149 100644 --- a/servant.core +++ b/servant.core @@ -43,6 +43,13 @@ filesets: - servant/servclone10_clock_gen.v : {file_type : verilogSource} - servant/servclone10.v : {file_type : verilogSource} + de0_nano: + files: + - data/de0_nano.sdc : {file_type : SDC} + - data/de0_nano.tcl : {file_type : tclSource} + - servant/servive_clock_gen.v : {file_type : verilogSource} + - servant/servive.v : {file_type : verilogSource} + tinyfpga_bx: {files: [data/tinyfpga_bx.pcf : {file_type : PCF}]} icebreaker : {files: [data/icebreaker.pcf : {file_type : PCF}]} alhambra : {files: [data/alhambra.pcf : {file_type : PCF}]} @@ -109,6 +116,16 @@ targets: device : 10CL025YU256C8G toplevel : servclone10 + de0_nano: + default_tool : quartus + filesets : [mem_files, soc, de0_nano] + parameters : [memfile, memsize] + tools: + quartus: + family : Cyclone IV E + device : EP4CE22F17C6 + toplevel: servive + icebreaker: default_tool : icestorm filesets : [mem_files, soc, service, icebreaker] diff --git a/servant/servive.v b/servant/servive.v new file mode 100644 index 0000000..829eb30 --- /dev/null +++ b/servant/servive.v @@ -0,0 +1,31 @@ +`default_nettype none +module servive +( + input wire i_clk, + input wire i_rst_n, + output wire q, + output wire uart_txd); + + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 8192; + + wire wb_clk; + wire wb_rst; + + assign uart_txd = q; + + servive_clock_gen clock_gen + (.i_clk (i_clk), + .i_rst (!i_rst_n), + .o_clk (wb_clk), + .o_rst (wb_rst)); + + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (wb_clk), + .wb_rst (wb_rst), + .q (q)); + +endmodule diff --git a/servant/servive_clock_gen.v b/servant/servive_clock_gen.v new file mode 100644 index 0000000..716e34d --- /dev/null +++ b/servant/servive_clock_gen.v @@ -0,0 +1,34 @@ +`default_nettype none +module servive_clock_gen + (input wire i_clk, + input wire i_rst, + output wire o_clk, + output wire o_rst); + + wire locked; + reg [9:0] r; + + assign o_rst = r[9]; + + always @(posedge o_clk) + if (locked) + r <= {r[8:0],1'b0}; + else + r <= 10'b1111111111; + + wire [5:0] clk; + + assign o_clk = clk[0]; + + altpll + #(.operation_mode ("NORMAL"), + .clk0_divide_by (25), + .clk0_multiply_by (8), + .inclk0_input_frequency (20000)) + pll + (.areset (i_rst), + .inclk ({1'b0, i_clk}), + .clk (clk), + .locked (locked)); + +endmodule From 7192fb23e0fd485cdb75e4451282717207b3a081 Mon Sep 17 00:00:00 2001 From: Franck Jullien Date: Wed, 30 Sep 2020 15:24:12 +0200 Subject: [PATCH 049/289] servant: add AC701 board support --- data/ac701.xdc | 11 ++++++++ servant.core | 14 ++++++++++ servant/servant_ac701.v | 62 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 data/ac701.xdc create mode 100644 servant/servant_ac701.v diff --git a/data/ac701.xdc b/data/ac701.xdc new file mode 100644 index 0000000..ec0e813 --- /dev/null +++ b/data/ac701.xdc @@ -0,0 +1,11 @@ +## Clock signal +set_property IOSTANDARD DIFF_SSTL15 [get_ports sys_clk_p] +set_property PACKAGE_PIN P3 [get_ports sys_clk_n] +set_property PACKAGE_PIN R3 [get_ports sys_clk_p] +set_property IOSTANDARD DIFF_SSTL15 [get_ports sys_clk_n] + +create_clock -period 5.000 -name clk_p [get_nets sys_clk_p] + +## UART TX +set_property PACKAGE_PIN U19 [get_ports q] +set_property IOSTANDARD LVCMOS18 [get_ports q] diff --git a/servant.core b/servant.core index d927149..5d97f38 100644 --- a/servant.core +++ b/servant.core @@ -72,6 +72,12 @@ filesets: - servant/servix.v : {file_type : verilogSource} - data/arty_a7_35t.xdc : {file_type : xdc} + ac701: + files: + - servant/servix.v : {file_type : verilogSource} + - servant/servant_ac701.v : {file_type : verilogSource} + - data/ac701.xdc : {file_type : xdc} + orangecrab: files: - data/orangecrab_r02.lpf : {file_type : LPF} @@ -197,6 +203,14 @@ targets: vivado: {part : xc7a35ticsg324-1L} toplevel : servix + ac701: + default_tool: vivado + filesets : [mem_files, soc, ac701] + parameters : [memfile, memsize, frequency=32] + tools: + vivado: {part : xc7a200t-fbg676-2} + toplevel : servant_ac701 + orangecrab_r0.2: default_tool: trellis description : OrangeCrab R0.2 diff --git a/servant/servant_ac701.v b/servant/servant_ac701.v new file mode 100644 index 0000000..9f8f6db --- /dev/null +++ b/servant/servant_ac701.v @@ -0,0 +1,62 @@ +`default_nettype none +module servant_ac701 +( + input wire sys_clk_p, + input wire sys_clk_n, + input wire btn, + output wire q); + + parameter frequency = 16; + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 8192; + parameter PLL = "NONE"; + + wire wb_clk; + reg wb_rst; + wire clk; + wire clkfb; + wire locked; + reg locked_r; + + IBUFDS ibufds + ( + .I (sys_clk_p), + .IB (sys_clk_n), + .O (clk) + ); + + PLLE2_BASE + #(.BANDWIDTH("OPTIMIZED"), + .CLKFBOUT_MULT(8), + .CLKIN1_PERIOD(5.0), //200MHz + .CLKOUT0_DIVIDE((frequency == 32) ? 50 : 100), + .DIVCLK_DIVIDE(1), + .STARTUP_WAIT("FALSE")) + PLLE2_BASE_inst + (.CLKOUT0(wb_clk), + .CLKOUT1(), + .CLKOUT2(), + .CLKOUT3(), + .CLKOUT4(), + .CLKOUT5(), + .CLKFBOUT(clkfb), + .LOCKED(locked), + .CLKIN1(clk), + .PWRDWN(1'b0), + .RST(1'b0), + .CLKFBIN(clkfb)); + + always @(posedge wb_clk) begin + locked_r <= locked; + wb_rst <= !locked_r; + end + + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (wb_clk), + .wb_rst (wb_rst), + .q (q)); + +endmodule From 9beea931a7cccad3f2c2f84405a6fce83696e334 Mon Sep 17 00:00:00 2001 From: Qingyao Sun Date: Fri, 2 Oct 2020 12:15:25 +0800 Subject: [PATCH 050/289] servant: add iCESugar board support --- data/icesugar.pcf | 5 +++++ servant.core | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 data/icesugar.pcf diff --git a/data/icesugar.pcf b/data/icesugar.pcf new file mode 100644 index 0000000..365ce47 --- /dev/null +++ b/data/icesugar.pcf @@ -0,0 +1,5 @@ +# 12 MHz clock +set_io i_clk 35 + +# RS232 +set_io q 6 diff --git a/servant.core b/servant.core index 5d97f38..7896a3a 100644 --- a/servant.core +++ b/servant.core @@ -52,6 +52,7 @@ filesets: tinyfpga_bx: {files: [data/tinyfpga_bx.pcf : {file_type : PCF}]} icebreaker : {files: [data/icebreaker.pcf : {file_type : PCF}]} + icesugar : {files: [data/icesugar.pcf : {file_type : PCF}]} alhambra : {files: [data/alhambra.pcf : {file_type : PCF}]} icestick : {files: [data/icestick.pcf : {file_type : PCF}]} @@ -143,6 +144,18 @@ targets: pnr: next toplevel : service + icesugar: + default_tool : icestorm + description : iCE40UP5K Development Board by MuseLab + filesets : [mem_files, soc, service, icesugar] + generate: [icesugar_pll] + parameters : [memfile, memsize, PLL=ICE40_PAD] + tools: + icestorm: + nextpnr_options: [--up5k, --package, sg48, --freq, 32] + pnr: next + toplevel : service + lx9_microboard: default_tool: ise description : LX9 Microboard @@ -365,6 +378,12 @@ generate: parameters: freq_out : 16 + icesugar_pll: + generator: icepll + parameters: + freq_in : 12 + freq_out : 32 + tinyfpga_bx_pll: generator: icepll parameters: From 215099dd3d3abc55bf169f9ee592676da1722cb2 Mon Sep 17 00:00:00 2001 From: Qingyao Sun Date: Fri, 2 Oct 2020 18:01:39 +0800 Subject: [PATCH 051/289] Add instructions for iCESugar to README.md --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e29d3b2..3c139f9 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,8 @@ Some targets also depend on functionality in the FuseSoC base library (fusesoc-c Now we're ready to build. Note, for all the cases below, it's possible to run with `--memfile=$SERV/sw/blinky.hex` (or any other suitable program) as the last argument to preload the LED blink example -instead of hello world. +instead of hello world. If the `--memfile` option doesn't work, try upgrading +FuseSOC with `pip install --upgrade fusesoc`. ### TinyFPGA BX @@ -103,6 +104,15 @@ Pin 9 is used for UART output with 57600 baud rate. cd $SERV/workspace fusesoc run --target=icebreaker servant +### iCESugar + +Pin 6 is used for UART output with 115200 baud rate. Thanks to the onboard +debugger, you can just connect the USB Type-C connector to the PC, and a +serial console will show up. + + cd $SERV/workspace + fusesoc run --target=icesugar servant + ### OrangeCrab R0.2 Pin D1 is used for UART output with 115200 baud rate. From 8faf0cf33bd2b7f5c7f51589647e7091b884f6a9 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 27 Aug 2020 21:09:49 +0200 Subject: [PATCH 052/289] Simplify and explain csr_imm_en --- rtl/serv_decode.v | 2 +- rtl/serv_immdec.v | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 14bc21d..30d80ac 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -144,7 +144,7 @@ module serv_decode assign o_csr_source = funct3[1:0]; assign o_csr_d_sel = funct3[2]; - assign o_csr_imm_en = csr_op & o_csr_d_sel; + assign o_csr_imm_en = opcode[4] & opcode[2] & funct3[2]; assign o_csr_addr = (op26 & !op20) ? CSR_MSCRATCH : (op26 & !op21) ? CSR_MEPC : diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v index 1a7c5b6..bdc1f1c 100644 --- a/rtl/serv_immdec.v +++ b/rtl/serv_immdec.v @@ -30,6 +30,7 @@ module serv_immdec always @(posedge i_clk) begin if (i_wb_en) begin + /* CSR immediates are always zero-extended, hence clear the signbit */ signbit <= i_wb_rdt[31] & !i_csr_imm_en; imm19_12_20 <= {i_wb_rdt[19:12],i_wb_rdt[20]}; imm7 <= i_wb_rdt[7]; From 3f81f07db3c6a0d6387e662c68f27f180fbf51f7 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 28 Aug 2020 12:52:28 +0200 Subject: [PATCH 053/289] Clarify immdec_ctrl[1] --- rtl/serv_decode.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 30d80ac..6c8f1b1 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -167,8 +167,8 @@ module serv_decode //True for S (STORE) or B (BRANCH) type instructions //False for J type instructions assign o_immdec_ctrl[0] = opcode[3:0] == 4'b1000; - //True for OP-IMM, LOAD, STORE, JALR - //False for LUI, AUIPC, JAL + //True for OP-IMM, LOAD, STORE, JALR (I S) + //False for LUI, AUIPC, JAL (U J) assign o_immdec_ctrl[1] = (opcode[1:0] == 2'b00) | (opcode[2:1] == 2'b00); assign o_immdec_ctrl[2] = opcode[4] & !opcode[0]; assign o_immdec_ctrl[3] = opcode[4]; From cc42437e0f8e08a1e9eb846c1b52b2d67f018d20 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 28 Aug 2020 13:01:22 +0200 Subject: [PATCH 054/289] Prepare for alternative immediate decoder --- rtl/serv_immdec.v | 19 +++++++++++++------ rtl/serv_top.v | 6 +++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v index bdc1f1c..7262745 100644 --- a/rtl/serv_immdec.v +++ b/rtl/serv_immdec.v @@ -11,9 +11,9 @@ module serv_immdec input wire i_cnt_done, input wire [3:0] i_ctrl, //To RF - output reg [4:0] o_rf_rd_addr, - output reg [4:0] o_rf_rs1_addr, - output reg [4:0] o_rf_rs2_addr, + output wire [4:0] o_rd_addr, + output wire [4:0] o_rs1_addr, + output wire [4:0] o_rs2_addr, output wire o_imm); reg signbit; @@ -24,6 +24,13 @@ module serv_immdec reg [4:0] imm24_20; reg [4:0] imm11_7; + reg [4:0] rd_addr; + reg [4:0] rs1_addr; + reg [4:0] rs2_addr; + + assign o_rd_addr = rd_addr; + assign o_rs1_addr = rs1_addr; + assign o_rs2_addr = rs2_addr; assign o_imm = i_cnt_done ? signbit : i_ctrl[0] ? imm11_7[0] : imm24_20[0]; assign o_csr_imm = imm19_12_20[4]; @@ -38,9 +45,9 @@ module serv_immdec imm24_20 <= i_wb_rdt[24:20]; imm11_7 <= i_wb_rdt[11:7]; - o_rf_rd_addr <= i_wb_rdt[11:7]; - o_rf_rs1_addr <= i_wb_rdt[19:15]; - o_rf_rs2_addr <= i_wb_rdt[24:20]; + rd_addr <= i_wb_rdt[11:7]; + rs1_addr <= i_wb_rdt[19:15]; + rs2_addr <= i_wb_rdt[24:20]; end if (i_cnt_en) begin imm19_12_20 <= {i_ctrl[3] ? signbit : imm24_20[0], imm19_12_20[8:1]}; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 576e425..4e6346a 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -263,9 +263,9 @@ module serv_top .i_ctrl (immdec_ctrl), .i_cnt_done (cnt_done), //To RF - .o_rf_rd_addr (rd_addr), - .o_rf_rs1_addr (rs1_addr), - .o_rf_rs2_addr (rs2_addr), + .o_rd_addr (rd_addr), + .o_rs1_addr (rs1_addr), + .o_rs2_addr (rs2_addr), .o_imm (imm)); serv_bufreg bufreg From 554bdccba00b6d905cd264fcaa6db8aefdd25cd0 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 28 Aug 2020 16:35:27 +0200 Subject: [PATCH 055/289] Silence some warnings --- rtl/serv_rf_if.v | 2 ++ rtl/serv_state.v | 2 ++ serving/serving_ram.v | 10 +++------- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index 2160150..db982dc 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -119,6 +119,8 @@ module serv_rf_if assign o_rs1 = i_rdata0; assign o_rs2 = i_rdata1; + assign o_csr = 1'b0; + assign o_csr_pc = 1'b0; end // else: !if(WITH_CSR) endgenerate endmodule diff --git a/rtl/serv_state.v b/rtl/serv_state.v index c776949..6c2e845 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -155,6 +155,8 @@ module serv_state misalign_trap_sync <= 1'b0; end // always @ (posedge i_clk) end else begin + assign o_trap_taken = 0; + assign o_ctrl_trap = 0; always @(*) o_pending_irq = 1'b0; end diff --git a/serving/serving_ram.v b/serving/serving_ram.v index b58c224..7acf64f 100644 --- a/serving/serving_ram.v +++ b/serving/serving_ram.v @@ -38,6 +38,9 @@ module serving_ram output wire [31:0] o_wb_rdt, output reg o_wb_ack); + reg [1:0] bsel; + reg [7:0] rdata; + wire wb_en = i_wb_stb & !i_wen & !o_wb_ack; wire wb_we = i_wb_we & i_wb_sel[bsel]; @@ -50,24 +53,17 @@ module serving_ram wire [7:0] wdata = wb_en ? i_wb_dat[bsel*8+:8] : i_wdata; wire [aw-1:0] raddr = wb_en ? {i_wb_adr[aw-1:2],bsel} : i_raddr; - reg [2:0] wb_en_r; - - reg [1:0] bsel; - reg [23:0] wb_rdt; assign o_wb_rdt = {rdata, wb_rdt}; always @(posedge i_clk) begin if (wb_en) bsel <= bsel + 2'd1; - wb_en_r <= {wb_en_r[1:0], wb_en}; o_wb_ack <= wb_en & &bsel; if (bsel == 2'b01) wb_rdt[7:0] <= rdata; if (bsel == 2'b10) wb_rdt[15:8] <= rdata; if (bsel == 2'b11) wb_rdt[23:16] <= rdata; end - reg [7:0] rdata; - always @(posedge i_clk) begin if (we) mem[waddr] <= wdata; rdata <= mem[raddr]; From 3751b582531232b984fc1bc8b7328c86f8eaaeba Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 29 Sep 2020 22:27:32 +0200 Subject: [PATCH 056/289] Clean up serv_csr interface --- rtl/serv_csr.v | 32 ++++++++++++++++++-------------- rtl/serv_top.v | 21 +++++++++++++-------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/rtl/serv_csr.v b/rtl/serv_csr.v index df9f249..15fa813 100644 --- a/rtl/serv_csr.v +++ b/rtl/serv_csr.v @@ -2,30 +2,32 @@ module serv_csr ( input wire i_clk, + //State input wire i_en, input wire i_cnt0to3, input wire i_cnt3, input wire i_cnt7, input wire i_cnt_done, + input wire i_mem_misalign, + input wire i_mtip, + input wire i_trap_taken, + input wire i_pending_irq, + output wire o_new_irq, + //Control input wire i_e_op, input wire i_ebreak, input wire i_mem_cmd, - input wire i_mem_misalign, - //From mpram - input wire i_rf_csr_out, - //to mpram - output wire o_csr_in, - //Stuff - input wire i_mtip, - output wire o_new_irq, - input wire i_pending_irq, - input wire i_trap_taken, input wire i_mstatus_en, input wire i_mie_en, input wire i_mcause_en, input wire [1:0] i_csr_source, input wire i_mret, - input wire i_d, + input wire i_csr_d_sel, + //Data + input wire i_rf_csr_out, + output wire o_csr_in, + input wire i_csr_imm, + input wire i_rs1, output wire o_q); localparam [1:0] @@ -47,9 +49,11 @@ module serv_csr reg timer_irq_r; - assign csr_in = (i_csr_source == CSR_SOURCE_EXT) ? i_d : - (i_csr_source == CSR_SOURCE_SET) ? csr_out | i_d : - (i_csr_source == CSR_SOURCE_CLR) ? csr_out & ~i_d : + wire d = i_csr_d_sel ? i_csr_imm : i_rs1; + + assign csr_in = (i_csr_source == CSR_SOURCE_EXT) ? d : + (i_csr_source == CSR_SOURCE_SET) ? csr_out | d : + (i_csr_source == CSR_SOURCE_CLR) ? csr_out & ~d : (i_csr_source == CSR_SOURCE_CSR) ? csr_out : 1'bx; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 4e6346a..ab19acf 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -417,27 +417,32 @@ module serv_top serv_csr csr ( .i_clk (clk), + //State .i_en (cnt_en), .i_cnt0to3 (cnt0to3), .i_cnt3 (cnt3), .i_cnt7 (cnt7), .i_cnt_done (cnt_done), + .i_mem_misalign (mem_misalign), + .i_mtip (i_timer_irq), + .i_trap_taken (trap_taken), + .i_pending_irq (pending_irq), + .o_new_irq (new_irq), + //Control .i_e_op (e_op), .i_ebreak (ebreak), .i_mem_cmd (o_dbus_we), - .i_mem_misalign (mem_misalign), - .i_rf_csr_out (rf_csr_out), - .o_csr_in (csr_in), - .i_mtip (i_timer_irq), - .o_new_irq (new_irq), - .i_trap_taken (trap_taken), - .i_pending_irq (pending_irq), .i_mstatus_en (csr_mstatus_en), .i_mie_en (csr_mie_en ), .i_mcause_en (csr_mcause_en ), .i_csr_source (csr_source), .i_mret (mret), - .i_d (csr_d_sel ? csr_imm : rs1), + .i_csr_d_sel (csr_d_sel), + //Data + .i_rf_csr_out (rf_csr_out), + .o_csr_in (csr_in), + .i_csr_imm (csr_imm), + .i_rs1 (rs1), .o_q (csr_rd)); end else begin assign csr_in = 1'b0; From 6aeb39c7ac0d4cb7f015b81753ae0a0bb735d48f Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 29 Sep 2020 22:33:37 +0200 Subject: [PATCH 057/289] Clean up port maps in serv_top --- rtl/serv_top.v | 90 ++++++++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 39 deletions(-) diff --git a/rtl/serv_top.v b/rtl/serv_top.v index ab19acf..e4b6314 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -105,6 +105,7 @@ module serv_top wire bufreg_rs1_en; wire bufreg_imm_en; wire bufreg_loop; + wire bufreg_clr_lsb; wire bufreg_q; wire alu_sub; @@ -143,7 +144,9 @@ module serv_top wire csr_en; wire [1:0] csr_addr; wire csr_pc; - wire csr_imm_en; + wire csr_imm_en; + wire csr_in; + wire rf_csr_out; wire new_irq; wire trap_taken; @@ -157,24 +160,11 @@ module serv_top ( .i_clk (clk), .i_rst (i_rst), + //State .i_new_irq (new_irq), .o_trap_taken (trap_taken), .o_pending_irq (pending_irq), - .i_dbus_ack (i_dbus_ack), - .i_ibus_ack (i_ibus_ack), - .o_rf_rreq (o_rf_rreq), - .o_rf_wreq (o_rf_wreq), - .i_rf_ready (i_rf_ready), - .o_rf_rd_en (rd_en), - .i_bne_or_bge (bne_or_bge), - .i_cond_branch (cond_branch), .i_alu_cmp (alu_cmp), - .i_branch_op (branch_op), - .i_mem_op (mem_op), - .i_shift_op (shift_op), - .i_slt_op (slt_op), - .i_e_op (e_op), - .i_rd_op (rd_op), .o_init (init), .o_cnt_en (cnt_en), .o_cnt0to3 (cnt0to3), @@ -192,11 +182,26 @@ module serv_top .i_ctrl_misalign(lsb[1]), .o_alu_shamt_en (alu_shamt_en), .i_alu_sh_done (alu_sh_done), - .o_dbus_cyc (o_dbus_cyc), .o_mem_bytecnt (mem_bytecnt), - .i_mem_misalign (mem_misalign)); - - wire bufreg_clr_lsb; + .i_mem_misalign (mem_misalign), + //Control + .i_bne_or_bge (bne_or_bge), + .i_cond_branch (cond_branch), + .i_branch_op (branch_op), + .i_mem_op (mem_op), + .i_shift_op (shift_op), + .i_slt_op (slt_op), + .i_e_op (e_op), + .i_rd_op (rd_op), + //External + .o_dbus_cyc (o_dbus_cyc), + .i_dbus_ack (i_dbus_ack), + .i_ibus_ack (i_ibus_ack), + //RF Interface + .o_rf_rreq (o_rf_rreq), + .o_rf_wreq (o_rf_wreq), + .i_rf_ready (i_rf_ready), + .o_rf_rd_en (rd_en)); serv_decode decode ( @@ -271,19 +276,23 @@ module serv_top serv_bufreg bufreg ( .i_clk (clk), + //State .i_cnt0 (cnt0), .i_cnt1 (cnt1), .i_en (!bufreg_hold), .i_init (init), + .o_lsb (lsb), + //Control .i_loop (bufreg_loop), - .i_rs1 (rs1), .i_rs1_en (bufreg_rs1_en), - .i_imm (imm), .i_imm_en (bufreg_imm_en), .i_clr_lsb (bufreg_clr_lsb), - .o_lsb (lsb), - .o_dbus_adr (o_dbus_adr), - .o_q (bufreg_q)); + //Data + .i_rs1 (rs1), + .i_imm (imm), + .o_q (bufreg_q), + //External + .o_dbus_adr (o_dbus_adr)); serv_ctrl #(.RESET_PC (RESET_PC), @@ -319,31 +328,31 @@ module serv_top ( .clk (clk), .i_rst (i_rst), - .i_shift_op (shift_op), + //State .i_en (cnt_en), .i_cnt0 (cnt0), - .i_rs1 (rs1), - .i_rs2 (rs2), - .i_imm (imm), - .i_op_b_rs2 (op_b_source), - .i_buf (bufreg_q), .i_init (init), .i_cnt_done (cnt_done), + .i_shamt_en (alu_shamt_en), + .o_cmp (alu_cmp), + .o_sh_done (alu_sh_done), + //Control + .i_shift_op (shift_op), + .i_op_b_rs2 (op_b_source), .i_sub (alu_sub), .i_bool_op (alu_bool_op), .i_cmp_eq (alu_cmp_eq), .i_cmp_sig (alu_cmp_sig), - .o_cmp (alu_cmp), - .i_shamt_en (alu_shamt_en), .i_sh_right (alu_sh_right), .i_sh_signed (alu_sh_signed), - .o_sh_done (alu_sh_done), .i_rd_sel (alu_rd_sel), + //Data + .i_rs1 (rs1), + .i_rs2 (rs2), + .i_imm (imm), + .i_buf (bufreg_q), .o_rd (alu_rd)); - wire csr_in; - wire rf_csr_out; - serv_rf_if #(.WITH_CSR (WITH_CSR)) rf_if @@ -396,16 +405,19 @@ module serv_top mem_if ( .i_clk (clk), + //State .i_en (cnt_en), + .i_bytecnt (mem_bytecnt), + .i_lsb (lsb), + .o_misalign (mem_misalign), + //Control .i_mem_op (mem_op), .i_signed (mem_signed), .i_word (mem_word), .i_half (mem_half), - .i_bytecnt (mem_bytecnt), + //Data .i_rs2 (rs2), .o_rd (mem_rd), - .i_lsb (lsb), - .o_misalign (mem_misalign), //External interface .o_wb_dat (o_dbus_dat), .o_wb_sel (o_dbus_sel), From 44287ed244a127a162cda065adb6110a9a42eb5c Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 30 Sep 2020 21:30:47 +0200 Subject: [PATCH 058/289] Remove unused reset input from serv_alu --- rtl/serv_alu.v | 1 - rtl/serv_top.v | 1 - 2 files changed, 2 deletions(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index e6bc3cc..eeb021c 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -2,7 +2,6 @@ module serv_alu ( input wire clk, - input wire i_rst, input wire i_en, input wire i_shift_op, input wire i_cnt0, diff --git a/rtl/serv_top.v b/rtl/serv_top.v index e4b6314..748a7f1 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -327,7 +327,6 @@ module serv_top serv_alu alu ( .clk (clk), - .i_rst (i_rst), //State .i_en (cnt_en), .i_cnt0 (cnt0), From c1b84716782b07cf5136f072a873abe8e283b7b1 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 9 Oct 2020 23:43:30 +0200 Subject: [PATCH 059/289] Add reset_strategy parameter The reset_strategy parameter controls how much reset to apply to SERV. It can be set to MINI for the default behaviour, or NONE to only apply reset where absolutely needed and rely on POR to clear FFs --- rtl/serv_ctrl.v | 11 +++++++++-- rtl/serv_rf_ram_if.v | 10 +++++++--- rtl/serv_rf_top.v | 10 ++++++++++ rtl/serv_state.v | 13 +++++++++---- rtl/serv_top.v | 5 ++++- servant/servant.v | 4 +++- serving/serving.v | 5 ++++- 7 files changed, 46 insertions(+), 12 deletions(-) diff --git a/rtl/serv_ctrl.v b/rtl/serv_ctrl.v index 108fd2a..c6f5f5f 100644 --- a/rtl/serv_ctrl.v +++ b/rtl/serv_ctrl.v @@ -1,5 +1,6 @@ `default_nettype none module serv_ctrl + #(parameter RESET_STRATEGY = "MINI") ( input wire clk, input wire i_rst, @@ -68,6 +69,8 @@ module serv_ctrl assign o_ibus_cyc = en_pc_r & !i_pc_en; + initial if (RESET_STRATEGY == "NONE") o_ibus_adr = RESET_PC; + always @(posedge clk) begin pc_plus_4_cy_r <= i_pc_en & pc_plus_4_cy; pc_plus_offset_cy_r <= i_pc_en & pc_plus_offset_cy; @@ -75,8 +78,12 @@ module serv_ctrl if (o_ibus_cyc & i_ibus_ack | i_pc_en | i_rst) en_pc_r <= i_pc_en | i_rst; - if (i_pc_en | i_rst) begin - o_ibus_adr <= i_rst ? RESET_PC : {new_pc, o_ibus_adr[31:1]}; + if (RESET_STRATEGY == "NONE") begin + if (i_pc_en) + o_ibus_adr <= {new_pc, o_ibus_adr[31:1]}; + end else begin + if (i_pc_en | i_rst) + o_ibus_adr <= i_rst ? RESET_PC : {new_pc, o_ibus_adr[31:1]}; end end endmodule diff --git a/rtl/serv_rf_ram_if.v b/rtl/serv_rf_ram_if.v index 64da74c..f7b47da 100644 --- a/rtl/serv_rf_ram_if.v +++ b/rtl/serv_rf_ram_if.v @@ -1,6 +1,7 @@ `default_nettype none module serv_rf_ram_if #(parameter width=8, + parameter reset_strategy="MINI", parameter csr_regs=4, parameter depth=32*(32+csr_regs)/width, parameter l2w = $clog2(width)) @@ -97,7 +98,8 @@ module serv_rf_ram_if wgo <= 1'b0; if (i_rst) begin - wcnt <= 5'd0; + if (reset_strategy != "NONE") + wcnt <= 5'd0; end end @@ -151,8 +153,10 @@ module serv_rf_ram_if rdata0 <= i_rdata; if (i_rst) begin - rgnt <= 1'b0; - rreq_r <= 1'b0; + if (reset_strategy != "NONE") begin + rgnt <= 1'b0; + rreq_r <= 1'b0; + end end end diff --git a/rtl/serv_rf_top.v b/rtl/serv_rf_top.v index ef0ae41..e84ac36 100644 --- a/rtl/serv_rf_top.v +++ b/rtl/serv_rf_top.v @@ -2,6 +2,14 @@ module serv_rf_top #(parameter RESET_PC = 32'd0, + + /* Amount of reset applied to design + "NONE" : No reset at all. Relies on a POR to set correct initialization + values and that core isn't reset during runtime + "MINI" : Standard setting. Resets the minimal amount of FFs needed to + restart execution from the instruction at RESET_PC + */ + parameter RESET_STRATEGY = "MINI", parameter WITH_CSR = 1, parameter RF_WIDTH = 2, parameter RF_L2D = $clog2((32+(WITH_CSR*4))*32/RF_WIDTH)) @@ -68,6 +76,7 @@ module serv_rf_top serv_rf_ram_if #(.width (RF_WIDTH), + .reset_strategy (RESET_STRATEGY), .csr_regs (CSR_REGS)) rf_ram_if (.i_clk (clk), @@ -104,6 +113,7 @@ module serv_rf_top serv_top #(.RESET_PC (RESET_PC), + .RESET_STRATEGY (RESET_STRATEGY), .WITH_CSR (WITH_CSR)) cpu ( diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 6c2e845..b461fd7 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -1,4 +1,5 @@ module serv_state + #(parameter RESET_STRATEGY = "MINI") ( input wire i_clk, input wire i_rst, @@ -96,6 +97,8 @@ module serv_state //Shift operations require bufreg to hold for one cycle between INIT and RUN before shifting assign o_bufreg_hold = !o_cnt_en & (stage_two_req | ~i_shift_op); + initial if (RESET_STRATEGY == "NONE") o_cnt_r = 4'b0001; + always @(posedge i_clk) begin if (o_cnt_done) o_ctrl_jump <= o_init & take_branch; @@ -125,10 +128,12 @@ module serv_state o_cnt_r <= {o_cnt_r[2:0],o_cnt_r[3]}; if (i_rst) begin - o_cnt <= 3'd0; - stage_two_pending <= 1'b0; - o_ctrl_jump <= 1'b0; - o_cnt_r <= 4'b0001; + if (RESET_STRATEGY != "NONE") begin + o_cnt <= 3'd0; + stage_two_pending <= 1'b0; + o_ctrl_jump <= 1'b0; + o_cnt_r <= 4'b0001; + end end end diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 748a7f1..a50e77c 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -2,6 +2,7 @@ module serv_top #(parameter WITH_CSR = 1, + parameter RESET_STRATEGY = "MINI", parameter RESET_PC = 32'd0) ( input wire clk, @@ -155,7 +156,8 @@ module serv_top wire [1:0] lsb; serv_state - #(.WITH_CSR (WITH_CSR)) + #(.RESET_STRATEGY (RESET_STRATEGY), + .WITH_CSR (WITH_CSR)) state ( .i_clk (clk), @@ -296,6 +298,7 @@ module serv_top serv_ctrl #(.RESET_PC (RESET_PC), + .RESET_STRATEGY (RESET_STRATEGY), .WITH_CSR (WITH_CSR)) ctrl ( diff --git a/servant/servant.v b/servant/servant.v index a5e6424..d9426c8 100644 --- a/servant/servant.v +++ b/servant/servant.v @@ -7,6 +7,7 @@ module servant parameter memfile = "zephyr_hello.hex"; parameter memsize = 8192; + parameter reset_strategy = "MINI"; parameter sim = 0; parameter with_csr = 1; @@ -76,7 +77,7 @@ module servant servant_mux #(sim) servant_mux ( .i_clk (wb_clk), - .i_rst (wb_rst), + .i_rst (wb_rst & (reset_strategy != "NONE")), .i_wb_cpu_adr (wb_dbus_adr), .i_wb_cpu_dat (wb_dbus_dat), .i_wb_cpu_sel (wb_dbus_sel), @@ -143,6 +144,7 @@ module servant serv_rf_top #(.RESET_PC (32'h0000_0000), + .RESET_STRATEGY (reset_strategy), .WITH_CSR (with_csr)) cpu ( diff --git a/serving/serving.v b/serving/serving.v index 374bab4..2151862 100644 --- a/serving/serving.v +++ b/serving/serving.v @@ -34,6 +34,7 @@ module serving parameter memfile = ""; parameter memsize = 8192; + parameter RESET_STRATEGY = "NONE"; parameter WITH_CSR = 1; localparam regs = 32+WITH_CSR*4; @@ -104,7 +105,7 @@ module serving serving_mux mux (.i_clk (i_clk), - .i_rst (i_rst), + .i_rst (i_rst & (RESET_STRATEGY != "NONE")), .i_wb_cpu_adr (wb_dbus_adr), .i_wb_cpu_dat (wb_dbus_dat), @@ -168,6 +169,7 @@ module serving serv_rf_ram_if #(.width (rf_width), + .reset_strategy (RESET_STRATEGY), .csr_regs (WITH_CSR*4)) rf_ram_if (.i_clk (i_clk), @@ -193,6 +195,7 @@ module serving serv_top #(.RESET_PC (32'h0000_0000), + .RESET_STRATEGY (RESET_STRATEGY), .WITH_CSR (WITH_CSR)) cpu ( From 90ce4ff1afd1ec84817f3c4284f98f1cbbed97ad Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 10 Nov 2020 15:13:04 +0100 Subject: [PATCH 060/289] Syntax and reset fixes for ModelSim --- bench/servant_tb.v | 2 ++ rtl/serv_ctrl.v | 7 +++---- rtl/serv_state.v | 13 ++++++++++--- rtl/serv_top.v | 1 - servant/servant.v | 8 ++++++-- servant/servant_ram.v | 7 ++++++- servant/servant_timer.v | 7 +++++++ 7 files changed, 34 insertions(+), 11 deletions(-) diff --git a/bench/servant_tb.v b/bench/servant_tb.v index 41183cd..b3ea471 100644 --- a/bench/servant_tb.v +++ b/bench/servant_tb.v @@ -8,6 +8,8 @@ module servant_tb; reg wb_clk = 1'b0; reg wb_rst = 1'b1; + wire q; + always #31 wb_clk <= !wb_clk; initial #62 wb_rst <= 1'b0; diff --git a/rtl/serv_ctrl.v b/rtl/serv_ctrl.v index c6f5f5f..aaa4d2c 100644 --- a/rtl/serv_ctrl.v +++ b/rtl/serv_ctrl.v @@ -1,6 +1,8 @@ `default_nettype none module serv_ctrl - #(parameter RESET_STRATEGY = "MINI") + #(parameter RESET_STRATEGY = "MINI", + parameter RESET_PC = 32'd0, + parameter WITH_CSR = 1) ( input wire clk, input wire i_rst, @@ -26,9 +28,6 @@ module serv_ctrl output wire o_ibus_cyc, input wire i_ibus_ack); - parameter RESET_PC = 32'd0; - parameter WITH_CSR = 1; - reg en_pc_r; wire pc_plus_4; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index b461fd7..9701180 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -1,5 +1,6 @@ module serv_state - #(parameter RESET_STRATEGY = "MINI") + #(parameter RESET_STRATEGY = "MINI", + parameter [0:0] WITH_CSR = 1) ( input wire i_clk, input wire i_rst, @@ -42,8 +43,6 @@ module serv_state output reg o_cnt_done, output wire o_bufreg_hold); - parameter [0:0] WITH_CSR = 1; - wire cnt4; reg stage_two_req; @@ -129,6 +128,7 @@ module serv_state if (i_rst) begin if (RESET_STRATEGY != "NONE") begin + o_cnt_en <= 1'b0; o_cnt <= 3'd0; stage_two_pending <= 1'b0; o_ctrl_jump <= 1'b0; @@ -158,6 +158,13 @@ module serv_state misalign_trap_sync <= trap_pending; if (i_ibus_ack) misalign_trap_sync <= 1'b0; + if (i_rst) + if (RESET_STRATEGY != "NONE") begin + misalign_trap_sync <= 1'b0; + irq_sync <= 1'b0; + o_pending_irq <= 1'b0; + end + end // always @ (posedge i_clk) end else begin assign o_trap_taken = 0; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index a50e77c..5c0e6df 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -125,7 +125,6 @@ module serv_top wire rd_en; wire op_b_source; - wire op_b; wire mem_signed; wire mem_word; diff --git a/servant/servant.v b/servant/servant.v index d9426c8..f300a9a 100644 --- a/servant/servant.v +++ b/servant/servant.v @@ -105,10 +105,12 @@ module servant servant_ram #(.memfile (memfile), - .depth (memsize)) + .depth (memsize), + .RESET_STRATEGY (reset_strategy)) ram (// Wishbone interface .i_wb_clk (wb_clk), + .i_wb_rst (wb_rst), .i_wb_adr (wb_mem_adr[$clog2(memsize)-1:2]), .i_wb_cyc (wb_mem_cyc), .i_wb_we (wb_mem_we) , @@ -120,9 +122,11 @@ module servant generate if (with_csr) begin servant_timer - #(.WIDTH (32)) + #(.RESET_STRATEGY (reset_strategy), + .WIDTH (32)) timer (.i_clk (wb_clk), + .i_rst (wb_rst), .o_irq (timer_irq), .i_wb_cyc (wb_timer_cyc), .i_wb_we (wb_timer_we) , diff --git a/servant/servant_ram.v b/servant/servant_ram.v index 91340f1..c3aca8f 100644 --- a/servant/servant_ram.v +++ b/servant/servant_ram.v @@ -3,8 +3,10 @@ module servant_ram #(//Memory parameters parameter depth = 256, parameter aw = $clog2(depth), + parameter RESET_STRATEGY = "", parameter memfile = "") (input wire i_wb_clk, + input wire i_wb_rst, input wire [aw-1:2] i_wb_adr, input wire [31:0] i_wb_dat, input wire [3:0] i_wb_sel, @@ -20,7 +22,10 @@ module servant_ram wire [aw-3:0] addr = i_wb_adr[aw-1:2]; always @(posedge i_wb_clk) - o_wb_ack <= i_wb_cyc & !o_wb_ack; + if (i_wb_rst & (RESET_STRATEGY != "NONE")) + o_wb_ack <= 1'b0; + else + o_wb_ack <= i_wb_cyc & !o_wb_ack; always @(posedge i_wb_clk) begin if (we[0]) mem[addr][7:0] <= i_wb_dat[7:0]; diff --git a/servant/servant_timer.v b/servant/servant_timer.v index 28bdb82..2bb0f5e 100644 --- a/servant/servant_timer.v +++ b/servant/servant_timer.v @@ -1,8 +1,10 @@ `default_nettype none module servant_timer #(parameter WIDTH = 16, + parameter RESET_STRATEGY = "", parameter DIVIDER = 0) (input wire i_clk, + input wire i_rst, output reg o_irq, input wire [31:0] i_wb_dat, input wire i_wb_we, @@ -26,5 +28,10 @@ module servant_timer mtimecmp <= i_wb_dat[HIGH:0]; mtime <= mtime + 'd1; o_irq <= (mtimeslice >= mtimecmp); + if (RESET_STRATEGY != "NONE") + if (i_rst) begin + mtime <= 0; + mtimecmp <= 0; + end end endmodule From bbe3e56ab210482d6f0732224bde599a9ecd38c0 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 30 Nov 2020 23:13:11 +0100 Subject: [PATCH 061/289] Decouple ibus_cyc and ibus_ack --- rtl/serv_ctrl.v | 2 +- rtl/serv_top.v | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rtl/serv_ctrl.v b/rtl/serv_ctrl.v index aaa4d2c..ab906ee 100644 --- a/rtl/serv_ctrl.v +++ b/rtl/serv_ctrl.v @@ -74,7 +74,7 @@ module serv_ctrl pc_plus_4_cy_r <= i_pc_en & pc_plus_4_cy; pc_plus_offset_cy_r <= i_pc_en & pc_plus_offset_cy; - if (o_ibus_cyc & i_ibus_ack | i_pc_en | i_rst) + if (i_ibus_ack | i_pc_en | i_rst) en_pc_r <= i_pc_en | i_rst; if (RESET_STRATEGY == "NONE") begin diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 5c0e6df..9f2e5d5 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -209,7 +209,7 @@ module serv_top .clk (clk), //Input .i_wb_rdt (i_ibus_rdt[31:2]), - .i_wb_en (o_ibus_cyc & i_ibus_ack), + .i_wb_en (i_ibus_ack), //To state .o_bne_or_bge (bne_or_bge), .o_cond_branch (cond_branch), @@ -265,7 +265,7 @@ module serv_top .i_csr_imm_en (csr_imm_en), .o_csr_imm (csr_imm), .i_wb_rdt (i_ibus_rdt[31:2]), - .i_wb_en (o_ibus_cyc & i_ibus_ack), + .i_wb_en (i_ibus_ack), .i_ctrl (immdec_ctrl), .i_cnt_done (cnt_done), //To RF From fd79a2ea0c075e00aec15f208870b0684e53972a Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 1 Dec 2020 22:40:52 +0100 Subject: [PATCH 062/289] Use cnt0 in serv_ctrl --- rtl/serv_ctrl.v | 5 +++-- rtl/serv_top.v | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/rtl/serv_ctrl.v b/rtl/serv_ctrl.v index ab906ee..826f0b2 100644 --- a/rtl/serv_ctrl.v +++ b/rtl/serv_ctrl.v @@ -9,6 +9,7 @@ module serv_ctrl //State input wire i_pc_en, input wire i_cnt12to31, + input wire i_cnt0, input wire i_cnt2, input wire i_cnt_done, //Control @@ -54,7 +55,7 @@ module serv_ctrl generate if (WITH_CSR) - assign new_pc = i_trap ? (i_csr_pc & en_pc_r) : i_jump ? pc_plus_offset_aligned : pc_plus_4; + assign new_pc = i_trap ? (i_csr_pc & !i_cnt0) : i_jump ? pc_plus_offset_aligned : pc_plus_4; else assign new_pc = i_jump ? pc_plus_offset_aligned : pc_plus_4; endgenerate @@ -64,7 +65,7 @@ module serv_ctrl assign offset_b = i_utype ? (i_imm & i_cnt12to31): i_buf; assign {pc_plus_offset_cy,pc_plus_offset} = offset_a+offset_b+pc_plus_offset_cy_r; - assign pc_plus_offset_aligned = pc_plus_offset & en_pc_r; + assign pc_plus_offset_aligned = pc_plus_offset & !i_cnt0; assign o_ibus_cyc = en_pc_r & !i_pc_en; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 9f2e5d5..0bb0f4e 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -306,6 +306,7 @@ module serv_top //State .i_pc_en (ctrl_pc_en), .i_cnt12to31 (cnt12to31), + .i_cnt0 (cnt0), .i_cnt2 (cnt2), .i_cnt_done (cnt_done), //Control From aa16bc40b6c7db767e05f460d8992721c7a8a55d Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 2 Dec 2020 15:55:45 +0100 Subject: [PATCH 063/289] Move ibus_cyc handling to serv_state --- doc/index.rst | 6 ++++-- doc/serv_ctrl.png | Bin 11766 -> 10850 bytes doc/serv_ctrl_int.png | Bin 48574 -> 42052 bytes rtl/serv_ctrl.v | 45 +++++++++++++++++------------------------- rtl/serv_state.v | 17 ++++++++++++++++ rtl/serv_top.v | 6 ++---- 6 files changed, 41 insertions(+), 33 deletions(-) diff --git a/doc/index.rst b/doc/index.rst index e393a36..20eb826 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -77,7 +77,7 @@ serv_ctrl .. image:: serv_ctrl.png -serv_ctrl keeps track of the current PC and contains the logic needed to calculate the next PC. The PC is stored in shift register with a parellel output connected to the instruction bus. New instructions are fetched by asserting o_ibus_cyc until there is a response on i_ibus_ack. Instruction fetches occur when the reset signal is deasserted, which is what gets SERV started, or when the PC has finished updating its value. +serv_ctrl keeps track of the current PC and contains the logic needed to calculate the next PC. The PC is stored in shift register with a parellel output connected to the instruction bus. The new PC can come from three sources. For normal instructions, it is incremented by four, which is the next 32-bit address. Jumps can be absolute or relative to the current PC. Absolute jumps are precalculated in serv_bufreg and written directly to the PC. PC relative jumps have the offset part precalculated in serv_bufreg which gets added to the current PC before storing as the new PC. The third source for the new PC comes from the CSR registers when entering or returning traps. @@ -120,7 +120,9 @@ serv_rf_ram_if converts between the SERV RF IF and the serv_rf_ram interface serv_state ^^^^^^^^^^ -serv_state keeps track of the state for the core and contains all dynamic control signals during an operations life time. Also controls the accesses towards the RF and dbus +serv_state keeps track of the state for the core and contains all dynamic control signals during an operations life time. Also controls the accesses towards the RF, ibus and dbus + +New instructions are fetched by asserting o_ibus_cyc until there is a response on i_ibus_ack. Instruction fetches occur when the reset signal is deasserted, which is what gets SERV started, or when the PC has finished updating its value. shift_reg ^^^^^^^^^ diff --git a/doc/serv_ctrl.png b/doc/serv_ctrl.png index 469b133c8d0d2751b9fba765135da15250b1aeb1..d3647762441184d38b7c52e5a8541d4e1e47c8c9 100644 GIT binary patch literal 10850 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

^rw6)#D2=?sp8nVA64Z6%~XX49zPSk|Gwh< zAA#QgE?j?!u^{%>x*=jG&o(2|Yqo{!>ekSE`L(k}%ZwYM`$@j1g2ce(U&U~e2s`KD zIiU^*gJ&B~5D)GmB|ZgJgJQg^GQs;EzbY5GP*O88Z&vHK6;f4Ar>|63Y5n=kN$xs>`ozEShwo+fLjj-v?@2St7tfxv_K!MVYX zM@2lB#pzhxJ%$u=~?&t}}MbqMo&Y5@09TnOL zQ+V_8>-Nq;{}R!$A9=Fa3Qt&ve6Q?`$eZ9DpoCoMtAt&N#fqd)jvw9;=)9>MIvw)q zOTT|vWYOQpk}j*GNVC$rhW}TaCpbyLuSH}oFeUKMe)PTQ?~|MK)?@y{occp>?%cj^ zSnu9XQ8``bZ;IVfmG~0)UHN%O{DaK%v6!Yk5O;V?7PPJqy7qA`o6+rs^K!9Kov)y3 z8cL3*(m7^OIUWoz-h=YwVug{R4bCwWhi_RTpG6R*Se;NPuF?I z?~el(ttL`(^iv7jxQ$O)J@jnU;m)|_J3jvH4YgE?o0Kz>y*$)F?`LjPQeZLq+k~rw zrz?^G*^=8a;aSY+e#-2vJes5HKW14u^IRM(LOM1kMknC&TXIecpeshR!ZIl>>HV=M zDql68s7hBHpXGA913KEK7v~1!4ZyaLGpKQU)X!&yeBE3hm6cg`3$%A{JkRMWVN>Kz zaa5&?(-@`Et*2LguD3PS*Y|^jx3!_6flS)_2y828x8JObmmlSecd6hdC`NAE|C0Xk z$)(c;w{PFJK**>$?dI;aCnuNm?+v7G7zm~loa^oQ~m5< zU6FT3zO1H~G@v0^+xsJ4g@I3Mg3(56tyv zdcJ*78E0zW$pw(z_gEqT)#Rd7${uODv$MHR-46JgkIhE%2rvr&cF-Sx2>Rr}ONKy; zU)SsHF+M{8di?e0??md#(()(98VzppdXTEsC+`qCeOkXaF_*82e$AkToQ-+Ya;ms z9-kTjtYtZ11&r~n_607@>)%&FP4&gU#5v^qd`H@qquBLHiUA3*yG2Ds%b(b-ezj3j z>2QifJYXO{GRm&1b0R}lK*)O7h=`p!^} z-oAfbsZTuLb?{&2>pD>NKE`+U(~r2})D=7ifu{WAyUy= z8R9^Fnxr{}E!n%~Kx@DMnQGyj0AL%GWx{_GUeF>PXaYU=9}RzYLPe~a!kd!};f1vk zRR_6tH_-V1YcN@1V3WwEi*qUVjiepT50*uqx!J87l{-O@kRJbCfNDL&L4`N@Hw4|> zt+%*xYbZ3>bcjC@mTdbvT3*WU+BS$gzFnqc>YLM!ros-!4jwKyO6SU7l(%4P9ltTZ z=ZRWM6y}P@Az$=4pU?*sB;1}uuzhGtv_ys_wya#$Fz;05~{v7a_% zj4P+2!H6flGQg3b+Cap|7r>Ven3c=5`xxYqfLkdj%toraFS4SeYHP1*_q@WTY58re ze+Q)D8Q@{5)-EnB4GpGzH{9`m$L#Yu{|#n?Ne7(!|DU1u445xnMK6{AuEGOSosnPp zcy8JfcymH)Z*zLOY){z6cK`@)+u2fnl{3_Z$*v-cr7hy(1Z!*1E5+;0BFDZ0dQlf} z!knoOH*(Nd-3f#g5GpOUVfdob(v#A4fT+HC^X9|bw=YT>toe?ujJM|%J$;(2si_&V z*d2&XRI*6#%SOfOc)Z%q*X8cIdUFYT^kHu9Wv5~WsMYly0NME>R)+odZ!5soj`UOn zrvRRQV8H$T`}Z2k%F%#;*WmN}NiMwTpNOPm&qauB+gA(Tw9q(w_=3H&pGbwv3G7#Z zW=*ZFqbQlPwQt{^>ETV>zm+!%z?clo&{Yu}Sn8}+xxO+1!d}Pzf{cS>?U&&lQqh}% lTDL{`Sh3p@@j`7ws6vJw;zLDGc{{p8d_BQ|k literal 11766 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 diff --git a/doc/serv_ctrl_int.png b/doc/serv_ctrl_int.png index 292145e8a19d88a819e3e9a0a2db4619e7ff898b..f017a6a58ddceb44e0a659c7cf2a9eba2fb748c1 100644 GIT binary patch literal 42052 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 diff --git a/rtl/serv_ctrl.v b/rtl/serv_ctrl.v index 826f0b2..5a5554e 100644 --- a/rtl/serv_ctrl.v +++ b/rtl/serv_ctrl.v @@ -4,32 +4,28 @@ module serv_ctrl parameter RESET_PC = 32'd0, parameter WITH_CSR = 1) ( - input wire clk, - input wire i_rst, + input wire clk, + input wire i_rst, //State - input wire i_pc_en, - input wire i_cnt12to31, - input wire i_cnt0, - input wire i_cnt2, - input wire i_cnt_done, + input wire i_pc_en, + input wire i_cnt12to31, + input wire i_cnt0, + input wire i_cnt2, + input wire i_cnt_done, //Control - input wire i_jump, - input wire i_jal_or_jalr, - input wire i_utype, - input wire i_pc_rel, - input wire i_trap, + input wire i_jump, + input wire i_jal_or_jalr, + input wire i_utype, + input wire i_pc_rel, + input wire i_trap, //Data - input wire i_imm, - input wire i_buf, - input wire i_csr_pc, - output wire o_rd, - output wire o_bad_pc, + input wire i_imm, + input wire i_buf, + input wire i_csr_pc, + output wire o_rd, + output wire o_bad_pc, //External - output reg [31:0] o_ibus_adr, - output wire o_ibus_cyc, - input wire i_ibus_ack); - - reg en_pc_r; + output reg [31:0] o_ibus_adr); wire pc_plus_4; wire pc_plus_4_cy; @@ -67,17 +63,12 @@ module serv_ctrl assign pc_plus_offset_aligned = pc_plus_offset & !i_cnt0; - assign o_ibus_cyc = en_pc_r & !i_pc_en; - initial if (RESET_STRATEGY == "NONE") o_ibus_adr = RESET_PC; always @(posedge clk) begin pc_plus_4_cy_r <= i_pc_en & pc_plus_4_cy; pc_plus_offset_cy_r <= i_pc_en & pc_plus_offset_cy; - if (i_ibus_ack | i_pc_en | i_rst) - en_pc_r <= i_pc_en | i_rst; - if (RESET_STRATEGY == "NONE") begin if (i_pc_en) o_ibus_adr <= {new_pc, o_ibus_adr[31:1]}; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 9701180..27ef1b0 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -8,6 +8,7 @@ module serv_state output wire o_trap_taken, output reg o_pending_irq, input wire i_dbus_ack, + output wire o_ibus_cyc, input wire i_ibus_ack, output wire o_rf_rreq, output wire o_rf_wreq, @@ -50,6 +51,7 @@ module serv_state reg [4:2] o_cnt; reg [3:0] o_cnt_r; + reg ibus_cyc; //Update PC in RUN or TRAP states assign o_ctrl_pc_en = o_cnt_en & !o_init; @@ -98,7 +100,22 @@ module serv_state initial if (RESET_STRATEGY == "NONE") o_cnt_r = 4'b0001; + + assign o_ibus_cyc = ibus_cyc & !i_rst; + always @(posedge i_clk) begin + //ibus_cyc changes on three conditions. + //1. i_rst is asserted. Together with the async gating above, o_ibus_cyc + // will be asserted as soon as the reset is released. This is how the + // first instruction is fetced + //2. o_cnt_done and o_ctrl_pc_en are asserted. This means that SERV just + // finished updating the PC, is done with the current instruction and + // o_ibus_cyc gets asserted to fetch a new instruction + //3. When i_ibus_ack, a new instruction is fetched and o_ibus_cyc gets + // deasserted to finish the transaction + if (i_ibus_ack | o_cnt_done | i_rst) + ibus_cyc <= o_ctrl_pc_en | i_rst; + if (o_cnt_done) o_ctrl_jump <= o_init & take_branch; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 0bb0f4e..c7fc54f 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -197,6 +197,7 @@ module serv_top //External .o_dbus_cyc (o_dbus_cyc), .i_dbus_ack (i_dbus_ack), + .o_ibus_cyc (o_ibus_cyc), .i_ibus_ack (i_ibus_ack), //RF Interface .o_rf_rreq (o_rf_rreq), @@ -322,10 +323,7 @@ module serv_top .o_rd (ctrl_rd), .o_bad_pc (bad_pc), //External - .o_ibus_adr (o_ibus_adr), - .o_ibus_cyc (o_ibus_cyc), - .i_ibus_ack (i_ibus_ack)); - + .o_ibus_adr (o_ibus_adr)); serv_alu alu ( From 75ee4954d097b9282267207c4c122b21a56fd36a Mon Sep 17 00:00:00 2001 From: mtnrbq Date: Sun, 29 Nov 2020 06:34:00 +1100 Subject: [PATCH 064/289] break out verilator fileset for use with v < 4.030 --- servant.core | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/servant.core b/servant.core index 7896a3a..c83919b 100644 --- a/servant.core +++ b/servant.core @@ -17,12 +17,17 @@ filesets: servant_tb: files: - bench/servant_sim.v - - "!tool_verilator? (bench/uart_decoder.v)" - - "!tool_verilator? (bench/servant_tb.v)" - - "tool_verilator? (bench/servant_tb.cpp)" : {file_type : cppSource} + - bench/uart_decoder.v + - bench/servant_tb.v file_type : verilogSource depend : [vlog_tb_utils] + verilator_tb: + files: + - bench/servant_sim.v + - bench/servant_tb.cpp : {file_type : cppSource} + file_type : verilogSource + soc: files: - servant/servant_clock_gen.v @@ -281,7 +286,7 @@ targets: verilator_tb: default_tool: verilator - filesets : [soc, servant_tb] + filesets : [soc, verilator_tb] parameters : - RISCV_FORMAL - firmware From 116e3705894c140e901c5bbf7c444f04179862d8 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 2 Dec 2020 23:07:27 +0100 Subject: [PATCH 065/289] Reverse polarity of bufreg_hold signal --- rtl/serv_state.v | 4 ++-- rtl/serv_top.v | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 27ef1b0..19b192b 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -42,7 +42,7 @@ module serv_state output wire [1:0] o_mem_bytecnt, input wire i_mem_misalign, output reg o_cnt_done, - output wire o_bufreg_hold); + output wire o_bufreg_en); wire cnt4; @@ -96,7 +96,7 @@ module serv_state assign o_rf_rd_en = i_rd_op & o_cnt_en & !o_init; //Shift operations require bufreg to hold for one cycle between INIT and RUN before shifting - assign o_bufreg_hold = !o_cnt_en & (stage_two_req | ~i_shift_op); + assign o_bufreg_en = o_cnt_en | (!stage_two_req & i_shift_op); initial if (RESET_STRATEGY == "NONE") o_cnt_r = 4'b0001; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index c7fc54f..22fae9c 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -102,7 +102,7 @@ module serv_top wire cnt_done; - wire bufreg_hold; + wire bufreg_en; wire bufreg_rs1_en; wire bufreg_imm_en; wire bufreg_loop; @@ -176,7 +176,7 @@ module serv_top .o_cnt3 (cnt3), .o_cnt7 (cnt7), .o_cnt_done (cnt_done), - .o_bufreg_hold (bufreg_hold), + .o_bufreg_en (bufreg_en), .o_ctrl_pc_en (ctrl_pc_en), .o_ctrl_jump (jump), .o_ctrl_trap (trap), @@ -281,7 +281,7 @@ module serv_top //State .i_cnt0 (cnt0), .i_cnt1 (cnt1), - .i_en (!bufreg_hold), + .i_en (bufreg_en), .i_init (init), .o_lsb (lsb), //Control From d6445b95a6b74d334aa5796656b5eb26dfc66419 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 30 Aug 2020 13:49:17 +0200 Subject: [PATCH 066/289] Clean up serv_ctrl --- rtl/serv_decode.v | 76 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 22 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 6c8f1b1..b650119 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -64,19 +64,12 @@ module serv_decode reg imm30; + //opcode wire op_or_opimm = (!opcode[4] & opcode[2] & !opcode[0]); assign o_mem_op = !opcode[4] & !opcode[2] & !opcode[0]; - assign o_shift_op = op_or_opimm & (funct3[1:0] == 2'b01); - assign o_slt_op = op_or_opimm & (funct3[2:1] == 2'b01); assign o_branch_op = opcode[4] & !opcode[2]; - //Matches system opcodes except CSR accesses (funct3 == 0) - //No idea anymore why the !op21 condition is needed here - assign o_e_op = opcode[4] & opcode[2] & !op21 & !(|funct3); - - assign o_ebreak = op20; - //jal,branch = imm //jalr = rs1+imm //mem = rs1+imm @@ -84,6 +77,7 @@ module serv_decode assign o_bufreg_rs1_en = !opcode[4] | (!opcode[1] & opcode[0]); assign o_bufreg_imm_en = !opcode[2]; + //Loop bufreg contents for shift operations assign o_bufreg_loop = op_or_opimm; @@ -92,20 +86,20 @@ module serv_decode //False for JALR/LOAD/STORE/OP/OPIMM? assign o_bufreg_clr_lsb = opcode[4] & ((opcode[1:0] == 2'b00) | (opcode[1:0] == 2'b11)); - assign o_bne_or_bge = funct3[0]; + //Conditional branch + //True for BRANCH + //False for JAL/JALR assign o_cond_branch = !opcode[0]; assign o_ctrl_utype = !opcode[4] & opcode[2] & opcode[0]; assign o_ctrl_jal_or_jalr = opcode[4] & opcode[0]; + //PC-relative operations //True for jal, b* auipc //False for jalr, lui assign o_ctrl_pc_rel = (opcode[2:0] == 3'b000) | (opcode[1:0] == 2'b11) | (opcode[4:3] == 2'b00); - - assign o_ctrl_mret = (opcode[4] & opcode[2] & op21 & !(|funct3)); - //Write to RD //True for OP-IMM, AUIPC, OP, LUI, SYSTEM, JALR, JAL, LOAD //False for STORE, BRANCH, MISC-MEM @@ -113,28 +107,66 @@ module serv_decode (!opcode[2] & opcode[4] & opcode[0]) | (!opcode[2] & !opcode[3] & !opcode[0])); + // + //funct3 + // + + assign o_bne_or_bge = funct3[0]; + + // + // opcode & funct3 + // + + assign o_shift_op = op_or_opimm & (funct3[1:0] == 2'b01); + assign o_slt_op = op_or_opimm & (funct3[2:1] == 2'b01); + + //Matches system ops except eceall/ebreak/mret + wire csr_op = opcode[4] & opcode[2] & (|funct3); + + + //op20 + assign o_ebreak = op20; + + + //opcode & funct3 & op21 + + assign o_ctrl_mret = opcode[4] & opcode[2] & op21 & !(|funct3); + //Matches system opcodes except CSR accesses (funct3 == 0) + //and mret (!op21) + assign o_e_op = opcode[4] & opcode[2] & !op21 & !(|funct3); + + //opcode & funct3 & imm30 //True for sub, sll*, b*, slt* //False for add*, sr* assign o_alu_sub = (!funct3[2] & (funct3[0] | (opcode[3] & imm30))) | funct3[1] | opcode[4]; /* - 300 0_000 mstatus RWSC - 304 0_100 mie SCWi - 305 0_101 mtvec RW - 340 1_000 mscratch - 341 1_001 mepc RW - 342 1_010 mcause R - 343 1_011 mtval - 344 1_100 mip CWi + Bits 26, 22, 21 and 20 are enough to uniquely identify the eight supported CSR regs + mtvec, mscratch, mepc and mtval are stored externally (normally in the RF) and are + treated differently from mstatus, mie, mcause and mip which are stored in serv_csr. + + The former get a 2-bit address (as found in serv_params.vh) while the latter get a + one-hot enable signal each. + + Hex|2 222|Reg + adr|6 210|name + ---|-----|------- + 300|0_000|mstatus + 304|0_100|mie + 305|0_101|mtvec + 340|1_000|mscratch + 341|1_001|mepc + 342|1_010|mcause + 343|1_011|mtval + 344|1_100|mip + */ //true for mtvec,mscratch,mepc and mtval //false for mstatus, mie, mcause, mip wire csr_valid = op20 | (op26 & !op22 & !op21); - //Matches system ops except eceall/ebreak - wire csr_op = opcode[4] & opcode[2] & (|funct3); assign o_rd_csr_en = csr_op; assign o_csr_en = csr_op & csr_valid; From d7e9b39c13b8e4d568b2e2b5d12e5a7aea3f52d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20L=C3=A4ufer?= Date: Thu, 9 Jul 2020 18:20:41 -0700 Subject: [PATCH 067/289] automate RISC-V compliance check with github actions --- .github/workflows/ci.yml | 55 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..cb94fd3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,55 @@ +name: serv ci + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + compliance: + name: RISC-V Compliance Test + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + + - name: install fusesoc, verilator and gcc + run: | + sudo apt-get install -y python3-setuptools verilator gcc-riscv64-unknown-elf + pip3 install --user fusesoc + echo "~/.local/bin" >> $GITHUB_PATH + + - name: init fusesoc + run: fusesoc init -y + + - name: set SERV directory + run: echo "SERV=$GITHUB_WORKSPACE/.." >> $GITHUB_ENV + + - name: setup workspace + run: | + ls $GITHUB_WORKSPACE + mkdir $SERV/workspace + cd $SERV/workspace + fusesoc library add serv $SERV + + - name: lint + run: | + cd $SERV/workspace + fusesoc run --target=lint serv + + - name: build servant + run: | + cd $SERV/workspace + fusesoc run --target=verilator_tb --setup --build --build-root=servant_x servant + + - name: download risc-v compliance + run: | + cd $SERV + git clone https://github.com/riscv/riscv-compliance + + - name: run risc-v compliance + run: | + cd $SERV/riscv-compliance + make TARGETDIR=$SERV/serv/riscv-target RISCV_TARGET=serv RISCV_DECICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$SERV/workspace/servant_x/verilator_tb-verilator/Vservant_sim + From fe90ff7f97b4a2c334e44b4f014a930c90ff484c Mon Sep 17 00:00:00 2001 From: Bruno Flores Date: Sat, 24 Oct 2020 11:54:27 +0000 Subject: [PATCH 068/289] Add cmod-a7-35t target. --- data/cmod_a7_35t.xdc | 14 ++++++++++++++ servant.core | 15 +++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 data/cmod_a7_35t.xdc diff --git a/data/cmod_a7_35t.xdc b/data/cmod_a7_35t.xdc new file mode 100644 index 0000000..1b49f7a --- /dev/null +++ b/data/cmod_a7_35t.xdc @@ -0,0 +1,14 @@ +## 12 MHz Clock Signal +set_property -dict { PACKAGE_PIN L17 IOSTANDARD LVCMOS33 } [get_ports { i_clk }]; #IO_L12P_T1_MRCC_14 Sch=gclk +create_clock -add -name sys_clk_pin -period 83.33 -waveform {0 41.66} [get_ports { i_clk }]; + +## LEDs +set_property -dict { PACKAGE_PIN A17 IOSTANDARD LVCMOS33 } [get_ports { q }]; #IO_L12N_T1_MRCC_16 Sch=led[1] +#set_property -dict { PACKAGE_PIN C16 IOSTANDARD LVCMOS33 } [get_ports { q }]; #IO_L13P_T2_MRCC_16 Sch=led[2] + +## UART +#set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { q }]; #IO_L7N_T1_D10_14 Sch=uart_rxd_out +#set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { q }]; #IO_L7P_T1_D09_14 Sch=uart_txd_in + +set_property CFGBVS VCCO [current_design] +set_property CONFIG_VOLTAGE 3.3 [current_design] diff --git a/servant.core b/servant.core index c83919b..6e855af 100644 --- a/servant.core +++ b/servant.core @@ -72,6 +72,13 @@ filesets: - servant/servix_clock_gen.v : {file_type : verilogSource} - servant/servix.v : {file_type : verilogSource} - data/nexys_a7.xdc : {file_type : xdc} + + cmod_a7_35t: + files: + - servant/servix_clock_gen.v : {file_type : verilogSource} + - servant/servix.v : {file_type : verilogSource} + - data/cmod_a7_35t.xdc : {file_type : xdc} + arty_a7_35t: files: - servant/servix_clock_gen.v : {file_type : verilogSource} @@ -213,6 +220,14 @@ targets: vivado: {part : xc7a100tcsg324-1} toplevel : servix + cmod_a7_35t: + default_tool: vivado + filesets : [mem_files, soc, cmod_a7_35t] + parameters : [memfile=blinky.hex, memsize, frequency=12] + tools: + vivado: {part : xc7a35tcpg236-1} + toplevel : servix + arty_a7_35t: default_tool: vivado filesets : [mem_files, soc, arty_a7_35t] From 731ca8bb45f9182cd6d0ababcad3055a305fe298 Mon Sep 17 00:00:00 2001 From: Bruno Flores Date: Sat, 24 Oct 2020 12:04:41 +0000 Subject: [PATCH 069/289] Allow for a configurable toolchain prefix. --- sw/Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sw/Makefile b/sw/Makefile index 1133f0c..e0fd0a7 100644 --- a/sw/Makefile +++ b/sw/Makefile @@ -1,7 +1,9 @@ +TOOLCHAIN_PREFIX=riscv64-unknown-elf- + %.elf: %.S link.ld - riscv64-unknown-elf-gcc -nostartfiles -march=rv32i -mabi=ilp32 -Tlink.ld -o$@ $< + $(TOOLCHAIN_PREFIX)gcc -nostartfiles -march=rv32i -mabi=ilp32 -Tlink.ld -o$@ $< %.bin: %.elf - riscv64-unknown-elf-objcopy -O binary $< $@ + $(TOOLCHAIN_PREFIX)objcopy -O binary $< $@ %.hex: %.bin python3 makehex.py $< 2048 > $@ From acab804a319ecdec348b1d805daf14b1d4b5dd44 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 16 Dec 2020 22:52:36 +0100 Subject: [PATCH 070/289] Port Zephyr support to 2.4 and update instructions --- .gitmodules | 4 - README.md | 114 ++++++++++------ west.yml | 9 ++ zephyr | 1 - zephyr/CMakeLists.txt | 4 + zephyr/Kconfig | 8 ++ zephyr/boards/riscv/service/Kconfig.board | 7 + zephyr/boards/riscv/service/Kconfig.defconfig | 7 + zephyr/boards/riscv/service/board.h | 12 ++ zephyr/boards/riscv/service/service.dts | 21 +++ zephyr/boards/riscv/service/service.yaml | 15 +++ zephyr/boards/riscv/service/service_defconfig | 13 ++ zephyr/drivers/CMakeLists.txt | 6 + zephyr/drivers/Kconfig | 10 ++ zephyr/drivers/serial/CMakeLists.txt | 6 + zephyr/drivers/serial/Kconfig | 13 ++ zephyr/drivers/serial/uart_bitbang.c | 57 ++++++++ zephyr/drivers/timer/CMakeLists.txt | 5 + zephyr/drivers/timer/Kconfig | 9 ++ zephyr/drivers/timer/serv_timer.c | 125 ++++++++++++++++++ zephyr/dts/riscv/serv.dtsi | 11 ++ zephyr/module.yml | 5 + zephyr/soc/riscv/servant/CMakeLists.txt | 7 + zephyr/soc/riscv/servant/Kconfig.defconfig | 26 ++++ zephyr/soc/riscv/servant/Kconfig.soc | 7 + zephyr/soc/riscv/servant/irq.c | 58 ++++++++ zephyr/soc/riscv/servant/linker.ld | 7 + zephyr/soc/riscv/servant/soc.h | 24 ++++ zephyr/soc/riscv/servant/soc_common.h | 56 ++++++++ zephyr/soc/riscv/servant/soc_irq.S | 58 ++++++++ zephyr/soc/riscv/servant/vector.S | 28 ++++ 31 files changed, 690 insertions(+), 43 deletions(-) create mode 100644 west.yml delete mode 160000 zephyr create mode 100644 zephyr/CMakeLists.txt create mode 100644 zephyr/Kconfig create mode 100644 zephyr/boards/riscv/service/Kconfig.board create mode 100644 zephyr/boards/riscv/service/Kconfig.defconfig create mode 100644 zephyr/boards/riscv/service/board.h create mode 100644 zephyr/boards/riscv/service/service.dts create mode 100644 zephyr/boards/riscv/service/service.yaml create mode 100644 zephyr/boards/riscv/service/service_defconfig create mode 100644 zephyr/drivers/CMakeLists.txt create mode 100644 zephyr/drivers/Kconfig create mode 100644 zephyr/drivers/serial/CMakeLists.txt create mode 100644 zephyr/drivers/serial/Kconfig create mode 100644 zephyr/drivers/serial/uart_bitbang.c create mode 100644 zephyr/drivers/timer/CMakeLists.txt create mode 100644 zephyr/drivers/timer/Kconfig create mode 100644 zephyr/drivers/timer/serv_timer.c create mode 100644 zephyr/dts/riscv/serv.dtsi create mode 100644 zephyr/module.yml create mode 100644 zephyr/soc/riscv/servant/CMakeLists.txt create mode 100644 zephyr/soc/riscv/servant/Kconfig.defconfig create mode 100644 zephyr/soc/riscv/servant/Kconfig.soc create mode 100644 zephyr/soc/riscv/servant/irq.c create mode 100644 zephyr/soc/riscv/servant/linker.ld create mode 100644 zephyr/soc/riscv/servant/soc.h create mode 100644 zephyr/soc/riscv/servant/soc_common.h create mode 100644 zephyr/soc/riscv/servant/soc_irq.S create mode 100644 zephyr/soc/riscv/servant/vector.S diff --git a/.gitmodules b/.gitmodules index ef0a528..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +0,0 @@ -[submodule "zephyr"] - path = zephyr - url = https://github.com/olofk/zephyr - branch = serv diff --git a/README.md b/README.md index 3c139f9..aa31403 100644 --- a/README.md +++ b/README.md @@ -11,70 +11,83 @@ There's also an official [SERV user manual](https://serv.readthedocs.io/en/lates ## Prerequisites Create a directory to keep all the different parts of the project together. We -will refer to this directory as `$SERV` from now on. - -Download the main serv repo - -`cd $SERV && git clone https://github.com/olofk/serv` +will refer to this directory as `$WORKSPACE` from now on. All commands will be run from this directory unless otherwise stated. Install FuseSoC `pip install fusesoc` -Initialize the FuseSoC standard libraries +Add the FuseSoC standard library -`fusesoc init` +`fusesoc library add fusesoc_cores https://github.com/fusesoc/fusesoc_cores` -Create a workspace directory for FuseSoC +The FuseSoC standard library already contain a version of SERV, but if we want to make changes to SERV, run the bundled example or use the Zephyr support, it is better to add SERV as a separate library into the workspace -`mkdir $SERV/workspace` +`fusesoc library add serv https://github.com/olofk/serv` -Register the serv repo as a core library +The SERV repo will now be available in $WORKSPACE/fusesoc_libraries/serv. To save some typing, we will refer to that directory as `$SERV`. -`cd $SERV/workspace && fusesoc library add serv $SERV` +We are now ready to do our first exercises with SERV -Check that the CPU passes the linter +If [Verilator](https://www.veripool.org/wiki/verilator) is installed, we can use that as a linter to check the SERV source code -`cd $SERV/workspace && fusesoc run --target=lint serv` +`fusesoc run --target=lint serv` -## Running test software +If everything worked, the output should look like + + INFO: Preparing ::serv:1.0.2 + INFO: Setting up project + + INFO: Building simulation model + verilator -f serv_1.0.2.vc + INFO: Running + +## Running pre-built test software Build and run the single threaded zephyr hello world example with verilator (should be stopped with Ctrl-C): - cd $SERV/workspace - fusesoc run --target=verilator_tb servant --uart_baudrate=57600 --firmware=$SERV/serv/sw/zephyr_hello.hex + fusesoc run --target=verilator_tb servant --uart_baudrate=57600 --firmware=$SERV/sw/zephyr_hello.hex ..or... the multithreaded version - fusesoc run --target=verilator_tb servant --uart_baudrate=57600 --firmware=$SERV/serv/sw/zephyr_hello_mt.hex --memsize=16384 + fusesoc run --target=verilator_tb servant --uart_baudrate=57600 --firmware=$SERV/sw/zephyr_hello_mt.hex --memsize=16384 -...or... the philosophers example +Both should yield an output ending with - fusesoc run --target=verilator_tb servant --uart_baudrate=57600 --firmware=$SERV/serv/sw/zephyr_phil.hex --memsize=32768 + ***** Booting Zephyr OS zephyr-v1.14.1-4-gc7c2d62513fe ***** + Hello World! service + +For a more advanced example, we can also run the Dining philosophers demo + + fusesoc run --target=verilator_tb servant --uart_baudrate=57600 --firmware=$SERV/sw/zephyr_phil.hex --memsize=32768 ...or... the synchronization example - fusesoc run --target=verilator_tb servant --uart_baudrate=57600 --firmware=$SERV/serv/sw/zephyr_sync.hex --memsize=16384 + fusesoc run --target=verilator_tb servant --uart_baudrate=57600 --firmware=$SERV/sw/zephyr_sync.hex --memsize=16384 -Other applications can be tested by compiling and converting to bin and then hex e.g. with makehex.py found in `$SERV/serv/riscv-target/serv` +Other applications can be tested by compiling and converting to bin and then hex e.g. with makehex.py found in `$SERV/sw` -## Run the compliance tests +## Run RISC-V compliance tests Build the verilator model (if not already done) -`cd $SERV/workspace && fusesoc run --target=verilator_tb --setup --build servant` + fusesoc run --target=verilator_tb --build servant Download the tests repo -`cd $SERV && git clone https://github.com/riscv/riscv-compliance` + git clone https://github.com/riscv/riscv-compliance + +To run the RISC-V compliance tests, we need to supply the SERV-specific support files and point the test suite to where it can find a target to run (i.e. the previously built Verilator model) Run the compliance tests -`cd $SERV/riscv-compliance && make TARGETDIR=$SERV/serv/riscv-target RISCV_TARGET=serv RISCV_DECICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$SERV/workspace/build/servant_1.0.1/verilator_tb-verilator/Vservant_sim` + cd riscv-compliance && make TARGETDIR=$SERV/riscv-target RISCV_TARGET=serv RISCV_DECICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$SERV/build/servant_1.0.2/verilator_tb-verilator/Vservant_sim + +The above will run all tests in the rv32i test suite. Since SERV also implement the `rv32Zicsr` and `rv32Zifencei` extensions, these can also be tested by choosing any of them instead of rv32i as the `RISCV_ISA` variable. ## Run on hardware -The servant SoC has been ported to a number of different FPGA boards. To see all currently supported targets run +The servant SoC has been ported to an increasing number of different FPGA boards. To see all currently supported targets run fusesoc core show servant @@ -86,14 +99,12 @@ Some targets also depend on functionality in the FuseSoC base library (fusesoc-c Now we're ready to build. Note, for all the cases below, it's possible to run with `--memfile=$SERV/sw/blinky.hex` (or any other suitable program) as the last argument to preload the LED blink example -instead of hello world. If the `--memfile` option doesn't work, try upgrading -FuseSOC with `pip install --upgrade fusesoc`. +instead of hello world. ### TinyFPGA BX Pin A6 is used for UART output with 115200 baud rate. - cd $SERV/workspace fusesoc run --target=tinyfpga_bx servant tinyprog --program build/servant_1.0.1/tinyfpga_bx-icestorm/servant_1.0.1.bin @@ -101,7 +112,6 @@ Pin A6 is used for UART output with 115200 baud rate. Pin 9 is used for UART output with 57600 baud rate. - cd $SERV/workspace fusesoc run --target=icebreaker servant ### iCESugar @@ -110,14 +120,12 @@ Pin 6 is used for UART output with 115200 baud rate. Thanks to the onboard debugger, you can just connect the USB Type-C connector to the PC, and a serial console will show up. - cd $SERV/workspace fusesoc run --target=icesugar servant ### OrangeCrab R0.2 Pin D1 is used for UART output with 115200 baud rate. - cd $SERV/workspace fusesoc run --target=orangecrab_r0.2 servant dfu-util -d 1209:5af0 -D build/servant_1.0.2/orangecrab_r0.2-trellis/servant_1.0.2.bit @@ -126,14 +134,12 @@ Pin D1 is used for UART output with 115200 baud rate. Pin D10 (uart_rxd_out) is used for UART output with 57600 baud rate (to use blinky.hex change D10 to H5 (led[4]) in data/arty_a7_35t.xdc). - cd $SERV/workspace fusesoc run --target=arty_a7_35t servant ### DE0 Nano FPGA Pin D11 (Connector JP1, pin 38) is used for UART output with 57600 baud rate. DE0 Nano needs an external 3.3V UART to connect to this pin - cd $SERV/workspace fusesoc run --target=de0_nano servant ### Saanlima Pipistrello (Spartan6 LX45) @@ -141,14 +147,12 @@ FPGA Pin D11 (Connector JP1, pin 38) is used for UART output with 57600 baud rat Pin A10 (usb_data<1>) is used for UART output with 57600 baud rate (to use blinky.hex change A10 to V16 (led[0]) in data/pipistrello.ucf). - cd $SERV/workspace fusesoc run --target=pipistrello servant ### Alhambra II Pin 61 is used for UART output with 115200 baud rate. This pin is connected to a FT2232H chip in board, that manages the communications between the FPGA and the computer. - cd $SERV/workspace fusesoc run --target=alhambra servant iceprog -d i:0x0403:0x6010:0 build/servant_1.0.1/alhambra-icestorm/servant_1.0.1.bin @@ -156,7 +160,6 @@ Pin 61 is used for UART output with 115200 baud rate. This pin is connected to a Pin 95 is used as the GPIO output which is connected to the board's green LED. Due to this board's limited Embedded BRAM, programs with a maximum of 7168 bytes can be loaded. The default program for this board is blinky.hex. - cd $SERV/workspace fusesoc run --target=icestick servant iceprog build/servant_1.0.2/icestick-icestorm/servant_1.0.2.bin @@ -178,6 +181,42 @@ This will synthesize for the default Vivado part. To synthesise for a specific d fusesoc run --tool=vivado serv --pnr=none --part=xc7a100tcsg324-1 +## Zephyr support + +SERV, or rather the Servant SoC, can run the [Zephyr RTOS](https://www.zephyrproject.org). The Servant-specific drivers and BSP is located in the zephyr subdirectory of the SERV repository. In order to use Zephyr on Servant, a project directory structure must be set up that allows Zephyr to load the Servant-specific files as a module. + +First, the Zephyr SDK and the "west" build too must be installed. The [Zephyr getting started guide](https://docs.zephyrproject.org/latest/getting_started/index.html) describes these steps in more detail. + +Assuming that SERV was installed into `$WORKSPACE/fusesoc_libraries/serv` as per the prerequisites, run the following command to make the workspace also work as a Zephyr workspace. + + west init + +Specify the SERV repository as the manifest repository, meaning it will be the main entry point when Zephyr is looking for modules. + + west config manifest.path $SERV + +Get the right versions of all Zephyr submodules + + west update + +It should now be possible to build Zephyr applications for the Servant SoC within the workspace. This can be tested e.g. by building the Zephyr Hello world samples application + + cd zephyr/samples/hello_world + west build -b service + +After a successful build, Zephyr will create an elf and a bin file of the application in `build/zephyr/zephyr.{elf,bin}`. The bin file can be converted to a verilog hex file, which in turn can be preloaded to FPGA on-chip memories and run on a target board, or loaded into simulated RAM model when running simulations. + +To convert the newly built hello world example into a Verilog hex file, run + + python3 $SERV/sw/makehex.py zephyr/samples/hello_world/build/zephyr/zephyr.bin 4096 > hello.hex + +4096 is the number of 32-bit words to write and must be at least the size of the application binary. `hello.hex` is the resulting hex file. Running a simulation can now be done as described in [Running pre-built test software](#running-pre-built-test-software), e.g. + + fusesoc run --target=verilator_tb servant --uart_baudrate=57600 --firmware=/path/to/hello.hex + +Or to create an FPGA image with the application preloaded to on-chip RAM, e.g. for a Nexys A7 board, run + + fusesoc run --target=nexys_a7 servant --memfile=/path/to/hello.hex ## Good to know @@ -190,5 +229,4 @@ Don't go changing the clock frequency on a whim when running Zephyr. Or well, it ## TODO - Applications have to be preloaded to RAM at compile-time -- Store bootloader and register file together in a RAM - Make it faster and smaller diff --git a/west.yml b/west.yml new file mode 100644 index 0000000..1407f41 --- /dev/null +++ b/west.yml @@ -0,0 +1,9 @@ +manifest: + remotes: + - name: zephyrproject-rtos + url-base: https://github.com/zephyrproject-rtos + projects: + - name: zephyr + remote: zephyrproject-rtos + revision: v2.4.0 + import: true diff --git a/zephyr b/zephyr deleted file mode 160000 index a690d52..0000000 --- a/zephyr +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a690d52fa69f812924aa38f20c45f707c64fa16f diff --git a/zephyr/CMakeLists.txt b/zephyr/CMakeLists.txt new file mode 100644 index 0000000..359918e --- /dev/null +++ b/zephyr/CMakeLists.txt @@ -0,0 +1,4 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +add_subdirectory(drivers) diff --git a/zephyr/Kconfig b/zephyr/Kconfig new file mode 100644 index 0000000..b4e2f3b --- /dev/null +++ b/zephyr/Kconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +menu "SweRVolf" + +rsource "drivers/Kconfig" + +endmenu diff --git a/zephyr/boards/riscv/service/Kconfig.board b/zephyr/boards/riscv/service/Kconfig.board new file mode 100644 index 0000000..87eff30 --- /dev/null +++ b/zephyr/boards/riscv/service/Kconfig.board @@ -0,0 +1,7 @@ +# Copyright (c) 2020 Olof Kindgren +# +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_SERVICE + bool "servant SoC for iCE40" + depends on SOC_RISCV32_SERVANT diff --git a/zephyr/boards/riscv/service/Kconfig.defconfig b/zephyr/boards/riscv/service/Kconfig.defconfig new file mode 100644 index 0000000..b0eb0e9 --- /dev/null +++ b/zephyr/boards/riscv/service/Kconfig.defconfig @@ -0,0 +1,7 @@ +# Copyright (c) 2020 Olof Kindgren +# +# SPDX-License-Identifier: Apache-2.0 + +config BOARD + default "service" + depends on BOARD_SERVICE diff --git a/zephyr/boards/riscv/service/board.h b/zephyr/boards/riscv/service/board.h new file mode 100644 index 0000000..a0822eb --- /dev/null +++ b/zephyr/boards/riscv/service/board.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2020 Olof Kindgren + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __INC_BOARD_H +#define __INC_BOARD_H + +#include + +#endif /* __INC_BOARD_H */ diff --git a/zephyr/boards/riscv/service/service.dts b/zephyr/boards/riscv/service/service.dts new file mode 100644 index 0000000..840979d --- /dev/null +++ b/zephyr/boards/riscv/service/service.dts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2020 Olof Kindgren + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include + +/ { + chosen { + zephyr,sram = &ram; + }; + + ram: memory@0 { + compatible = "mmio-sram"; + reg = <0x0 0x8000>; + }; +}; + diff --git a/zephyr/boards/riscv/service/service.yaml b/zephyr/boards/riscv/service/service.yaml new file mode 100644 index 0000000..a815d23 --- /dev/null +++ b/zephyr/boards/riscv/service/service.yaml @@ -0,0 +1,15 @@ +# Copyright (c) 2020 Olof Kindgren +# +# SPDX-License-Identifier: Apache-2.0 + +identifier: service +name: servant SoC for iCE40 +type: mcu +arch: riscv32 +toolchain: + - zephyr +ram: 32 +testing: + ignore_tags: + - net + - bluetooth diff --git a/zephyr/boards/riscv/service/service_defconfig b/zephyr/boards/riscv/service/service_defconfig new file mode 100644 index 0000000..e8bedf2 --- /dev/null +++ b/zephyr/boards/riscv/service/service_defconfig @@ -0,0 +1,13 @@ +# Copyright (c) 2020 Olof Kindgren +# +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_BOARD_SERVICE=y +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_BITBANG=y + +CONFIG_UART_CONSOLE=y +CONFIG_UART_CONSOLE_ON_DEV_NAME="uart0" + +CONFIG_XIP=n diff --git a/zephyr/drivers/CMakeLists.txt b/zephyr/drivers/CMakeLists.txt new file mode 100644 index 0000000..0ba409a --- /dev/null +++ b/zephyr/drivers/CMakeLists.txt @@ -0,0 +1,6 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +add_subdirectory_ifdef(CONFIG_SERIAL_HAS_DRIVER serial) +add_subdirectory_ifdef(CONFIG_SYS_CLOCK_EXISTS timer) + diff --git a/zephyr/drivers/Kconfig b/zephyr/drivers/Kconfig new file mode 100644 index 0000000..b46ef2f --- /dev/null +++ b/zephyr/drivers/Kconfig @@ -0,0 +1,10 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +menu "Device Drivers" + +rsource "serial/Kconfig" + +rsource "timer/Kconfig" + +endmenu diff --git a/zephyr/drivers/serial/CMakeLists.txt b/zephyr/drivers/serial/CMakeLists.txt new file mode 100644 index 0000000..1fd55b0 --- /dev/null +++ b/zephyr/drivers/serial/CMakeLists.txt @@ -0,0 +1,6 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +set(ZEPHYR_CURRENT_LIBRARY drivers__serial) + +zephyr_library_sources_ifdef(CONFIG_UART_BITBANG uart_bitbang.c) diff --git a/zephyr/drivers/serial/Kconfig b/zephyr/drivers/serial/Kconfig new file mode 100644 index 0000000..39a1388 --- /dev/null +++ b/zephyr/drivers/serial/Kconfig @@ -0,0 +1,13 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +if SERIAL + +menuconfig UART_BITBANG + bool "SERV bitbang serial driver" + select SERIAL_HAS_DRIVER + help + Enables the SERV bitbang serial driver. + Hardcoded to send at ~57600 baud rate with a 16MHz clock + +endif diff --git a/zephyr/drivers/serial/uart_bitbang.c b/zephyr/drivers/serial/uart_bitbang.c new file mode 100644 index 0000000..d2b4ef1 --- /dev/null +++ b/zephyr/drivers/serial/uart_bitbang.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2020 Olof Kindgren + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +#define reg_uart_data (*(volatile uint32_t*)UART_BITBANG_BASE) + +static struct k_spinlock lock; + +static void uart_bitbang_poll_out(const struct device *dev, unsigned char c) +{ + ARG_UNUSED(dev); + + k_spinlock_key_t key = k_spin_lock(&lock); + + int cout = (c|0x100) << 1; + do { + reg_uart_data = cout; + cout >>= 1; + __asm__ __volatile__ ("nop"); + __asm__ __volatile__ ("nop"); + } while (cout); + + k_spin_unlock(&lock, key); +} + +static int uart_bitbang_poll_in(const struct device *dev, unsigned char *c) +{ + ARG_UNUSED(dev); + + *c = reg_uart_data; + return 0; +} + +static int uart_bitbang_init(const struct device *dev) +{ + ARG_UNUSED(dev); + reg_uart_data = 1; + return 0; +} + +static const struct uart_driver_api uart_bitbang_driver_api = { + .poll_in = uart_bitbang_poll_in, + .poll_out = uart_bitbang_poll_out, + .err_check = NULL, +}; + + +DEVICE_AND_API_INIT(uart_bitbang, "uart0", &uart_bitbang_init, + NULL, NULL, + PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + &uart_bitbang_driver_api); diff --git a/zephyr/drivers/timer/CMakeLists.txt b/zephyr/drivers/timer/CMakeLists.txt new file mode 100644 index 0000000..0a14e26 --- /dev/null +++ b/zephyr/drivers/timer/CMakeLists.txt @@ -0,0 +1,5 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +zephyr_library_sources_ifdef(CONFIG_SERV_TIMER serv_timer.c) + diff --git a/zephyr/drivers/timer/Kconfig b/zephyr/drivers/timer/Kconfig new file mode 100644 index 0000000..77545ad --- /dev/null +++ b/zephyr/drivers/timer/Kconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +config SERV_TIMER + bool "SERV Timer" +# select TICKLESS_CAPABLE + help + This module implements a kernel device driver for the SERV + timer driver. It provides the standard "system clock driver" interfaces. diff --git a/zephyr/drivers/timer/serv_timer.c b/zephyr/drivers/timer/serv_timer.c new file mode 100644 index 0000000..e7474fe --- /dev/null +++ b/zephyr/drivers/timer/serv_timer.c @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2020 Olof Kindgren + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + This is basically a 32-bit version of riscv_machine_timer.c fro Zephyr +*/ +#include +#include +#include +#include + +#define CYC_PER_TICK ((uint32_t)((uint32_t)sys_clock_hw_cycles_per_sec() \ + / (uint32_t)CONFIG_SYS_CLOCK_TICKS_PER_SEC)) +#define MAX_CYC 0xffffffffu +#define MAX_TICKS ((MAX_CYC - CYC_PER_TICK) / CYC_PER_TICK) +#define MIN_DELAY 1000 + +#define TICKLESS IS_ENABLED(CONFIG_TICKLESS_KERNEL) + +static struct k_spinlock lock; +static uint32_t last_count; + +static ALWAYS_INLINE void set_mtimecmp(uint32_t time) +{ + sys_write32(time, SERV_TIMER_BASE); +} + +static ALWAYS_INLINE uint32_t mtime(void) +{ + return sys_read32(SERV_TIMER_BASE); +} + +static void timer_isr(void *arg) +{ + ARG_UNUSED(arg); + + k_spinlock_key_t key = k_spin_lock(&lock); + uint32_t now = mtime(); + uint32_t dticks = ((now - last_count) / CYC_PER_TICK); + + last_count += dticks * CYC_PER_TICK; + + if (!TICKLESS) { + uint32_t next = last_count + CYC_PER_TICK; + + if ((int32_t)(next - now) < MIN_DELAY) { + next += CYC_PER_TICK; + } + set_mtimecmp(next); + } + + k_spin_unlock(&lock, key); + z_clock_announce(IS_ENABLED(CONFIG_TICKLESS_KERNEL) ? dticks : 1); +} + +int z_clock_driver_init(const struct device *device) +{ + ARG_UNUSED(device); + + IRQ_CONNECT(RISCV_MACHINE_TIMER_IRQ, 0, timer_isr, NULL, 0); + set_mtimecmp(mtime() + (uint32_t)CYC_PER_TICK); + irq_enable(RISCV_MACHINE_TIMER_IRQ); + return 0; +} + +void z_clock_set_timeout(int32_t ticks, bool idle) +{ + ARG_UNUSED(idle); + +#if defined(CONFIG_TICKLESS_KERNEL) + /* RISCV has no idle handler yet, so if we try to spin on the + * logic below to reset the comparator, we'll always bump it + * forward to the "next tick" due to MIN_DELAY handling and + * the interrupt will never fire! Just rely on the fact that + * the OS gave us the proper timeout already. + */ + if (idle) { + return; + } + + ticks = ticks == K_TICKS_FOREVER ? MAX_TICKS : ticks; + ticks = MAX(MIN(ticks - 1, (int32_t)MAX_TICKS), 0); + + k_spinlock_key_t key = k_spin_lock(&lock); + uint32_t now = mtime(); + uint32_t adj, cyc = ticks * CYC_PER_TICK; + + /* Round up to next tick boundary. */ + adj = (now - last_count) + (CYC_PER_TICK - 1); + if (cyc <= MAX_CYC - adj) { + cyc += adj; + } else { + cyc = MAX_CYC; + } + cyc = (cyc / CYC_PER_TICK) * CYC_PER_TICK; + + if ((int32_t)(cyc + last_count - now) < MIN_DELAY) { + cyc += CYC_PER_TICK; + } + + set_mtimecmp(cyc + last_count); + k_spin_unlock(&lock, key); +#endif +} + +uint32_t z_clock_elapsed(void) +{ + if (!IS_ENABLED(CONFIG_TICKLESS_KERNEL)) { + return 0; + } + + k_spinlock_key_t key = k_spin_lock(&lock); + uint32_t ret = (mtime() - last_count) / CYC_PER_TICK; + + k_spin_unlock(&lock, key); + return ret; +} + +uint32_t z_timer_cycle_get_32(void) +{ + return mtime(); +} diff --git a/zephyr/dts/riscv/serv.dtsi b/zephyr/dts/riscv/serv.dtsi new file mode 100644 index 0000000..e92b8d7 --- /dev/null +++ b/zephyr/dts/riscv/serv.dtsi @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2020 Olof Kindgren + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + #address-cells = <1>; + #size-cells = <1>; + compatible = "olofk,servant"; +}; diff --git a/zephyr/module.yml b/zephyr/module.yml new file mode 100644 index 0000000..07da43f --- /dev/null +++ b/zephyr/module.yml @@ -0,0 +1,5 @@ +build: + settings: + board_root: zephyr + dts_root: zephyr + soc_root: zephyr diff --git a/zephyr/soc/riscv/servant/CMakeLists.txt b/zephyr/soc/riscv/servant/CMakeLists.txt new file mode 100644 index 0000000..ffe3a45 --- /dev/null +++ b/zephyr/soc/riscv/servant/CMakeLists.txt @@ -0,0 +1,7 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +zephyr_sources( + soc_irq.S + vector.S + irq.c) diff --git a/zephyr/soc/riscv/servant/Kconfig.defconfig b/zephyr/soc/riscv/servant/Kconfig.defconfig new file mode 100644 index 0000000..8479a98 --- /dev/null +++ b/zephyr/soc/riscv/servant/Kconfig.defconfig @@ -0,0 +1,26 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +if SOC_RISCV32_SERVANT + +config SOC + string + default "servant" + +config SYS_CLOCK_HW_CYCLES_PER_SEC + int + default 16000000 + +config RISCV_SOC_INTERRUPT_INIT + bool + default y + +config NUM_IRQS + int + default 8 + +config SERV_TIMER + bool + default y + +endif # SOC_RISCV32_SERVANT diff --git a/zephyr/soc/riscv/servant/Kconfig.soc b/zephyr/soc/riscv/servant/Kconfig.soc new file mode 100644 index 0000000..2aa0577 --- /dev/null +++ b/zephyr/soc/riscv/servant/Kconfig.soc @@ -0,0 +1,7 @@ +# Copyright (c) 2020 Olof Kindgren +# SPDX-License-Identifier: Apache-2.0 + +config SOC_RISCV32_SERVANT + bool "servant SoC" + select RISCV + select ATOMIC_OPERATIONS_C diff --git a/zephyr/soc/riscv/servant/irq.c b/zephyr/soc/riscv/servant/irq.c new file mode 100644 index 0000000..a57d647 --- /dev/null +++ b/zephyr/soc/riscv/servant/irq.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017 Jean-Paul Etienne + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * @brief interrupt management code for riscv SOCs supporting the riscv + privileged architecture specification + */ +#include + +void arch_irq_enable(unsigned int irq) +{ + uint32_t mie; + + /* + * CSR mie register is updated using atomic instruction csrrs + * (atomic read and set bits in CSR register) + */ + __asm__ volatile ("csrrs %0, mie, %1\n" + : "=r" (mie) + : "r" (1 << irq)); +} + +void arch_irq_disable(unsigned int irq) +{ + uint32_t mie; + + /* + * Use atomic instruction csrrc to disable device interrupt in mie CSR. + * (atomic read and clear bits in CSR register) + */ + __asm__ volatile ("csrrc %0, mie, %1\n" + : "=r" (mie) + : "r" (1 << irq)); +}; + +int arch_irq_is_enabled(unsigned int irq) +{ + uint32_t mie; + + __asm__ volatile ("csrr %0, mie" : "=r" (mie)); + + return !!(mie & (1 << irq)); +} + +#if defined(CONFIG_RISCV_SOC_INTERRUPT_INIT) +void soc_interrupt_init(void) +{ + /* ensure that all interrupts are disabled */ + (void)irq_lock(); + + __asm__ volatile ("csrwi mie, 0\n" + "csrwi mip, 0\n"); +} +#endif diff --git a/zephyr/soc/riscv/servant/linker.ld b/zephyr/soc/riscv/servant/linker.ld new file mode 100644 index 0000000..85e1212 --- /dev/null +++ b/zephyr/soc/riscv/servant/linker.ld @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2018 Antmicro + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include diff --git a/zephyr/soc/riscv/servant/soc.h b/zephyr/soc/riscv/servant/soc.h new file mode 100644 index 0000000..0780bb5 --- /dev/null +++ b/zephyr/soc/riscv/servant/soc.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020 Olof Kindgren + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __RISCV32_SERVANT_SOC_H_ +#define __RISCV32_SERVANT_SOC_H_ + +#include +#include + +/* Bitbang UART configuration */ +#define UART_BITBANG_BASE 0x40000000 + +/* Timer configuration */ +#define SERV_TIMER_BASE 0x80000000 +#define SERV_TIMER_IRQ 7 + +/* lib-c hooks required RAM defined variables */ +#define RISCV_RAM_BASE DT_SRAM_BASE_ADDR_ADDRESS +#define RISCV_RAM_SIZE DT_SRAM_SIZE + +#endif /* __RISCV32_SERVANT_SOC_H_ */ diff --git a/zephyr/soc/riscv/servant/soc_common.h b/zephyr/soc/riscv/servant/soc_common.h new file mode 100644 index 0000000..37c8d6d --- /dev/null +++ b/zephyr/soc/riscv/servant/soc_common.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Jean-Paul Etienne + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file configuration macros for riscv SOCs supporting the riscv + * privileged architecture specification + */ + +#ifndef __SOC_COMMON_H_ +#define __SOC_COMMON_H_ + +/* IRQ numbers */ +#define RISCV_MACHINE_SOFT_IRQ 3 /* Machine Software Interrupt */ +#define RISCV_MACHINE_TIMER_IRQ 7 /* Machine Timer Interrupt */ +#define RISCV_MACHINE_EXT_IRQ 11 /* Machine External Interrupt */ + +/* ECALL Exception numbers */ +#define SOC_MCAUSE_ECALL_EXP 11 /* Machine ECALL instruction */ +#define SOC_MCAUSE_USER_ECALL_EXP 8 /* User ECALL instruction */ + +/* SOC-specific MCAUSE bitfields */ +#ifdef CONFIG_64BIT +/* Interrupt Mask */ +#define SOC_MCAUSE_IRQ_MASK (1 << 63) +/* Exception code Mask */ +#define SOC_MCAUSE_EXP_MASK 0x7FFFFFFFFFFFFFFF +#else +/* Interrupt Mask */ +#define SOC_MCAUSE_IRQ_MASK (1 << 31) +/* Exception code Mask */ +#define SOC_MCAUSE_EXP_MASK 0x7FFFFFFF +#endif + +/* SOC-Specific EXIT ISR command */ +#define SOC_ERET mret + +#ifndef _ASMLANGUAGE + +#if defined(CONFIG_RISCV_SOC_INTERRUPT_INIT) +void soc_interrupt_init(void); +#endif + +#if defined(CONFIG_RISCV_HAS_PLIC) +void riscv_plic_irq_enable(uint32_t irq); +void riscv_plic_irq_disable(uint32_t irq); +int riscv_plic_irq_is_enabled(uint32_t irq); +void riscv_plic_set_priority(uint32_t irq, uint32_t priority); +int riscv_plic_get_irq(void); +#endif + +#endif /* !_ASMLANGUAGE */ + +#endif /* __SOC_COMMON_H_ */ diff --git a/zephyr/soc/riscv/servant/soc_irq.S b/zephyr/soc/riscv/servant/soc_irq.S new file mode 100644 index 0000000..3a8904d --- /dev/null +++ b/zephyr/soc/riscv/servant/soc_irq.S @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017 Jean-Paul Etienne + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * common interrupt management code for riscv SOCs supporting the riscv + * privileged architecture specification + */ +#include +#include +#include +#include +#include + +/* exports */ +GTEXT(__soc_handle_irq) + +/* + * SOC-specific function to handle pending IRQ number generating the interrupt. + * Exception number is given as parameter via register a0. + */ +SECTION_FUNC(exception.other, __soc_handle_irq) + /* Clear exception number from CSR mip register */ + li t1, 1 + sll t0, t1, a0 + csrrc t1, mip, t0 + + /* Return */ + jalr x0, ra + +/* + * __soc_is_irq is defined as .weak to allow re-implementation by + * SOCs that does not truly follow the riscv privilege specification. + */ +WTEXT(__soc_is_irq) + +/* + * SOC-specific function to determine if the exception is the result of a + * an interrupt or an exception + * return 1 (interrupt) or 0 (exception) + * + */ +SECTION_FUNC(exception.other, __soc_is_irq) + /* Read mcause and check if interrupt bit is set */ + csrr t0, mcause + li t1, SOC_MCAUSE_IRQ_MASK + and t0, t0, t1 + + /* If interrupt bit is not set, return with 0 */ + addi a0, x0, 0 + beqz t0, not_interrupt + addi a0, a0, 1 + +not_interrupt: + /* return */ + jalr x0, ra diff --git a/zephyr/soc/riscv/servant/vector.S b/zephyr/soc/riscv/servant/vector.S new file mode 100644 index 0000000..a6decc5 --- /dev/null +++ b/zephyr/soc/riscv/servant/vector.S @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2017 Jean-Paul Etienne + * Contributors: 2018 Antmicro + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/* exports */ +GTEXT(__start) + +/* imports */ +GTEXT(__initialize) +GTEXT(__irq_wrapper) + +SECTION_FUNC(vectors, __start) + .option norvc; + + /* + * Set mtvec (Machine Trap-Vector Base-Address Register) + * to __irq_wrapper. + */ + la t0, __irq_wrapper + csrw mtvec, t0 + + /* Jump to __initialize */ + tail __initialize From 9a920438fac74c1ef3bef4d7b5b999b44e9fce21 Mon Sep 17 00:00:00 2001 From: Jansen Arruda Date: Thu, 17 Dec 2020 16:09:13 -0300 Subject: [PATCH 071/289] Update README.md Correct a typo in `fusesoc library add fusesoc_cores https://github.com/fusesoc/fusesoc_cores` to `fusesoc library add fusesoc_cores https://github.com/fusesoc/fusesoc-cores` --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa31403..9391bd7 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Install FuseSoC Add the FuseSoC standard library -`fusesoc library add fusesoc_cores https://github.com/fusesoc/fusesoc_cores` +`fusesoc library add fusesoc_cores https://github.com/fusesoc/fusesoc-cores` The FuseSoC standard library already contain a version of SERV, but if we want to make changes to SERV, run the bundled example or use the Zephyr support, it is better to add SERV as a separate library into the workspace From c9f41b54e8dc93aa798f466c93f10d84421270bb Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 22 Dec 2020 21:52:45 +0100 Subject: [PATCH 072/289] Optimize init signal --- rtl/serv_alu.v | 3 +-- rtl/serv_bufreg.v | 4 ++-- rtl/serv_state.v | 29 +++++++++++------------------ rtl/serv_top.v | 1 - 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index eeb021c..aa307bf 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -10,7 +10,6 @@ module serv_alu input wire i_imm, input wire i_op_b_rs2, input wire i_buf, - input wire i_init, input wire i_cnt_done, input wire i_sub, input wire [1:0] i_bool_op, @@ -41,7 +40,7 @@ module serv_alu serv_shift shift ( .i_clk (clk), - .i_load (i_init), + .i_load (i_cnt_done), .i_shamt (shamt), .i_shamt_msb (shamt_msb), .i_signbit (i_sh_signed & i_rs1), diff --git a/rtl/serv_bufreg.v b/rtl/serv_bufreg.v index 1f8c70c..0c37d69 100644 --- a/rtl/serv_bufreg.v +++ b/rtl/serv_bufreg.v @@ -24,8 +24,8 @@ module serv_bufreg assign {c,q} = {1'b0,(i_rs1 & i_rs1_en)} + {1'b0,(i_imm & i_imm_en & !clr_lsb)} + c_r; always @(posedge i_clk) begin - //Clear carry when not in INIT state - c_r <= c & i_init; + //Make sure carry is cleared before loading new data + c_r <= c & i_en; if (i_en) data <= {(i_loop & !i_init) ? o_q : q, data[31:1]}; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 19b192b..95e37d6 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -23,7 +23,7 @@ module serv_state input wire i_slt_op, input wire i_e_op, input wire i_rd_op, - output reg o_init, + output wire o_init, output reg o_cnt_en, output wire o_cnt0, output wire o_cnt0to3, @@ -80,9 +80,7 @@ module serv_state //slt*, branch/jump, shift, load/store wire two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op; - reg stage_two_pending; - - assign o_dbus_cyc = !o_cnt_en & stage_two_pending & i_mem_op & !i_mem_misalign; + assign o_dbus_cyc = !o_cnt_en & init_done & i_mem_op & !i_mem_misalign; wire trap_pending = WITH_CSR & ((o_ctrl_jump & i_ctrl_misalign) | i_mem_misalign); @@ -91,7 +89,7 @@ module serv_state assign o_rf_rreq = i_ibus_ack | (stage_two_req & trap_pending); //Prepare RF for writes when everything is ready to enter stage two - assign o_rf_wreq = ((i_shift_op & i_alu_sh_done & stage_two_pending) | (i_mem_op & i_dbus_ack) | (stage_two_req & (i_slt_op | i_branch_op))) & !trap_pending; + assign o_rf_wreq = ((i_shift_op & i_alu_sh_done & init_done) | (i_mem_op & i_dbus_ack) | (stage_two_req & (i_slt_op | i_branch_op))) & !trap_pending; assign o_rf_rd_en = i_rd_op & o_cnt_en & !o_init; @@ -103,6 +101,9 @@ module serv_state assign o_ibus_cyc = ibus_cyc & !i_rst; + assign o_init = two_stage_op & !o_pending_irq & !init_done; + reg init_done; + always @(posedge i_clk) begin //ibus_cyc changes on three conditions. //1. i_rst is asserted. Together with the async gating above, o_ibus_cyc @@ -116,23 +117,15 @@ module serv_state if (i_ibus_ack | o_cnt_done | i_rst) ibus_cyc <= o_ctrl_pc_en | i_rst; - if (o_cnt_done) - o_ctrl_jump <= o_init & take_branch; - - if (o_cnt_en) - stage_two_pending <= o_init; - + if (o_cnt_done) begin + init_done <= o_init & !init_done; + o_ctrl_jump <= o_init & take_branch; + end o_cnt_done <= (o_cnt[4:2] == 3'b111) & o_cnt_r[2]; //Need a strobe for the first cycle in the IDLE state after INIT stage_two_req <= o_cnt_done & o_init; - if (i_rf_ready & !stage_two_pending) - o_init <= two_stage_op & !o_pending_irq; - - if (o_cnt_done) - o_init <= 1'b0; - if (i_rf_ready) o_cnt_en <= 1'b1; @@ -147,7 +140,7 @@ module serv_state if (RESET_STRATEGY != "NONE") begin o_cnt_en <= 1'b0; o_cnt <= 3'd0; - stage_two_pending <= 1'b0; + init_done <= 1'b0; o_ctrl_jump <= 1'b0; o_cnt_r <= 4'b0001; end diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 22fae9c..3c443d9 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -331,7 +331,6 @@ module serv_top //State .i_en (cnt_en), .i_cnt0 (cnt0), - .i_init (init), .i_cnt_done (cnt_done), .i_shamt_en (alu_shamt_en), .o_cmp (alu_cmp), From a960fd768bf7c393b7b6f33fed048aa8ceba7954 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 22 Dec 2020 22:04:53 +0100 Subject: [PATCH 073/289] Remove redundant bufreg_loop control signal --- doc/serv_bufreg_int.png | Bin 22781 -> 21348 bytes rtl/serv_bufreg.v | 3 +-- rtl/serv_decode.v | 5 ----- rtl/serv_top.v | 3 --- 4 files changed, 1 insertion(+), 10 deletions(-) diff --git a/doc/serv_bufreg_int.png b/doc/serv_bufreg_int.png index 972aac110fccb10c6681f7fdd8931d06f2b172ae..2d07cfe93a5829e2d6b1887912e5a020dc76e2fb 100644 GIT binary patch literal 21348 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 QD1_|U^|L{?zTKsN19wPpPyhe` diff --git a/rtl/serv_bufreg.v b/rtl/serv_bufreg.v index 0c37d69..e9ac7e4 100644 --- a/rtl/serv_bufreg.v +++ b/rtl/serv_bufreg.v @@ -5,7 +5,6 @@ module serv_bufreg input wire i_cnt1, input wire i_en, input wire i_init, - input wire i_loop, input wire i_rs1, input wire i_rs1_en, input wire i_imm, @@ -28,7 +27,7 @@ module serv_bufreg c_r <= c & i_en; if (i_en) - data <= {(i_loop & !i_init) ? o_q : q, data[31:1]}; + data <= {i_init ? q : o_q, data[31:1]}; if (i_cnt0 & i_init) o_lsb[0] <= q; diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index b650119..17f341f 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -16,7 +16,6 @@ module serv_decode output wire o_slt_op, output wire o_rd_op, //To bufreg - output wire o_bufreg_loop, output wire o_bufreg_rs1_en, output wire o_bufreg_imm_en, output wire o_bufreg_clr_lsb, @@ -77,10 +76,6 @@ module serv_decode assign o_bufreg_rs1_en = !opcode[4] | (!opcode[1] & opcode[0]); assign o_bufreg_imm_en = !opcode[2]; - - //Loop bufreg contents for shift operations - assign o_bufreg_loop = op_or_opimm; - //Clear LSB of immediate for BRANCH and JAL ops //True for BRANCH and JAL //False for JALR/LOAD/STORE/OP/OPIMM? diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 3c443d9..aaa723f 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -105,7 +105,6 @@ module serv_top wire bufreg_en; wire bufreg_rs1_en; wire bufreg_imm_en; - wire bufreg_loop; wire bufreg_clr_lsb; wire bufreg_q; @@ -222,7 +221,6 @@ module serv_top .o_slt_op (slt_op), .o_rd_op (rd_op), //To bufreg - .o_bufreg_loop (bufreg_loop), .o_bufreg_rs1_en (bufreg_rs1_en), .o_bufreg_imm_en (bufreg_imm_en), .o_bufreg_clr_lsb (bufreg_clr_lsb), @@ -285,7 +283,6 @@ module serv_top .i_init (init), .o_lsb (lsb), //Control - .i_loop (bufreg_loop), .i_rs1_en (bufreg_rs1_en), .i_imm_en (bufreg_imm_en), .i_clr_lsb (bufreg_clr_lsb), From 14cbe03a61c28959fd0d334c39ad7f65c1f2eee4 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 22 Dec 2020 23:31:52 +0100 Subject: [PATCH 074/289] Sync up quartus-specific RAM to regular RAM module --- servant/servant_ram_quartus.sv | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/servant/servant_ram_quartus.sv b/servant/servant_ram_quartus.sv index 8073359..95dcdca 100644 --- a/servant/servant_ram_quartus.sv +++ b/servant/servant_ram_quartus.sv @@ -3,8 +3,10 @@ module servant_ram #(//Memory parameters parameter depth = 256, parameter aw = $clog2(depth), + parameter RESET_STRATEGY = "", parameter memfile = "") (input wire i_wb_clk, + input wire i_wb_rst, input wire [aw-1:2] i_wb_adr, input wire [31:0] i_wb_dat, input wire [3:0] i_wb_sel, @@ -20,7 +22,10 @@ module servant_ram wire [aw-3:0] addr = i_wb_adr[aw-1:2]; always @(posedge i_wb_clk) - o_wb_ack <= i_wb_cyc & !o_wb_ack; + if (i_wb_rst & (RESET_STRATEGY != "NONE")) + o_wb_ack <= 1'b0; + else + o_wb_ack <= i_wb_cyc & !o_wb_ack; always_ff @(posedge i_wb_clk) begin if(we) begin From ca1a07f684ca633601201ee5708f8f78a48339d9 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 29 Dec 2020 23:35:17 +0100 Subject: [PATCH 075/289] Document and clean up interface of serv_immdec --- doc/index.rst | 11 +++++++++++ doc/serv_immdec.png | Bin 0 -> 11010 bytes doc/serv_immdec_int.png | Bin 0 -> 40699 bytes rtl/serv_immdec.v | 16 +++++++++------- rtl/serv_top.v | 27 +++++++++++++++------------ 5 files changed, 35 insertions(+), 19 deletions(-) create mode 100644 doc/serv_immdec.png create mode 100644 doc/serv_immdec_int.png diff --git a/doc/index.rst b/doc/index.rst index 20eb826..74608ff 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -95,6 +95,17 @@ serv_decode is responsible for decoding the operation word coming from ibus into .. image:: serv_decode_int.png +serv_immdec +^^^^^^^^^^^ + +.. image:: serv_immdec.png + +The main responsibility of serv_immdec is to stitch together the pieces of immediates from the instruction word and push it out in the correct order. When a new instruction arrives, the relevant parts are placed into a number of shift registers, and the connections between the registers are setup differently depending on the type of operation. + +serv_immdec also extracts the register addresses from the operation word. + +.. image:: serv_immdec_int.png + serv_mem_if ^^^^^^^^^^^ diff --git a/doc/serv_immdec.png b/doc/serv_immdec.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ff1d9b0bcecf21399b0cb651407005255c7a7b GIT binary patch literal 11010 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 D_x{-< literal 0 HcmV?d00001 diff --git a/doc/serv_immdec_int.png b/doc/serv_immdec_int.png new file mode 100644 index 0000000000000000000000000000000000000000..cc462e204990daae5ce7a88acddeb869f78f01e0 GIT binary patch literal 40699 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

RmQysG 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 F{|Cm6j1~X@ literal 0 HcmV?d00001 diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v index 7262745..0216be7 100644 --- a/rtl/serv_immdec.v +++ b/rtl/serv_immdec.v @@ -2,19 +2,21 @@ module serv_immdec ( input wire i_clk, - //Input + //State input wire i_cnt_en, - input wire i_csr_imm_en, - output wire o_csr_imm, - input wire [31:2] i_wb_rdt, - input wire i_wb_en, input wire i_cnt_done, + //Control + input wire i_csr_imm_en, input wire [3:0] i_ctrl, - //To RF output wire [4:0] o_rd_addr, output wire [4:0] o_rs1_addr, output wire [4:0] o_rs2_addr, - output wire o_imm); + //Data + output wire o_csr_imm, + output wire o_imm, + //External + input wire i_wb_en, + input wire [31:7] i_wb_rdt); reg signbit; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index aaa723f..92076af 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -259,19 +259,22 @@ module serv_top serv_immdec immdec ( - .i_clk (clk), - .i_cnt_en (cnt_en), + .i_clk (clk), + //State + .i_cnt_en (cnt_en), + .i_cnt_done (cnt_done), + //Control .i_csr_imm_en (csr_imm_en), - .o_csr_imm (csr_imm), - .i_wb_rdt (i_ibus_rdt[31:2]), - .i_wb_en (i_ibus_ack), - .i_ctrl (immdec_ctrl), - .i_cnt_done (cnt_done), - //To RF - .o_rd_addr (rd_addr), - .o_rs1_addr (rs1_addr), - .o_rs2_addr (rs2_addr), - .o_imm (imm)); + .i_ctrl (immdec_ctrl), + .o_rd_addr (rd_addr), + .o_rs1_addr (rs1_addr), + .o_rs2_addr (rs2_addr), + //Data + .o_csr_imm (csr_imm), + .o_imm (imm), + //External + .i_wb_en (i_ibus_ack), + .i_wb_rdt (i_ibus_rdt[31:7])); serv_bufreg bufreg ( From 89bf09922a4586da1cc60cf1f6568068ab0bcc9b Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 30 Dec 2020 14:31:07 +0100 Subject: [PATCH 076/289] Clarify immdec and fix doc formatting --- doc/index.rst | 12 ++---------- doc/serv_immdec_int.png | Bin 40699 -> 60851 bytes 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/doc/index.rst b/doc/index.rst index 74608ff..b05bc6a 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -4,24 +4,16 @@ contain the root `toctree` directive. SERV user manual -================================ +================ .. toctree:: :maxdepth: 2 :caption: Contents: - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - Modules ------- -SERV is a bit-serial CPU which means that the internal datapath is one bit wide. :ref:`dataflow` show the internal dataflow. For each instructions, data is read from the register file or the immediate fields of the instruction word and the result of the operation is stored back into the register file. Reading and writing memory is handled through the memory interface module. +SERV is a bit-serial CPU which means that the internal datapath is one bit wide. :ref:`dataflow` show the internal dataflow. For each instruction, data is read from the register file or the immediate fields of the instruction word and the result of the operation is stored back into the register file. Reading and writing memory is handled through the memory interface module. .. _dataflow: diff --git a/doc/serv_immdec_int.png b/doc/serv_immdec_int.png index cc462e204990daae5ce7a88acddeb869f78f01e0..1236b5b9750127c0f11a553c20578ba9e71e9a88 100644 GIT binary patch delta 38300 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 From 71de6101297ae48fc18600300dbd4ada7172d0b0 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 31 Dec 2020 00:48:44 +0100 Subject: [PATCH 077/289] Fix serv_dataflow --- doc/serv_dataflow.png | Bin 38897 -> 42958 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/serv_dataflow.png b/doc/serv_dataflow.png index a7acae3e4b01cb9fe05bb5143f966331ed32e980..1d701559ef8ace802576410259b5a6217d746812 100644 GIT binary patch literal 42958 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 literal 38897 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

2(boGzQQ6S8}uVJ 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 yOUxUp{ Date: Sat, 2 Jan 2021 00:02:23 +0100 Subject: [PATCH 078/289] Clean up and document serv_mem_if --- doc/index.rst | 32 ++++++++++++++++++++++++++++++++ doc/serv_mem_if_int.png | Bin 0 -> 65840 bytes rtl/serv_mem_if.v | 19 ++++++++++++------- rtl/serv_top.v | 14 +++++++------- 4 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 doc/serv_mem_if_int.png diff --git a/doc/index.rst b/doc/index.rst index b05bc6a..34dbf15 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -105,6 +105,38 @@ serv_mem_if serv_mem_if prepares the data to be sent out on the dbus during store operations and serializes the incoming data during loads +The memory interface is centered around four byte-wide shift registers connected in series. During store operations, the `dat_en` signal is asserted long enough to shift in the data from rs2 to the right place in the shift registers and the parallel output of the shift registers is then presented to the data bus as a 32-bit word together with a byte mask. The `Data bus byte mask`_ table summarizes the logic for when the individual byte select signals are asserted depending on the two LSB of the data address together with the size (byte, halfword, word) of the write operation. + +During load operations, the data from the bus is latched into the shift registers. `dat_en` is again asserted to shift out data from the registers. `i_lsb` decides from which byte stage of the shift register to tap the data, depending on the alignment of the received data. The `dat_valid` signal makes sure to only present valid data to `o_rd` and otherwise fill in with zeros or sign extension. + +When SERV is built with `WITH_CSR`, there is also logic to detect misaligned accesses which asserts the o_misalign flag to the core. + +.. image:: serv_mem_if_int.png + +.. _`Data bus byte mask`: + ++-------+---+---------------------+-----------------+----------------------+-------------+ +|op type|lsb| 3| 2| 1| 0| ++=======+===+=====================+=================+======================+=============+ +|sb | 00| 0| 0| 0| 1| ++-------+---+---------------------+-----------------+----------------------+-------------+ +|sb | 01| 0| 0| 1| 0| ++-------+---+---------------------+-----------------+----------------------+-------------+ +|sb | 10| 0| 1| 0| 0| ++-------+---+---------------------+-----------------+----------------------+-------------+ +|sb | 11| 1| 0| 0| 0| ++-------+---+---------------------+-----------------+----------------------+-------------+ +|sh | 00| 0| 0| 1| 1| ++-------+---+---------------------+-----------------+----------------------+-------------+ +|sh | 10| 1| 1| 0| 0| ++-------+---+---------------------+-----------------+----------------------+-------------+ +|sw | 00| 1| 1| 1| 1| ++-------+---+---------------------+-----------------+----------------------+-------------+ +|Logic |`(i_lsb == 11) |` |`(i_lsb == 10 |)`|`(i_lsb == 01) |` |`i_lsb == 0` | +|expression |`i_word |` |`i_word` |`i_word |` | | +| |`(i_half & i_lsb[1])`| |`(i_half & !i_lsb[1])`| | ++-------+---+---------------------+-----------------+----------------------+-------------+ + serv_rf_if ^^^^^^^^^^ diff --git a/doc/serv_mem_if_int.png b/doc/serv_mem_if_int.png new file mode 100644 index 0000000000000000000000000000000000000000..aaef43295949887bae1f12d741e48a3417d91981 GIT binary patch literal 65840 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 Z2Gh)>QdZdEifZ&-eO;qtk96#B{2!&E5ZM3# literal 0 HcmV?d00001 diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index b9ea5cb..c33e241 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -3,16 +3,19 @@ module serv_mem_if #(parameter WITH_CSR = 1) ( input wire i_clk, + //State input wire i_en, + input wire [1:0] i_bytecnt, + input wire [1:0] i_lsb, + output wire o_misalign, + //Control input wire i_mem_op, input wire i_signed, input wire i_word, input wire i_half, - input wire [1:0] i_bytecnt, + //Data input wire i_rs2, output wire o_rd, - input wire [1:0] i_lsb, - output wire o_misalign, //External interface output wire [31:0] o_wb_dat, output wire [3:0] o_wb_sel, @@ -20,12 +23,11 @@ module serv_mem_if input wire i_wb_ack); reg signbit; + reg [31:0] dat; wire [2:0] tmp = {1'b0,i_bytecnt}+{1'b0,i_lsb}; - reg [31:0] dat; - - wire dat_en = i_en & !tmp[2]; + wire dat_en = i_en & !tmp[2]; wire dat_cur = ((i_lsb == 2'd3) & dat[24]) | @@ -33,7 +35,10 @@ module serv_mem_if ((i_lsb == 2'd1) & dat[8]) | ((i_lsb == 2'd0) & dat[0]); - wire dat_valid = i_word | (i_bytecnt == 2'b00) | (i_half & !i_bytecnt[1]); + wire dat_valid = + i_word | + (i_bytecnt == 2'b00) | + (i_half & !i_bytecnt[1]); assign o_rd = i_mem_op & (dat_valid ? dat_cur : signbit & i_signed); diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 92076af..a204d65 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -403,17 +403,17 @@ module serv_top #(.WITH_CSR (WITH_CSR)) mem_if ( - .i_clk (clk), + .i_clk (clk), //State - .i_en (cnt_en), - .i_bytecnt (mem_bytecnt), + .i_en (cnt_en), + .i_bytecnt (mem_bytecnt), .i_lsb (lsb), .o_misalign (mem_misalign), //Control - .i_mem_op (mem_op), - .i_signed (mem_signed), - .i_word (mem_word), - .i_half (mem_half), + .i_mem_op (mem_op), + .i_signed (mem_signed), + .i_word (mem_word), + .i_half (mem_half), //Data .i_rs2 (rs2), .o_rd (mem_rd), From ace7b8ef44958856d8a5957e707b01240ef4a619 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 3 Jan 2021 00:01:09 +0100 Subject: [PATCH 079/289] Explain and optimize state counter --- rtl/serv_state.v | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 95e37d6..48736e4 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -24,7 +24,7 @@ module serv_state input wire i_e_op, input wire i_rd_op, output wire o_init, - output reg o_cnt_en, + output wire o_cnt_en, output wire o_cnt0, output wire o_cnt0to3, output wire o_cnt12to31, @@ -55,6 +55,7 @@ module serv_state //Update PC in RUN or TRAP states assign o_ctrl_pc_en = o_cnt_en & !o_init; + assign o_cnt_en = |o_cnt_r; assign o_mem_bytecnt = o_cnt[4:3]; @@ -96,9 +97,6 @@ module serv_state //Shift operations require bufreg to hold for one cycle between INIT and RUN before shifting assign o_bufreg_en = o_cnt_en | (!stage_two_req & i_shift_op); - initial if (RESET_STRATEGY == "NONE") o_cnt_r = 4'b0001; - - assign o_ibus_cyc = ibus_cyc & !i_rst; assign o_init = two_stage_op & !o_pending_irq & !init_done; @@ -126,23 +124,36 @@ module serv_state //Need a strobe for the first cycle in the IDLE state after INIT stage_two_req <= o_cnt_done & o_init; - if (i_rf_ready) - o_cnt_en <= 1'b1; + /* + Because SERV is 32-bit bit-serial we need a counter than can count 0-31 + to keep track of which bit we are currently processing. o_cnt and o_cnt_r + are used together to create such a counter. + The top three bits (o_cnt) are implemented as a normal counter, but + instead of the two LSB, o_cnt_r is a 4-bit shift register which loops 0-3 + When o_cnt_r[3] is 1, o_cnt will be increased. - if (o_cnt_done) - o_cnt_en <= 1'b0; + The counting starts when the core is idle and the i_rf_ready signal + comes in from the RF module by shifting in the i_rf_ready bit as LSB of + the shift register. Counting is stopped by using o_cnt_done to block the + bit that was supposed to be shifted into bit 0 of o_cnt_r. + There are two benefit of doing the counter this way + 1. We only need to check four bits instead of five when we want to check + if the counter is at a certain value. For 4-LUT architectures this means + we only need one LUT instead of two for each comparison. + 2. We don't need a separate enable signal to turn on and off the counter + between stages, which saves an extra FF and a unique control signal. We + just need to check if o_cnt_r is not zero to see if the counter is + currently running + */ o_cnt <= o_cnt + {2'd0,o_cnt_r[3]}; - if (o_cnt_en) - o_cnt_r <= {o_cnt_r[2:0],o_cnt_r[3]}; - + o_cnt_r <= {o_cnt_r[2:0],(o_cnt_r[3] & !o_cnt_done) | (i_rf_ready & !o_cnt_en)}; if (i_rst) begin if (RESET_STRATEGY != "NONE") begin - o_cnt_en <= 1'b0; o_cnt <= 3'd0; init_done <= 1'b0; o_ctrl_jump <= 1'b0; - o_cnt_r <= 4'b0001; + o_cnt_r <= 4'b0000; end end end From 0bc19ef13c52198d1428a3d7d66053be123c987f Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 6 Jan 2021 22:02:13 +0100 Subject: [PATCH 080/289] Clean up serv_alu interface --- rtl/serv_alu.v | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index aa307bf..8861f51 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -2,25 +2,28 @@ module serv_alu ( input wire clk, + //State input wire i_en, - input wire i_shift_op, input wire i_cnt0, - input wire i_rs1, - input wire i_rs2, - input wire i_imm, - input wire i_op_b_rs2, - input wire i_buf, input wire i_cnt_done, + input wire i_shamt_en, + output wire o_cmp, + output wire o_sh_done, + //Control + input wire i_shift_op, + input wire i_op_b_rs2, input wire i_sub, input wire [1:0] i_bool_op, input wire i_cmp_eq, input wire i_cmp_sig, - output wire o_cmp, - input wire i_shamt_en, input wire i_sh_right, input wire i_sh_signed, - output wire o_sh_done, input wire [3:0] i_rd_sel, + //Data + input wire i_rs1, + input wire i_rs2, + input wire i_imm, + input wire i_buf, output wire o_rd); wire result_add; @@ -28,6 +31,7 @@ module serv_alu wire result_sh; reg result_lt_r; + reg eq_r; reg [4:0] shamt; reg shamt_msb; @@ -60,8 +64,6 @@ module serv_alu assign {add_cy,result_add} = add_a+add_b+add_cy_r; - reg eq_r; - assign result_eq = !result_add & eq_r; assign o_cmp = i_cmp_eq ? result_eq : result_lt; From fe6c9b0f837a3beab3f8c9da2a066a0dbaac959e Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 6 Jan 2021 22:19:40 +0100 Subject: [PATCH 081/289] Optimize bufreg lsb signal and clean up bufreg interface --- rtl/serv_bufreg.v | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/rtl/serv_bufreg.v b/rtl/serv_bufreg.v index e9ac7e4..2020dc2 100644 --- a/rtl/serv_bufreg.v +++ b/rtl/serv_bufreg.v @@ -1,18 +1,22 @@ module serv_bufreg ( input wire i_clk, + //State input wire i_cnt0, input wire i_cnt1, input wire i_en, input wire i_init, - input wire i_rs1, + output reg [1:0] o_lsb, + //Control input wire i_rs1_en, - input wire i_imm, input wire i_imm_en, input wire i_clr_lsb, - output reg [1:0] o_lsb, - output wire [31:0] o_dbus_adr, - output wire o_q); + //Data + input wire i_rs1, + input wire i_imm, + output wire o_q, + //External + output wire [31:0] o_dbus_adr); wire c, q; reg c_r; @@ -29,10 +33,8 @@ module serv_bufreg if (i_en) data <= {i_init ? q : o_q, data[31:1]}; - if (i_cnt0 & i_init) - o_lsb[0] <= q; - if (i_cnt1 & i_init) - o_lsb[1] <= q; + if ((i_cnt0 | i_cnt1) & i_init) + o_lsb <= {q,o_lsb[1]}; end assign o_q = data[0]; From 17103dd1f5f2f6b868c9d8202c874a76658d048a Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 6 Jan 2021 23:33:49 +0100 Subject: [PATCH 082/289] Merge LSB registers into bufreg --- rtl/serv_bufreg.v | 13 +++++++------ rtl/serv_state.v | 16 +++++++++++++--- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/rtl/serv_bufreg.v b/rtl/serv_bufreg.v index 2020dc2..999285c 100644 --- a/rtl/serv_bufreg.v +++ b/rtl/serv_bufreg.v @@ -20,7 +20,7 @@ module serv_bufreg wire c, q; reg c_r; - reg [31:0] data; + reg [31:2] data; wire clr_lsb = i_cnt0 & i_clr_lsb; @@ -31,13 +31,14 @@ module serv_bufreg c_r <= c & i_en; if (i_en) - data <= {i_init ? q : o_q, data[31:1]}; + data <= {i_init ? q : o_q, data[31:3]}; + + if (i_init ? (i_cnt0 | i_cnt1) : i_en) + o_lsb <= {i_init ? q : data[2],o_lsb[1]}; - if ((i_cnt0 | i_cnt1) & i_init) - o_lsb <= {q,o_lsb[1]}; end - assign o_q = data[0]; - assign o_dbus_adr = {data[31:2], 2'b00}; + assign o_q = o_lsb[0]; + assign o_dbus_adr = {data, 2'b00}; endmodule diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 48736e4..6a7acab 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -67,7 +67,7 @@ module serv_state assign o_cnt3 = (o_cnt[4:2] == 3'd0) & o_cnt_r[3]; assign cnt4 = (o_cnt[4:2] == 3'd1) & o_cnt_r[0]; assign o_cnt7 = (o_cnt[4:2] == 3'd1) & o_cnt_r[3]; - + assign o_alu_shamt_en = (o_cnt0to3 | cnt4) & o_init; //Take branch for jump or branch instructions (opcode == 1x0xx) if @@ -94,8 +94,18 @@ module serv_state assign o_rf_rd_en = i_rd_op & o_cnt_en & !o_init; - //Shift operations require bufreg to hold for one cycle between INIT and RUN before shifting - assign o_bufreg_en = o_cnt_en | (!stage_two_req & i_shift_op); + /* + bufreg is used during mem. branch and shift operations + + mem : bufreg is used for dbus address. Shift in data during phase 1. + Shift out during phase 2 if there was an misalignment exception. + + branch : Shift in during phase 1. Shift out during phase 2 + + shift : Shift in during phase 1. Continue shifting between phases (except + for the first cycle after init). Shift out during phase 2 + */ + assign o_bufreg_en = (o_cnt_en & (o_init | o_ctrl_trap | i_branch_op)) | (!stage_two_req & i_shift_op); assign o_ibus_cyc = ibus_cyc & !i_rst; From 4a5c5bd5883b9b55b994e989d50e42ffcd0e8b06 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 11 Jan 2021 22:09:24 +0100 Subject: [PATCH 083/289] Update bufreg documentation --- doc/index.rst | 2 +- doc/serv_bufreg_int.png | Bin 21348 -> 24628 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/index.rst b/doc/index.rst index 34dbf15..55d79e7 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -51,7 +51,7 @@ serv_bufreg .. image:: serv_bufreg.png -For two-stage operations, serv_bufreg holds data between stages. This data can be the effective address for branches or load/stores or data to be shifted for shift ops. It has a serial output for streaming out results during stage two and a parallel output that forms the dbus address. serv_bufreg also keeps track of the two lsb when calculating adresses. This is used to check for alignment errors. In order to support these different modes, the input to the shift register can come from rs1, the immediate (imm), rs1+imm or looped back from the shift register output. The latter is used for shift operations. For some operations, the LSB of the immediate is cleared before written to the shift register. bufreg also latches and exposes the two LSB bits of the data written to the shift register. These are used to check data/address alignment issues early. +For two-stage operations, serv_bufreg holds data between stages. This data can be the effective address for branches or load/stores or data to be shifted for shift ops. It has a serial output for streaming out results during stage two and a parallel output that forms the dbus address. serv_bufreg also keeps track of the two lsb when calculating adresses. This is used to check for alignment errors. In order to support these different modes, the input to the shift register can come from rs1, the immediate (imm), rs1+imm or looped back from the shift register output. The latter is used for shift operations. For some operations, the LSB of the immediate is cleared before written to the shift register. The two LSB of the shift register are special. When the shift register is loaded, these two get written first before the rest of the register is filled up. This allows the memory interface to check data/address alignment early. .. image:: serv_bufreg_int.png diff --git a/doc/serv_bufreg_int.png b/doc/serv_bufreg_int.png index 2d07cfe93a5829e2d6b1887912e5a020dc76e2fb..18728a3c07b355db3d80bb71cc6759230b030c4a 100644 GIT binary patch literal 24628 zcmZsC2|SeF_kSTm(MqLKDvDwTGnPbSH^wr?tkxOBjBUnjn8^}Sh*X-Q1uY8M6H!?z zdr=CNq=jrnsW8_6o%(#2-|zSL>c#Zj=ef_l=bq(#-seoBv!l&wxh-k_yYOgX`^FD*`t-+|NJAciA32i@%@t=tAgB4tI~9- z$uwWaKNG^VAz*^N1SoXh-!WeRExU{Ih28tp7i&gmHuMx(Db6HV8vs!_e>` zXB!6Y?<5Rz@IR9{gM}V|{++}C2c`JHIB+XxeW)J;ZG*Id?a?(4KsrDeSOZr+DM;6s zYsat@*jj~f2sY*}0ty)R!`f18TqyS8fmZ%jT&G}tA3OV zqL1W+Sva9AA$X*LKA3_X0!P}IJK+R+`abrIaJ~;p50B;eaBRSs5txs|03QUlXcC(n zL_+bw6$%N>pt=S)gz)@uMqEFVBg_DupJoz3~C_KI*egM3g9>*0s?$p5vU+G zP#bHiE|W?(w1&ee0U>%M*FXbDSB6ix1t&0&2qpUoLc&9>c)_|j16wo|2@!;Yqc?X9 zW*BhED25^2$q$b4XNS6S3~b313>EHYfU zf~SNc5f~!X!H-C>$GH;06i!ek8_o6A1E0;oKU_G=pNb|xb%SgjuwdAQuFog>r(w-R1Cyi*8xeiXF50_{Oma9 zKFB}^vaMfuFai>4NfDsLFS4ev_(tJQdKhAut0e`G3Ivz*Sai0Hfi)?R>WX#>z*xF~ zYd!)yY=}dsp}@+8$>$MZ%s_Iu0n(gK;`ke4h<;?0J)FcsAz9Weo)6Q3f`ejcC?dj! z0438MtSn#{0ns6xNOMJE19*;fxOEWQ8BIYukqyjY2pd>96ld;Y0m0BMkd|miJD5>` zSm(ldt}GjPs0Az7$_^cX!n*Rp9IY`_G~G!z+{PScOQh%;umlu)9s~`ehS@^M0oH*I z9J~?57g&QehheUd4h}?fLz&JPf{Udqf$zI#^Bfua{ssn?WGfpBY!J%I5k(hR`vf7)SrCj5#3j%lyo0Gv zssXM%Bm1MM0dSfgKP<%72G}YG4G9+zEt~=k!orDsryxC!3kBsI z;uwfzI)K$;f-QnAVZeVtIb=r+$C2*BbcV5AIQ}m7V*eu6cM9DGNe;mI2Y~<65e5h- zDKyMK#MvKV9gM^UIIygESUMfJErfkAJcwrHi!#vj58?ak>cVZw5GQ}CA%Ox5^(XlW zfSkmJ(g@}u&*KB#}eh}zzed| zLo?|PU_s^#TPHfgHGoYez+8hu=@1K~A1;WFav=J%!Pz;o;Qk!o?X7JLFh&A9f3B0C zAvz>n01d`44f&yLBTIXftF3(y*^cP%K(?_D##=jJz^qmR>rhLSzoT7<588oAvgS}i zA#^;K2Xo*D8(;&mzP9E(Czut2V?)Ec*qZx0ggA$~2D&ilJOPeIaq?w{8&X5TJUsB~ z&|p0y@X?v*>PHB*)hCjz!!bdD7y?@WA^PjvIU9vKvuTFJ0P($!K^#W7BQl8RsA~n) zhhf5et(_^MhQLRf<8A$&d<-p^HhMv!MxlgSmrw9TfnB+xSu7ZmgQr^tGXtG*WC$0bkAhne8F z;RGWR5{E}XEsanDYk?ikB_sqz&_&>Ftjvi}oQ`*FfllsgB_gcuj?Sz9tRc~{Pv*+*^3X?ffwpzLD9$f zxH{XC4MAu&cL@uk!)$!OC&M5;v77S`u;r8WoOC$|aLtDtu5ZAl+t7l=BjTv(;?JN8 zP)tKQxPb7tM=+TraGYCRD zTf#Z|a28gVRJ3{c*&UOSE03t!5d|UvNVPnA|2EeR2 z0s3|hM4S)Tg#}|l0VK14*aTrLxJX|nN-Qoc&6cQ3v&Q*_`cq(hs1M6Fh>N6fLK!Fw z143d2(DWE2KNlwo6N#|JxLQNeMtJ{l5;B~^u?^!m+vpLk?ZFnES#W_RhDJb<9GS2n zxS=l%>f!^T*n==`9tx)s%mb`LtSLMm(jgp+z*taly1;zQi4^BhrWJu@6@~%A;RX0} zjmTVGs zF`S@W93Cvh#$Vr+qDz3{LLHHCo&}Vo7itmiE4Edj>{Le@KZqYjfieSpaE?xRLXb5) z2u*tuGyJ0Rg6MO=MB12rIZH z*PhMNquJT`*c0@u*=U55BgGFMh72_TvsmG927yEr@G5w*t41MwgKQn`nMA_?Y8Z`d zVFTAC!a{I*t{C8283;W%8$!BS{Seh^25j+tRMC4kK$wn9_XSTgA$`U~cMv~wH zFg1t3H{u3_a6-d3}FOfVSX?e0I=4US(B96F!*hff`HswuY;sa&jMWjSAO#+*%8a*PZ9@mpKpS@Al2Kk%+3Zp^#0*fhumeQ)&C5XW*?ji*|RBqjd2xO<4n%Xr( z`Krln7d)O_^7b|t-_25D4<59=vg&QugMXgiK+D~b#s8AQ9_h@f!Ip)MzuVW8qN1T_ z^8IiX|EC`f+-^qjzb~}D_cgy%N^(7zRV_)+H3?rx+B5z2&1bhgM>=oVvEM)7=a+4x zc)JATWEGTmA$u)i{X*8Tz;pWMvJm%_)ec3(c;|1h1Fa1PhYo5J@0Wp zRLC3a7BXu@H@E8fB|jLsd1>I8LI3{Z2a`zA&ki$<{Q<6=S!_Kdd#9 zJ8_XRaXat7w!&GBy6JG~{DagYuWiQM)3htR^AQ7QYzD&mBk_a3rOVTU)+S~TC}{~- z{v+})<~fEvb-Vil-}8sI@gJ`?Xx??o&^+pQ7rvzlCZ(RE25o$@`SgwP{~<7WSyYYa ziwdl{ue;R8#)#H_c_4CijI7__+nxC`yW2fr=l>-tKgFopnNKGNhq9tGD>~;tozzkH z`q`+$%x!`*-tE=7|5X<@6FL0+D*O9~`j+~M^fP0#W5sx3@O;BUYirnPV;bM|+_LM= zKwHkBxmoMEomZxT{$QZhules6X<3oDl)S3>$u{5Kir~T9#WkZAMZ3j2v;Og|&Ept% z=+N4=4X(-Bp_vttZRZb^;R;FYXBT0kivulbgEK!qFElGz0qN@|F}=psZXBFQOi1{! zN^7-K+O@iu@q)f;UYT{u7WTKdcSlYA_HZ0izY4*=s2g{CM4_~HSv1>B4zAtVDayHqmjQWo4w-sAe^NOiILZN z@I0YTYW(4}=byva!mmDU_PtJWa`blbd5y~QG*VN=S~K7_`@Ucq1zL-r#vRYDeaw!5**ZZ?lJ@zLqw<5-m%MO5T2`n&izME3C{P zYCkw(BKrPV@pjXTi|m#r6m3g?7rnGlhKQ36IP#(uQ_1kSeA0Nd zJsOzlUM&dq^rYF6D0PchY(}%GXkb0@mgAKHN}B!o{bxQmrfALF34WA?ow(x9$gQ&9 z0M)`5xo!+i){%@Dy3ZXs`{Uq)pf|ew*W?o|s?qc4zS^P8Bl#=T!}@p^s#7|iymiWo zoXV)~zv-Z|F?|^c`?YRhZld-=$`%+h%G$~*K2W(6=vqx{;Kcn2Q{LQJc_>w>`ezn6qE=ncr+0wUpiy7mbV!>n&6JlAu8>!1J~;6J zqwRjLb=?2;SmwS>h${dy;pogHRN^8;ZUVvu%riSHgB341&7{Z$_3_JgR!c~O@{ zT94%AGa7eJ7|MQsv)?SuGFy@WkAknhJ zCf=776zmsOPfkt-#3U~G*bj;lz>ma$01*~<*KM??xL8vb&dsRvNjHA2_{SF3q#L?z z#uX5Dik(|e-4oGlP>d|;!1l;rXx`j8jN_T5>FA{kCjEx@+4W#2yO{SrN_VwRcHzBp z7M4`tL8oQ5aZk@r^)kB_G_oRG6t)^V_gQ<#dOta@4Pj|#-~M9@*R;Pim?#h5ihRdv zYDrwLp{{D-_0vMZ$TCwfn#Ue$zp^5_;<{R0-Ld8!w{eB7x3zjE2itCQ2WMYqExI0n z)Q7LN{ni@a5a<;p^5v;`lz_9k#H=}!rtSdFs_E3W!OKRR&c*2R;rUO>wWomzW2T`> z?Fy(hHw@#{%e%#X@mk%zZoz8Ye&R3DP*xjIc-Pem4an(XwNm;EwKvzS1) zWq<`q*H2G2D0`jjap$CL34af~aY0=Fivad`)llnBi{s57AD_5gC+$&k6P2N+V!+rR zy)@TyN9ZTgm>n1EZ>+w^D1(5RXJWjdg6eZ1sOf-#pFG^X;#Rj6Af{8{#MSZV795MJ%{$ zsNVS?qZM4)nXsxurb01l4R8fX4V!UWGS%aASjU(84W9&OZ)%;cKAtxf{qs`4Yeu2= zHmY3HL^mC*U4Xxn2opAJ_!?HoD^E<== z_)NWARRx)}0MzPh?b2dKQHrJOvC-e7UG|v~lP#NTf2AWQpXznE7S}JcD?fHQa_Y^b z*V62TEh`hT(WOaM96zPQ&SwL?V{s}^CF0(Ae$QCRxV)siBq?bE-Ie^%HoZesg81s@ z{d{xws|{ce2?=t?12_7eeSB<9y7%&EsBE$d%{z9pcIoM%<}Y*WP&2g`!y1n*dwc-0{DHLmvB)0{%D`Wrtltk!Jv5bGovNh# zv~S`ZSW6zPbmi4UK2KjdnH`9p>+M%x()qH~6u3+y@68=rug138m*eN=hTp@)G2z-L z*5&clJCN~rA3)aUY|}6Bd`N-^yxMD&6KdREHvnA!?b#Qdp&f^&cQbcEL``OkR~bHi znb%WINef5wj$|d~97tPGlqE20o{n6*1;6uWnaLJD|4q+&fCny85~&yXo~8Jw+E1^7CmqLSb}ba*UPr zbT6}3^JMb&BVS83XPTdEPTz6bXmRHAATaL(S<#Ck&A_8OA&3iHw?fig*RkaBNcC$H zgIm&X9C-%7!7G!w^qcsnpnbqPz zZVwzZ@LQE7aSFzJHz)6aWB|NW{V@CoC3H|tlO6DVj(lR9x&|u!^whvnb<7-$aOU;# zWy|BDhOI+)KKS(X-fSUb1^td&*Asqq}l_x1I5I8)|0)WwwlX zOKeSsS$&TkGm|)_?NOaOD=l4RHvj$cC@)77D4?R&%}J#7 zav2-W>}<7~&5&;U9lY*^=|y0!8Fb@s!{o%c|?M$misi8(v9HvX#nKuQ(l7`fT1kL|(FS*_8?9fTe4`h4g^w)1sMlP3& z=BuYwrDRdw>`_bF`C0Qe>o%d-tii-8=}ZSi8%*IS+FyzxNV6_$){cQn-s& zgsR-_r(eI5SnoF1I(=cT*59&bukuz6D@#j-Ml9}|9B*lH0lVjZdAaM<$V-i~je%c# zk~V6UNpG!sAl+T;rDMQ+|FrJL%#}}*?%FYS+F2Gi?6vPa0}7L{*Dv{Y!8M7q!rj20^C0{;ZwfN>(xbI+ee;0Nd2`)HabwBdfG*_wsJU;W zJTXoKnCXJW@m1()X7z|V(Z%K3INsIOQg?}>nFYeVs+^}#anjVK zIb2D62ANvr1-XPEHIq8^hOO}*AG-J*~~kV>nqYNl_b||`iTmj zJ;tq9yS52hR2Cqk{&T2<=KX11`l>DZdqwU5CJfXrEik3kf7I6_ptu=0g?$Z@3>bJi(4f$}miq?@?KKCu+S(9pXf%H9}WZA}#JJ#gki!;CW-LG^9 z=zg*a1lYW3uyyPTet7YC9f*)+`yxT$*ud()6}l561y0XvT7=rFzP8*+V1;1>M4A6wbsL7Uq2#&m_F70j|W<_ z#*s!(s0MoLfQSsg-&=8VV^v70iOfmxzR6qnT@;{io+ba^`L4~66rHm`h3f4RYma2A zTM6NeymA|-gpirIH+rnQFbxC{PNCt@S_S3)}xJ-=oRu=Eyx9`k)4aaj=jCp5+dn<$!52rI9OuY^4qM0PR(tbKmSyVPVodeIrmc%B^-=zVtfVoRDv8$9@JGXMa@B9HsH?tH9$&Ftvy z(W=ZtM_PfZK4_iGj9%pP=8mf{PAj{I#JsyhOLeaZ$}pK7zW(j+-pEnjYA1J~zo&yU z`S;OWo4-nNxAoSgKhGZE&>ch{PpH2722#f6BjZ)KTIae8h}RjwJ^TUKy+@|Ug|NWx za;-1quQy9A*Gj3Y%X>%fJM;xe{=W_&_w`0#=$mzSi{2q*w(YKD_7^cO2!$;GBIHE& zgWP;D7k&L~$2WjILmPCH`}6^&@X2o3oQf83VV;*i+h_dm6*kpb>Hxfywrt9P!G31( zzuq@hHx(l(lV7SjV(9e~WQA?OZL|SCpameG7I7rzwQM;gD0eTTCI_0)kkw5$V82fyi8f#lu0BLw~E%TLYc67`}a>= zKZX*$Zb7OPzUqkb80?P{riLldep2Fq(*D@GMr;ACUVC9p`zd9YHUr)&^WHb+`Dt{l zo9B2*r?FNfMznRYsIs#?!~m)!mRHAev2k3RU*Q?}G)D3Mi@cRUqpzAl5`z|f`Ko*F z4Gz(@zU4=JJ<(cwFWPP9(q?`^bNtDnqhj?qL+dNhH`&8`S#4E?h!+!I)Ns@1Nu_x6 zXzz7z=G!Jsk%ry5TCZVNYw-p0uFXSMx=Y{ZeNqppcNh(A zg{5uneo>ENfz)`V)}Fb6vz4K@W!>y!A1Arr3s+dF)TXyqr2YE|Mez0tTUD61?^=RZ z_lk>c^Y#R>mVPaHJdkR(nCp46!3-McJ~+2`=Y@Hz+btcjg?kWUZ8edR5<3OTGttQ< zr8Bv%{QyCupKKgk0~T@9@rvf3)ID&hBdeqCMz#CTnSE#WDsEUMc1@haf80U^(u$IN z?2h@j4X#&SE1NH^D08*cUji9P-!>J=v~rUnJyGm`oDW6*4)W^6k%0KOO1AN@b-?Yq zWunRm(WItFRmqOMl4$`EErFBC;s^Hs@m5o^H>7hj+Q$9dVo1|B@2{KHIeq4tnMo=x zjni=mub=`)o!SCRim~I>3>xqs0htg^#fhalH{-SNQYZh-&Zo79N88o#YWCir$^pog zR__vB9CC$-ccA;nxxQ^W!s{?WKT{wtu5bxcs#<3xtqvGNp_rAdogdU0ykVDy>fqGQ zyX^M!9~+t6(*N^{+@Ci^{e4sRCkW-q%C3|K2kl~LeA8FRdB~E)NN{df?#XbQYf8E2@y%>IJ*5Tm8Y1Neay$Srp&Wp--gL6F*) zcbwg0|4KiP@Xa{wRnM<)z4-Iz&NTx{qSf(=aZ5#TZ|n5?BTk-2zTGVY_RMZQw{Mik z`SKJ!edO2h&bi-X8gAwEogfd$#=RVWel^bIbF$t5NQK;WNZ_T|iEY60zrKHX-@U{e zAq=h?x~luCnirUuA=K32#!r4WR@nsP*;yI68Uo29=PVR(kJ=XCqO*ko#JmcjLRn`$ z&iD!PcL6t7IO;YMqP2~jBaI87=UC&6Tah+yBb&6g(Q-Z)a<2(567uqd7m0cCLK10& zs&%)_CGbq{d{#h?7cs9;=vdiVT*$pCY%l9H!Ws7(Uh6sX6uq z+&rQ7oz6krY>Kd`ypvhT6$-0~BU`k1l`e{BhBLc*k&y+joOa)g+`eO7p;`}dM4;8@ zoug9tD?>Py5Gg!XD9pRi`y&#tf&(oYS^LAjz0Dc_{NVd5jFYdibhU_7)T~0b&Is}O zm*5q(SEXq=!k-uKp;Q3x4oDBdIE0`Vc z`QM?(!DAMmD&qoK#cHxS*KZ{zSHi;$fu>9mvDkUWHHgdLg-oA zxnFCc52-^OvC>-TLN0Y6bqFIyT89F2Xa)Lx$fYddB7V1$Swtr?)y+R&c#|*!)pDrl zypEfFg1oAONTq5bs#`73Johetbd^U%3|b3S4NN1F-qr1F!p`!J@~CX1TpSjmc-G-*KE8 zm#Wx<$f~8qxwiT^84b++&~F3z*xUKRkIVgEQnO4Wzy7!2;6blJ^GL(l-YKXxz-EEQk@-$ww5cWhV;G!-|>4k@N48{+Vr15cP&v>%iLH=^xge@ zv)Pt5iJL3>xv$VRhfYr#l5C1OHSMe;r)^Oi5Q}87m4A5TO!tmW+MTRw=2tm z5;?OcVs7f&C_IY1&4A$!)=g=UBVM;op~}k!^;Kh6nC0~zJ)h?JQ1C|CSmzCSKRL?k zb!Fs%vrzS$s;LoIyQueV%hTUo`65c@yA^vL5>2-0XiO}Pc`dn!9s*pDJYh6)BMo=F zI?U*+OuQ3)6>5h=NT>Dg8kznC%N`q|X!=rXlap+u{q+=3T>2Kb{!ShsDApv~XB;|G zQC;iPq`(J7jy=)wzTT9r{ZqmiyJ5%|>Av=H<-}5h5$aPnDRps?W^xe_$VHQLfL2!g z89vb3!?t>#?yS%$r6I3bDPP|#tyNg~V5#Exw`60nXG%R(@(_C)#|9|KUuSDxF{0-H zw`I%!4>5GDkSW|ceDn9ntt|C^kiVJm0nW>3cy4Mw)nQq=e?R2}Lp38}>J4o&Nvp{D zHfwsK-)liJgdy3O>Afrhu+xJ8Rc=ln{@hz5cBFOtJ7`bcBBnC|c|EWoF7WUM-vUB9 zy=fP|=DgNq<2m-}b(gcdsJC-TsC8;y3?PDil^JL@9m`4}YJ!Blu03)fMIMOL`6uPpvq_eDI@j zU_ngJJJd#iQc;`N!YIB4%0p9JjBI5czv9*(EWNvX6X5mes;hgh)>VCF+}d$Ra--r? zV?X@%=P9fE-p#B1!XJ}-R+|klkf-m{-d7{BFJdzo)gO+go)}tKxuv>P?n0fE-Wp@K z)2dN3WEjj?42UOF4Bnq^+I}Qx)1@t2Ube>UGGtX;EV;Ye5WH&d^+qub3Om)jw1C(x zt#hjR`-5BZU#odzt_E<_$yJ-=KX1J^A$;z&RzZI$R((@?_~6A_g7?~&#x#;Q^w{T* zZBbJD+`P}q^?BMPZ#wfJ_4l<+=~7+_Tk8}10v>gr{UBxqUu)j&bW-~<)&oaBjQu83 zJIQb-&~;auM_b)&X`2VT-$`>lZpZI|G)cLFw?E&368c z*;U-a#}{3usJl0*h69H4wtrWt-}B1;s7n#5jpO9YJ4{u_Ts|%gC(%+z{}E~~c# zg`+H`M2?5OL+>UTv4FZEkCQl%>mK!uD9cRkl1(KkH6Q+6XIeGJ6GO7_J7p>MTE>73B0Soc!tB_2SU9X-yr+Dbs z>5I#r9EbXcdP}5#gY+w{kC65=d*byp=rtf1VD@i!p4fVJmGyJ0uV?MG(Uq0Ky*K>~ zBSvyAoL!PUP@AD{@#9j<;Eu<}8Us4OuC{|>vGI*e0?O$=X8ih*b+|h1nNLYp%b+z< zV{pJgYm|Y=AMnDaZWWdBQf;X9XoUR!rAIsFm!gJeYep!uKc1JV<~@)9nXv1WGok^M z#ykd%4npctvERYwa(mv+%b{GnI73&$^1Ijd8uUk8ulNke63hXpq1T%+i{+$%P3gNK zhO+Jf3s+GSU)F5AaMbC=`-BXE!o?qT2h z*cJIMB_SUlS z?aYMbye3kl3CP-Y?Q(Z9_59SRPrpIBslB*TT*4Eq!W^4L44c*DsAbQ~$AJt=IMQU% z7Iov1(T5YNQO;8-nil`+1*m)>T>lvXc`wENTWs5c|8y)bp|r5LcG1`k#jg9X8?p*D zFWQbqiHN5nG(O?ct;&8vQ1Hd)2Co=e=q_{{WHoKm&~Ut*9V>%^O-X@6CF;QcAt%f~2%Y4A@x5^j_2Xr}s*pzz$kw zYJ~UoUUEF#^sL*cc|RiOW2e0i*2Azw4NziU#eR4FUtEj-`nvS`Y*(kx`(aa&)WvAT z`oD(zy4*1^rG6kiV*(U71yRRV<}>G^0WO|ykxX{3o9zh@Um-D67W>AOEa zw@?&TzGI&prF0b#^}4Le0d+jOK<_%-11W!W&HntIcqLQ7EDg}yd0kk|;gW}-SUtK# zzVtjP4%o`(dWaStgiI`iJ3DggcF&2cuUipoWi+ar)U9`lT8Adk5i=Pqa$;a8C>?u_ zypO~`nolYj-_Hg;5`Tm#Oj672Cduqq7&}(vzVh57=j6d`+qm_rsib-E#Fy`SpC5f9 zhxyzsyF32P;nsJHA^E=h6UcP0wcS^id9fCY|L2Mg~iq?gL~p_lj76d)@DM6z+f zfyf`f7QgRh>{TnEbG(&42&oO}-WM6=CD(-IfdA_9o3#J^+9x#+_u^l*HSLQaud{tn zWJP$k02>32b?e=ff%&_> z>BZxA|Fyno ztVl02jCldVo{lUtvrN!2v6$;|zv80*lhxuvKu-(#@$tNRzE|XLq2OK7(N7DsO#aQ; zjS??&L5hRR1Vy&ZW*tOm!GnOLfrm$X0CMUd3DHwiO2D@Z$oEOsqaQJ|O zLEjCM-FMN{oU=A04qF?w;A#{uF0(~G-05j5z1mzl z&wgR0oR?AlTr>D~Zmz8Y-3&n2v>~R7pX3u*71$QhOjXD%KmXy*b3v^3E_iwNhb4-2 z3E-^eDlwf;*+)IqKncj{ebd0Qd(t-@;oe$jKRoIAtYn~;T_@EKQ`xdy;h#dc;H6}m z?pkNPz1ev!pvL@(oz81M-Z~7N_ie_(=*>1qV{{B=OC)9+d_NUzS^{CpDRXxz<$%J? zg^NGi59)}vUv_16{vy|&ER#Rl{PSd7+J3*}vN#ESMK#-)S4!*8Eq}UBviUPggAVGC zdHYmg0p}tVl+pM7w+>2pG%nLv02RKsso9-cW{M{!0ATtEsrC(bh?-zt-eAw~h8Oax z^8|XE&7vO6lGX7mQ7&;3^To{C1zg|za{si8nOlc2hX%+3a>n36ZGyL zdVAE&NA~!;Dq>~5*7`QYL&5L-r^w^g@}8*?FG^ISe*C`Ikh1c_OcCj>W^s{wdSAyI z;n@2l6EI_l?5a>hH}6=lS9-iTyVaeUJ6W@Kvb4 zGPuxTI#*Dg^3%9+;URDWMk~~v%oe!9x%9J}e4NUHECM_LxZ7)GXy+RZi_sT$3G|gKsJ$4{J>T%$ZwFAoHey zj@?Ik$1)nz{bj~Zf6!4+ivjH(4j%F^T#~h2ru)LO#>RHKIUgOz&6o@+9zG3dSve1D zm;1*z61`nQjOyM(hh-@iifbxsmM%^MkiOkuzBTp3#;ib{O&0?|=h^5S`LWIdeQlj$ z^GxQzq|dE=mWN{!l}{?`_<5ggN#3lN&mA<+>CTkwORbZt{FW#G;@e70&YRSOTJ@)j z+~bqFTDu7aZEu9~wbH`#=kt4`q|}E)PpnT{?MrRHY%~gQjqh_<=A|7v*y@-b{qg7e zniFM{#d%<>*@RXO{bfx*=;;Z7nqR&jV%qR1vAyoe_@Z3&!kAZ=p{-lB()!9Cnw;F4 z2j0np(59`|XD{Ds-H`s_=MM|7YDU!zYX0=Vs^oVS^(U9LA>f-UWj_b8x6L!^q6S)v zEzTcXVG?f-in}+y7R7%T_aUj4Ew2};Fdys$C3-@CrPj(vC3RF#H4do9CC`~3YMThw zyLf0O@DdVbs@nGZd%f043gd(GEj)e}`0`kr1gaI%U?FH@>q zn!He(i->uWPqGukfzOt0aikP&!JKywr z&HYv0-3h4gV=~%LH{oNu5BzFsSg}5?AFcg8aEEklFR=Lu2w9?9uroXFoy-+;Bggo4 zU%Y1KW4qVUyeR>t#vH9v@%+vb~N9Qo&JWO8HH16RNn*(2*mLdgqyS zVDI52PJvk&K!=*CG&vODy>{`m9c4U_mk};Sz0L`L1-Fk^?Tvz*W>kAyO#RW3W~KBS z=8DR%J_n^k)Y@YbPwD|u*Fo*M$0j*4J2ZPqNAuIl8xXzCv%BZ4HmpfcSI_=@ezhNl zn7H3){NCp>>GtYB_A0I?XS@wqci}Tx>-?mf>x=JCZpa{j7I7L$e$OJEp znv#x#i1lP35F?ouRNS#=?@ZrB)UE2HMuWXV`Cj2Z??iiV36M6;UGk5yiUUhrp}LD3 zXi<_pnIyY$&Apgy>E03RB#g@6Ufn45+~w2d90i|Uka~&6&DZDDNT}!cL95S9d^K~r zJH-4=!we-tnpE=q&ZF`8xE3qSoBih*`!BH2GHk^3~9F6{Gj5s%sw9sR2L)z`yWs8y2{bJ$N(6Z3bUX@LY~pIey1Yp>mn>#-SCvKmO&HScEEkL~!x zqF9b4Y)hZtJ+(r;a^zj^s!t&%m)+Ymsu`5BljD8&FF9vgWK3<_s8hbT_woVtrMcQA zx12FuO%5Z*uA=9b^oo0#-b$*s&g`qIJjs7LqZ^%8%whtGM-9{=S*R*lt?Py4a!ODY}P?K78LiTWaUVIt37F5+!iLBp~0%p=LNQP>JC z$_!6wqvnyI?bQblN~SD{vX<-|J5DXz(>sQVlX#$T;K7vZ_1x3sr#m!HIA%zsfj+_# zZ!&Ho;k=1HTE9G1Z#Y3(R3$g^%CdsEiv~*$>rM6EMoK3&Frq97y zByKq@t1*S`t%_+0Ra9$C@ z{Ag;ob@_L4(1z-BMprkUh>^7t-il4hQ-%_jj;(h*?bCD$n_B2q>$%XHaIy_pXtU0# z+IQ8Qf(=B8^}8?6qjr7@i*V@o5|?C&ZMi#R?DF=0^6%G^Roe?8tH>GFL?yO@6=g4& zf0+G4DdraMIBngwV^|IasbAM9G$d~*b7wc;i*Q-@yr-1qq#_VLXI-?HmK2UMwA`nb|_9<;9@ zYeZr_cbnC;<&k=O?#D+Yb9(&~_|@MN%;>pG0)=|T?(9UgH-*$8AxEf>-*SiK{X)GL z^v-4jM4fhW@oXN(#CrbZdZo(otwB&|*2rAo?9|}(BH^Obz0{W0f3NV~z7I3Ado<^k z%OqKb_3TmOh`^E{p|X7)V$u%=m5AMda#%h5KEA^$dlGOpdH%w{?t*~(xkYLYYtL~ip^x#bO?uJ`gQ5WY|ajh($lPxMO=gorF$NEX_ zfInS%oN;#eeS-JOz|}_gp-Sc(Iz*-ye%#%#bA@sM>M9;!Y)vndUmA@*GcL1;4IRoF zt8yMaJlM3LX73yeRj)#=->kH@_H*DLaf@c7)n0U-W}uX)2d;~x)HSYfJ6pF_woOD# z&0=?}t_X>^drmTCj;x}y?vPYXWhYz9BW?0QF{s%eF<+@t&3m+P&htm1dC?y1wQOhG>BXr~t1#OpGII@Z4243Kb7-s}#R_|GDYyOEcy zD7Bp)ugcE9aF<+v#_K&4l323rRPlLsHp}etR8nLQ#9b14{iCbD`81pgYL z(n(7^3Uz1kPVVe3m73Zb$F$(;|4KO@>@T3(x4fj-W{B6VIQT>ltlKUOesA3u{5e$o z`XxE7Jm{YGdcOMF9|vo0PB5WCUi{1vJ@oHbzp(hPd)(Wjhv!mEKZv1mii!cQ^5tsk z#`wX_|6b#@l8H-hkKTF{2uihF#k-xqaig@H?YP-Oq4xU3nD&|F5`hU<{Bk-PY9_S1 z0rGAooY@rjX>764!8fzJwDXJ_^hI5<=Fi2lRv&icV5zxtqVWm|JE=1(cMK6nBDEsP zIZVrIz5>SkJ@7Eb=fLZTu$ZH#Lt(u^($#nBg^=27RO7xA&xHy7KVXs3*DE5Mk|I5- zI#Zr?Vxu;vTN0Kv;q8r{-&3vNSWzNmNhUw~BA+1V4rWe2NF|s_1&;0aeDM0^n7EI< z>!Dm+H`G3FwfvsY;paPVjb{(bMZfXAkQXBYy$vpsgTd)WtFj*UN6qDBJeuDjVW=pY z=U2FVG_8SeDWMqoVOC1q41X+F4xgVq9-mWmf7}>54AJ2EUR`NX@n)4oi)8J}1&v0^ zt+_ST>;8)RRfS@oMa9Xd%6cBY1_^S@(};F5svYgtm$QDHG^x4YLClM~I28G&1GH{K z0UrOx6X#@#$t$Y9Ka%ePz*R~;yzt?`BXHV8nl<{py+E}yo zohwL?RhMRLj0C^vJe8j`gMe4It0{8+c>DOdAnBNa7_VcC>wQXJMy~WooZ05}a@qjd zOLJ2G8VY@hWjJ)uG#$~#W<6z{bge7HlUux|^m6}T-O&>x?u~ho0CWWep9OunyHy_# zm=`~sA_;pM^dT+25y3wmKQaLA4!D?D6%cy20on}1!9)YXy^PsklfTRXG?Y9u0-57bLCuQXh#BMqm5(7F@@*i!RG^Jg9R(C;S`v&xr6@6=}6|ZXj z^*4>db6g?*<H%&Yc}tI210AVGzEy<6iPeg8wOeEtK_{DK&T3m$rt8%AE<(&)dy z^zN((b`t^WF|U^px_tV|_smO->bzE;RVcMpGJ8O#oUj>TV;nwl5f=C=_?PUH4U7tR zi8S!d8jl0&d3QF4YrjLR+du3%VtTB|a{g5D$ec>$x0hJl-%~tjc0$*>dviKSv+YvM ztd;Y@mv!(*`o6xolQ#V$uKZy-cV~=j)YrzO@uPJ&K+PSS*|cM(ACM5(?LOY?$cB4? zx(&AqPyKvIHyY`>ji0P~1yvuZW*-7%33*!`u!Bo6m1nm>>SM=+;}*lnzb=l|Yw9uh z>Q}_gPaE$3I0`E zuH0!D=yqfNent6o%oDbCemiIC!!&5WsV+L6(zALK%mF1iljUHePMj8$Z48IY(uzO0tjS{Kp5p zt8l`L^bcj_8CIPiis*i|GIzdXqx31UwxpL2Kb(G#sYDw*`IN5;z8x{iBg`)U{#jS> zIDE5DY}dOh2O#YuvC7)+doStxKN^Ys{N%#*(KF*Fxi=1~xXUVW|F^kZ`eQE1gGT)@ zn8d8YhDmUWIxn#gBlGysrvx@CI$shU<7UJgpqOorGqX?t??IZ1RNU>-3Moc58cXIdq zfqDJ+g0qU){sL1Bt2Mmn8OpTV z43pw9G&RN!oq7i5vAk)QN@h>9a&@grk(7Kj{y#aKVzn zz>>`iXHAo$u`_|*x&g0p9c;GoUP+oV%_P^yNwG{K7ERRD6AY|Nm)dY{B}f(bBDN}KnSs7u3BTFI`_FmONxEI2Uttao*?5kEb$odv zw&yp)`fqX8mE5j-?ZL?ppd%;6km9U%vT~`O|AION4-Cr74Er9O;gu|btLZS zfR)yj>?0N?6r*f&sj?y)TSVg9nl+0uBac7ZTe?!gMCzI%W#K}0h^VH>CP6%UdQowt z{(p|{xRbv1T<$mdAJOQU@QB2Oq*YG;ud(xvr@DXtc-cFLP9;LhE+b_W8A%x#B_pyT zABI}?KSt09tz0W!ByZigQf4|4?^GA>S;e0;tJ+JHa zyzb7gn!+n^_O{;;eUq!`>edximW|=k7^BGEz%TbRNY=)`Zoaa^8Kyons98z-`E!m7 zgXKvqE(_FIKIov@utS7V*m+_1k~ItCzkk%flHN1%?;ovPW7+U8AJOcXeP7o<@;p01 zPUT(MIZb=IMAp(jva7@ixGIvjeq!YxWu$(o0A9iMGXMHf%^lBLJO(%1mWkY) zOv)QQxCx8FO}-K4dK@~}2ljvV@L9SoJq>!2fx*}JdEz*YI6b6(Qd*YWc59liKAo8R z?b;Y6TmbfQTtmdx9Q8Ut7aZV(PWtx#0dmR>_|dbr^~28uVPRohwLddiwFG)@-2CJK zWZY19;f8`yV@1X&leV)L)#`yKts|Vun}ZBk|&ZGprWz zf2u1QK@pU(z@`TuS^m$D?yJnLY9)9iyAjA&+7~2A%CoJp2f6z|>cQZ)ek>MCR?-3# z>O9KKP^sYh*%+*s(Kna}UOqadKG^F%LG8FEMoO=}4sWtyBGd{hw947~R<)_fs_92F z&RyKmpsXxKodufnHpFmwe(Q>PBcAD$s88Dcr@cg8Nyn8GHUQGeb?Luf?7qI|S5-)%ck^OYA^{P zxn1SCaNsLQOVcFl@QyvwpS(`XQ8~nytdJ$n-dZ7$9!#FMtKCaz@?WlMQcvp=pM78E z5+oKCR8)1*F;dd#?lrRp?qde$K+T~NmTbQ`H<2^`as;jYmv~#PECdRZzGkQI)?4w7 zbIW;m&F!=uJdYF4`=;Y@&;CM(dt{@JyA?K469i+Szw*lB)RdPrO*9C96;*>@)%0sr z;?&%0aR$czNKzRnCkT>wiBW0W<-kM8g%nmv=Q2#HAr?ChI7WJUSTdP$h=rMr1qN|a z8Dja0k?L};!6XlAF2EN)ZXt{y`3DjjjCk|Jt*7VTNE1sNv@O_JThA zKw^WzZDSgh<0kL-WFTR&dP`iH_?NQ=^PIm8loJY+$G?;_sLRL%?){_KJV%+Qjm=L! zcS`_5@3!TO%TG!w9N+Q-CmWl%CU+tMyI6f+1@K;FGnx7Mqk= z;>X4r@7`F=+gu_>!jSr$HWH*RTXl7H9gJhT`ikn{1~O53 z2FlKkCl(5xZnU! zdJ|iNLb?sNX`OIHiNf{6w5YdJ`aFO+YXGU|!z{zwL>~IT`CV&|UV3cC4zoNp(0V1{ zdaG{%q`FN&PjN!gLNA{6cr3n;3HFH3b1IKk8v;zBZlWusZGVjD^~ZCVUdABRmMnwEhr0&v6llPPQ$e#g5FwBE|&xV&l-e z<|t4ARoYNGlJg>{%&tqRc`EUj^cjt7%NV1dP-npgAVFRC4re^ze^<7ZCl7i`T=!Os z|KAhGe}4WD19S0?qvzu)*3->&?NL;;g_0aQym8`iwxyd)mpMr%F6o+m#Pwz&`ha;| z^~1i`*xB{bd1@-0&2LvBMNvE`*hI~9;iSA6l_?y0#w$1-q1Rq{A<$&DcH?yq26IMgnU|R6dOM9U0Y? z20<~o4w`6!q-oRAY`67J4wpyJosDqU&K$!0b1z>l+eep>!5;sC#0)0)fk_+krm?uV z?Pl^TxZWWi+@&oe^6b_dPb{84j$N;214U!F#Jf`zJjw;s{%ZKX_kk?xQwa?yirF7U z`M);wr#8@&xblx@SWr(2W#nx>ci6vIH1R}{Gr15y7q=CDy4h_}09_Nd0TGRd1>6p@mLA}@-8`*2(Or9st?WPlj zRTx9c?Bm^ywhPw>nSTyRW4yk3;@bspe%$$LoWXkawZ`g;;2N6P{=8MQ8npzSCAk+R z=<1T~j>fm$y5mZJwfz8j{0TJ-4F^>C&xeLT`o5 z>ZATpb+bObwYLVPrVaJZc`N7}=Pxc?@C_#N3cQ&TKN7D*8*@*nd1mzeA%Wxl4J8-9 z3yl}|hdI9u;EacPbueNK`~8Bph%PT%oCcaOu|$oP*@VDA@y@6F2KJX+Ia2jQ@2l6y zPEQcCi9TWg#l`$ zo#PlIk=*0ot{{}U-kg>;fzF^4z&d{F*841^Jr-=Njd!ell{{Av)LrrwGzzk>MliYO zG&RL>EF2dx%I@44Bd>%)<)n$vew8GGsg?FuI0U@?Ff&Nj&3e_2@M4UD;%Vrz)1TZV zmx(2M;&Tgh_dH`xiS#02a~x8&qTZP_t@w=vB}8zpg9!?J zz!IOY&P>i+{BLaY{8D1yrS_9o68L~)EG0$hl1#0y3WIFE~yXZi);$%Tyv`{8@`jz4H{J1Vq=tt-3wi8%=SoG{M+gTFpB@K^5-~xcLB}@^ZHhBw@>6tk*bh<>7^UTj#Y-X{eIhLk-Bl2gfQG}-GzUyujl#OI z4Q;dO3?krvDe+lZnnias(nf2aNT2u{%=2RSev`3N&H|qjxiMIAYlBW-?$YbrPN&xS z3MigW2K>#SZd{x!E>ODo&CnBCHnUzrLZZ!k;uBoWKCGDoMx^Pkoa5sm6ivhvEVWrr z-TSpZ46xGnhAZ|lb%1GVk6QU8pCP`-K%bu}vAw#wUkmQ-loruYOA8$vS6x4m?zr8< zij_4SrbOffx!SC2BjrmfRw8U$_hPI5^=I)Cb0-g-;dCbp-@KN~lA)kx9y@kNvTEvt znMWrc9~6=+>Q=#Q#e~l&IV!ni|L}>)XOYK@VkHJAb5JYyx+5C{rQNm)rcT3UBN)3E zRxH1vJvu$)A4^PC2U!|5s|wro@Fx&))%7ABRD&^>%cxmzE#4GtXXS z1Da6K2-n+LiUoo^TIIO1dwxGW7CThP5AZJf;-C%K#S38Rvl{7jDspPo0)G?*KRHpA7$)|)cGNv=+vBcb0tW zV)AB$C`0&$qkw0?9pniOy@JP<6MJv7^NL6lNnG=A$!ILUy3iCA#ie9hP1galwgXrs zqR%{T=C}B<^agO`S{`Q#VB--&@vTtQ5u#0%AIZ^fb31SgR-m%Ee&*L`2X5|X?_|aD zNCo-S2@15!MOR;38UHoi0YcolMq*;9oLZ(h%;ilnDB70OZ5?wsyjapkgXB;PEWwl& zV6y8BR?>U@8WmrGGd=Hn0&*nB0<;|kCWIJ- zn-0C@Ue5M<`&62Gn8%4T!s@^vjJk(G?d1+I#>ZmlwtVj?14paT^G8SSi!4lkkM@ze zQ<;{Us)2rvd>OnkOX@WE<8u%@L=L6}A!NSK7t&kkEt1flSZpq2*|fH9_el`gBKWHS z)`j6;O$5oT(%b4N##rQ5L#1Y68FkZ~i}B+Jo3(ST%A(#r43pJvCyWq>5?i_A^x_qb z_&rIHk1aNz&?#S>)HO)D10eE*Zsy?-S$Br*`XF(k7F(TuCzR`YO$WiHv)CO6_M%-g zWiT#)>5u~X)KzSV4R$R5RJ{q$VpydO#GHb$f#S^IAcRZe{+duwDsOz%RCEAg*z{Wj zD5>7gXRKHU5qQQr3Pn#H-S0_3%6Q=GqWZogl08jRv~C&sfqvGHL64;DV^N&YBm*-L%vV5+f)<%ET3 zRps^_=Ha)ti77Ses0P*Mt9RI;xDgo4Ky7PK_gu2uv6O9#50QA{|A%{Q{=wroH} zJwDmxFj33O_Z$<)cieNqSn|Uw>%(MIQOpHdFTb|t`82v4Nw=9;ik z^yiGlH`~P4QdT1p@9UI+eJH_s24M)81PS1M9#Dea`IBvhc8TMNtAeNeJ<srl(i; z&-da&C^^h)%?3>qx9@6gH*rq$-iDIGiy^p-oc(3W%7{OVuu1f!ZJ`9Z6KV;ge2;Oe zrzDJjij1x3`Ak`ig>c-H!_)3Fp@guuG7R~bI&dnmP*ZY)ae_8{RLlEt&S(T3Jdt5N zv9wMem{Fxm!^W4qfl?}f#hp!$S{~wo$~?Q5LD_2$N#))EGNBoK;BqpVL95A3PU6gg zctZ-|kgD5LdjQ&uL~e2wujz=Zzo#Q1fK3!YE-$>gz&>CPC!K+atq0ncz^A7T1Zc(r zSPQ8Y7E__)gdlw9*@5ej16wOLVibbVxPhgM-{)slqY0O?BcsS!S#3K?ok{8MD(%60 z*f<1|S)mnBZh^d%+QKMS4fnpeHEbc)B4RLr%1vurCj8~{eS;S eWm;HSn@2do5&k-G0se0QYqSsQYvyR!`27czGzt#@ literal 21348 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

=B20s}KQ%`{EYU)nY1y|-oV>#b~mS}@&f z26Vs%*4j!~up;i@UK7FCX<=+Gk=?H4DuMqTPt(-%R+Dax*p9wmg=2>6$uSeb?s%W3 z*$e)t*|@G*=E1>RwqqB&m;Q{NF%D!TY{Q(fc5;cl=M{0cUK|X@C%NKcMIMD1(bbRQ zh490iOr7xg$-~nzW@~ncN_$=XQm>=K>gam~BcjnA=eI>hT5p@!8C^6#^1|~(SeTgsVB!|(*DHJ;u!Ja- z46mK*+5aMlM!V(AbcHkQtIj%6^Pvmbb!CMm?Ur6(p({+q-M1O@D}Nvl7r%-+?U~)m zsg$txC5=~z<& zry=4YXCS1z8)Kz~8!Z_?gyUpe5ulu3TRuB4iJs{noc4U*i0hTg& z2v)DsH2~M}CV{~xZpFQt-TderApOxzmFe&w7jLR{GIl`TD6hfMeHgL{i^-C`1gG$+OZ+@&KZ+@7uZ4X`8alk9#NTA&s!{^fxq`umR$9DyuCzrhd=j zqYFv3>*5kgecD>K?}3JQqC1L$>x3Cm;a(niszmm9HgP|Qm+-N#!@CrmWz6rIG326} X5}uqNyhWXSpnZGPcE>9oyYhbkKUSOo literal 59723 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 diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index b48bffc..d8bd1e9 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -25,10 +25,8 @@ module serv_alu output wire o_rd); wire result_add; - wire result_eq; - reg result_lt_r; - reg eq_r; + reg cmp_r; reg [5:0] shamt_r; @@ -41,13 +39,13 @@ module serv_alu wire rs1_sx = i_rs1 & i_cmp_sig; wire op_b_sx = op_b & i_cmp_sig; - wire result_lt = rs1_sx + ~op_b_sx + add_cy; - wire add_b = op_b^i_sub; assign {add_cy,result_add} = i_rs1+add_b+add_cy_r; - assign result_eq = !result_add & eq_r; + wire result_lt = rs1_sx + ~op_b_sx + add_cy; + + wire result_eq = !result_add & (cmp_r | i_cnt0); assign o_cmp = i_cmp_eq ? result_eq : result_lt; @@ -56,7 +54,7 @@ module serv_alu assign o_rd = (i_rd_sel[0] & result_add) | (i_rd_sel[1] & i_buf) | - (i_rd_sel[2] & result_lt_r & i_cnt0) | + (i_rd_sel[2] & cmp_r & i_cnt0) | (i_rd_sel[3] & result_bool); @@ -67,10 +65,8 @@ module serv_alu always @(posedge clk) begin add_cy_r <= i_en ? add_cy : i_sub; - if (i_en) begin - result_lt_r <= result_lt; - end - eq_r <= result_eq | ~i_en; + if (i_en) + cmp_r <= o_cmp; if (i_shamt_en) shamt_r <= shamt; From bc9705bef2a8e1f21b0df7f8a59cc8541851e811 Mon Sep 17 00:00:00 2001 From: somhi Date: Sat, 30 Jan 2021 12:52:38 +0100 Subject: [PATCH 092/289] add support for SoCKit development kit board --- data/sockit.sdc | 8 +++++++ data/sockit.tcl | 11 ++++++++++ servant.core | 17 +++++++++++++++ servant/servive_clock_gen_sockit.v | 34 ++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 data/sockit.sdc create mode 100644 data/sockit.tcl create mode 100644 servant/servive_clock_gen_sockit.v diff --git a/data/sockit.sdc b/data/sockit.sdc new file mode 100644 index 0000000..7a5fcef --- /dev/null +++ b/data/sockit.sdc @@ -0,0 +1,8 @@ +# Main system clock (50 Mhz) +create_clock -name "clk" -period 20.000ns [get_ports {i_clk}] + +# Automatically constrain PLL and other generated clocks +derive_pll_clocks -create_base_clocks + +# Automatically calculate clock uncertainty to jitter and other effects. +derive_clock_uncertainty diff --git a/data/sockit.tcl b/data/sockit.tcl new file mode 100644 index 0000000..3bb3945 --- /dev/null +++ b/data/sockit.tcl @@ -0,0 +1,11 @@ +set_location_assignment PIN_AF14 -to i_clk +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to i_clk + +set_location_assignment PIN_AF10 -to q +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to q + +set_location_assignment PIN_F14 -to uart_txd +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to uart_txd + +set_location_assignment PIN_AE9 -to i_rst_n +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to i_rst_n diff --git a/servant.core b/servant.core index 6e855af..5ac4ea3 100644 --- a/servant.core +++ b/servant.core @@ -48,6 +48,13 @@ filesets: - servant/servclone10_clock_gen.v : {file_type : verilogSource} - servant/servclone10.v : {file_type : verilogSource} + sockit: + files: + - data/sockit.sdc : {file_type : SDC} + - data/sockit.tcl : {file_type : tclSource} + - servant/servive_clock_gen_sockit.v : {file_type : verilogSource} + - servant/servive.v : {file_type : verilogSource} + de0_nano: files: - data/de0_nano.sdc : {file_type : SDC} @@ -135,6 +142,16 @@ targets: device : 10CL025YU256C8G toplevel : servclone10 + sockit: + default_tool : quartus + filesets : [mem_files, soc, sockit] + parameters : [memfile, memsize] + tools: + quartus: + family : CycloneV + device : 5CSXFC6D6F31C6 + toplevel: servive + de0_nano: default_tool : quartus filesets : [mem_files, soc, de0_nano] diff --git a/servant/servive_clock_gen_sockit.v b/servant/servive_clock_gen_sockit.v new file mode 100644 index 0000000..716e34d --- /dev/null +++ b/servant/servive_clock_gen_sockit.v @@ -0,0 +1,34 @@ +`default_nettype none +module servive_clock_gen + (input wire i_clk, + input wire i_rst, + output wire o_clk, + output wire o_rst); + + wire locked; + reg [9:0] r; + + assign o_rst = r[9]; + + always @(posedge o_clk) + if (locked) + r <= {r[8:0],1'b0}; + else + r <= 10'b1111111111; + + wire [5:0] clk; + + assign o_clk = clk[0]; + + altpll + #(.operation_mode ("NORMAL"), + .clk0_divide_by (25), + .clk0_multiply_by (8), + .inclk0_input_frequency (20000)) + pll + (.areset (i_rst), + .inclk ({1'b0, i_clk}), + .clk (clk), + .locked (locked)); + +endmodule From 9a0b0e877c809629ced825a91cf4eed578c15eed Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 4 Feb 2021 15:15:26 +0100 Subject: [PATCH 093/289] Move shifter to mem_if This allows reusing the data bus registers for shift amount --- doc/index.rst | 6 ++--- doc/serv_alu.png | Bin 9058 -> 8097 bytes doc/serv_alu_int.png | Bin 56690 -> 39064 bytes doc/serv_dataflow.png | Bin 42958 -> 45471 bytes doc/serv_mem_if.png | Bin 10595 -> 10528 bytes doc/serv_mem_if_int.png | Bin 63568 -> 68244 bytes rtl/serv_alu.v | 26 ++++------------------ rtl/serv_decode.v | 9 ++++---- rtl/serv_mem_if.v | 37 +++++++++++++++++++++++++------ rtl/serv_state.v | 12 ++++------ rtl/serv_top.v | 47 ++++++++++++++++++++-------------------- 11 files changed, 69 insertions(+), 68 deletions(-) diff --git a/doc/index.rst b/doc/index.rst index cf9fefc..c8cd221 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -38,12 +38,10 @@ serv_alu .. image:: serv_alu.png -serv_alu handles alu and shift operations. The first input operand (A) comes from i_rs1 and the second operand (B) comes from i_rs2 or i_imm depending on the type of operation. The data passes through the add/sub or bool logic unit and finally ends up in o_rd to be written to the destination register. The output o_cmp is used for conditional branches to decide whether or not to take the branch. +serv_alu handles alu operations. The first input operand (A) comes from i_rs1 and the second operand (B) comes from i_rs2 or i_imm depending on the type of operation. The data passes through the add/sub or bool logic unit and finally ends up in o_rd to be written to the destination register. The output o_cmp is used for conditional branches to decide whether or not to take the branch. The add/sub unit can do additions A+B or subtractions A-B by converting it to A+BÌ…+1. Subtraction mode (i_sub = 1) is also used for the comparisions in the slt* and conditional branch instructions. The +1 used in subtraction mode is done by preloading the carry input with 1. Less-than comparisons are handled by converting the expression A2{hF0`}bG$*eXgX5wa&VW^9A9&5UJ+8M7EO5yLEIj2SZwGZNY!tt4v_X;XwJ z(MBm$4DpmoS}02@g-m7V|5ZKD`@ZM=&i}ms^S!-ICeN=aTbOIP5G@exE1@imRvVX1SFE;#)nf_0vXMRUltUJ2=Elg!EA^GZx1&iR|Jct6GVOz3eSe>5$<4XEbi1zcn2hGE3wY!P1m!bptRjuYc2 zc0=*Q1PQcoHr@lx@qt8pc*c8R!=hrMKppI2BNGTLmXORvLRr=oIh_T}mXf&Zi1dasZ2>kH`TqH7@;UI_?#z(L~J0!j=KT#|T z6Yh~fArshW8jcc3iT3f8Al%4)I6qOi$UQ0w9f*K2@Bv~WlE{=KfUA7jut*LqoQ3ui z6VTv0mJU8_y@=s7HwfLDX(JHX#l$BF!x#Z^VGt_S+s!l59ZL3L5+F8F2|N*%>P3Zw z)3_9C4}^OJ%}zpwqwNDFh*$?78+MF{O7;&E@x{K;cAi)+TEh1L%?${E<9%YV7;hSf z!}6n(=qL(GfDIRr1E2}E45qIQ)`0?vN5I2K{?IrE0*Ox$ivrv|0w`e6P)M3}JRX)n z5)+YbXr{d_hlxxehyv~C-l!-pn#0bgan+Qy+aJeBMj-mXZi=C z-91GCuy`6b4uPbR7h@U~frIh!am=t-KFu}|=I;gK3xy|u6t>Vtgowe#B7Hf~XaOB1 z!tx>oF&;!Bha={CBdHV~lfWl)croq*UoU!8Y`6!>&K=4P2*5Gz`E)W0!xn~NqkYKn z4q?O?P+lOPOXhN8xo|AZgA?t}MX`}FzJV<7NI{erNcQvybddO2BiM0nVswBznnZ^C z+M-BeUxCCI0`(Vp3L}UPcE0Xm;xHtN2`&%@BJFYT@JITy7RGuj}!XCL+m!1X2Xv$16IF7eOV8ydYp?**pQ#PfU&W zjt6!ZS2k?-hVD14BNgOy})2xLs z8w8jr!Iyt><1r2mq^v^TliZE=UyaaVtd5S}c;M_Fu7NwwIoefGQLO$r1NmTu z=dKYWa|8Y8-Z>sQ{!sgqSH7h&GYd{b$@phzk?7g&`q#Ivm*y*hmlTjhU)nSr^#|aE zugeLs5Z`_T0Ny^X?%mzpRok!gszU0Mrun^hb`3r`kG}ma?AVt2S$y1RPjEmvmDI8G zC%1}f#QU}rR4>mo9c78bD&{-zc>KAJp~I0{A&Fm+77ZBkiStufL(7QnQX*c<~iKc@Z(^GA27|8=IR`YO0 zt)Je=)x487>@!Pi#9za@&mdK|-e$CFPIY2kS~3hhrT6wK4tKQ|ZhdtClFIa5u5F%W z0syN!BptmoBWqo>%8Exxnj$<-lQ4d){hyUx{qZR55By*-b!oy^CQE$eqp|r+j-&WqVfHj@28!$ z>=bBAfQEYwb?@^deb&4mXvt)N4%sWSkX~(fL??~iQ*@&VTOokjx<{v+>@P#!q;GJF z!(2yD3giMWzJ~6H$N|dtVmh{x`!-5|ZI^YoB~G%_pOtSXTT!Zv%-X*8KU6Hzc8ETm z_~}wfgNiISBuRN&PHt|A-ps75V{iJSllIshaor4c6F}d3a(cM3=D?3Huj2F7DV(m5 z{Tif&U?Pt|AfMX5{^qPpr z2Hoe;YqvVSsfi@N;Y(&Gzn*RrXBBij)3J#-Hga~^k>fI&ME3p><0|vfKoz5PKy^#q zX|=E0YdFUC+!v=qU{Nn^BwuQ}K26BHKg`WcbP4+&{{S7O;Ih}VWom5U{Yn0F%a?b} z;6>9<%g9?OH-(J3Ae)eMeGHJYiN4e*ztR)*z}?k5TDNGPnMzoU3FckRY}m&CL|EzP z=WLdllN0cM)xbU7ZF3RB&&z2c+K;*nl{A3RL(#%M8H8L;Wgrf{i+EYRX`eFS6$C{SdSTOnmD8W{LI1Zlrm78>?P?Yshlgl2bzJB7?&yhbTrO-rwsHJ8 z+A2d;(?V(Ikii|eV$o1bYHwnf;kNEM5GVIlV!A4VtFT4erfU-CO?pYn4GMr*MfJe` zxOVuE0)OZMdBAyUATz=7Td9s_L_k1Jp_Q50-=>#pE5|o|X-8UYp9nqzqFQ%Ky18=o zW=zgN?dYAd5)h(0Eq8#HyxnA>&l`MpiQw6qR#__O*EGSBONk$=hi~)i=YAM8SbS_p zCbkS-rd<8D%l78^mRxer&e7ZVRWi3%Ce~niyozPU|9DSM`Ag63?IBfxbsAi zuNwv)nhm767k6dk#syEwI$SEZoEXS4g@r#@CK)cjuDQ7l1esgf2B(0K#vU->Zy7m@ z0fH^D#B8f$PX3|&db&S{=55&)_3B#o%LWVYytAmI$HN~SQQr12-q74TFLlKRm85O; zX)`GKxl@l5x9$P)dLdL!pjSNeBg#3YF}10e(p)BEGz=aWGN@#D|X@cU=evG)>e7vP}Qc`#?ZI;*AX-8V5R$P3p9r za*AJ{8^%V+zAJ$d&oiJ>EQ4RLFQSE z{E}Wx0O&KyEZDtH_lET*^bXxME5_*wlN;oKyX)MM^TjAjIRA^4Vb#Fk*m(06^t+GO z>8R9HX?Wy-Ja9aVD@3(7 zE?@FhRGe0;eCNJ&-jY)9Wpd?M;LL^a6)-q^8m?>oqo z+jE?;H$JZf06)W1?x=PTR8!~HAbSAta`<*MmB4xWqzbc1XW-t^6glAZx~h-gicU2D z5HbLu1zGCjY1(f#uBR@8hGd51gqYsFg*Yy#h$>j$;wJ|ft#Ec|SR+}BTxg_u&2|rR zlb7M;j@^x3`o?SHnj7H{H68mOe9tD7tUxVGy&f5=oyyzEN_H&(jMNi(eeObY_M`k~ zBI6x5g~zjm%kk~+zO=t8nvh>}C}!h39X#M{S}q*)QEa)C_qwm8Bl%4XTR-w!(%ZR} zFYMcs+#@xB^k!TOIis8!Y_aRk+O4??c$>Nq@xrl?f~oc-c_7O$=wqz0j`f+tLwMJQ z)Cr9>x@SD{fh>*0z>@7biOoYbO2?Y}9T6R-I)(DM_hWZ=r~h4b`7c3@&8~gB^#Lj9 z?rDqL6_Z|{1>f1soz#5bue`Tdr_hv=u+#~?H9uH=f9s?`U5m2PlF&|lpE_QD5ZqjH z*D-duiuq`D0gLS|b{U^Hs)ouz(r}N-$Hc*pSH=jI1Ik$RS|F#Ge{Of{hA%3kSo1oX zB5)VDG_Xuv9DHx3thnKxUO|{birkZyo5RPtvbC-Cx`NZ5Y_((nf$olOdC&i7P`GO` zeVrHWm~raeZs&1Tjrw4aT>&IL5N*3KR-Gjms=P-Z6A32!P)#@W3pKkTa*)INN}VrV z^ME|0`aX6PcpTddlp3n-z>LORsX(J@gPG;3(jG|p@_m#mT9<@@gZN6ag2FG-)xPm_ zQk(HnXC;_G{U`I)z9)f$m^~1U<-g=>?0shLNg5${pAljh(5cbSvpG`tY@KW;j~+#u ziS93LOjhWX)|KN)=l4nj$I(?~ve_x~R`(wH|Bb<-t?k&uoU+UQY*NEceT+w4eQS_T?R!Q^RV~OM(N0pEkBN z6+6%hhiA(#K#|5F=c|S#N}c+{iO^tWg5yC_!9PmfSI$h9pW?En)6HErYreFJo-5nxSE$by~jU*Io&mJaeW+np{ONQY|8zuxkL$(@HhOedRxooY&4oiPU zM}J=!^~B@fN?-tYv-8`+Y^44agmg{e1==enj zqqaza-xzv(dVB7b!~aTCAGwhR;z+#v{~A!rDU?NU{>1J711|p?F<(OKdd}(N9!F?yR#$NqOo_AZxvh8BvQ0B){S1;2mn#&d;bcL9gxc>3piYWt2%mduq z0p*d#Wz9!tAPc#Eqm9nzp=~GXvkXQX2Le8Iw>ztu6|2E~3Kq^l)Anp!JW)9+F$K~% z^UsX~yNecge43v3)_;7zIhyz!_s$Hi;b2sMvI{$?q2l6Gc)rhYp?L;6KH)v~!3ouJ z)@YzU!eXh1`aUgxD6CeRmBkSbKkqKAL?2g*$(N>^kCrWq-`alk8jBQn=`!xbd7;-} zWw9y*=W>J)q-SF0d1z|Odf$6s4nq}O@ZFLE*}P8hT&>?VPnRG~e(a_4Cy0-R>O6K_tz|QQ#NYbv&VS+!pVy4#?<(nx#^nB z_}7nNldpSjceHHV^-@Y}bZph#`m$NgB@yqkZPzq}QWkKiZn$E{^zE9+B15pHGdXEn zi?ibpJ*@&E0rkALyq>D0xtPJoN?)_Dvg=$)(2tQ_H9EGR9O0p^iZ>%3@4BxddwVaJ z{xHpw-v2=Kyd=+4gCMOkHR z>phIz*V6gwy33l?CagiJxALYo8l^!t{!tWGt`~4fqv6Qy(-y5;iMUD{r$I@^Pp((33&gO=$v>BOGQNKz?H%urRuxW-FDR?TG##)iu{_+{VJUrdQm;!!q09~J zmhZ@&o=RPD+v;K37sH+3Z~0u02D=|)^5s16YRZrPzIXeDPfB*rA|GlkZ8-AI+Sd$dk-2f)t)w^tvs(Vf= ztYRk358qnT0=5tJ&84KW=2K2X%@aL4i4(rJLUs-`3nkw^Nb&nyM$0KM zq}p-CcQiY{_Lo&(w&N8P7ljwceaSajm>ZRxSILaIzh>>noVV#NcQk*U;QBOis*Q=#96(D)sZ-tpj$k&yEwzJ_LJOsS$o;Wh1sE#&b?{s z%#Gk74An56pEy#dujHdoGf=)k+4fpf_MH7+nQ(nOdm)jef@^w45Wk@j;4lhKuQ^ z#T)}jRsQE?(SLLO{7YIO8D}Q`diTP8?^%!2#2WCOAkZWtw*KeyO_4rQ(GEU2awq#?8Ri~!5 z6X(xD-<+r?G3uo(^D^Q*(JFG8kNe^Z^8=90mz>X4;Tcz?e`K#P4<^m0&%TLEFV!J- zBa#*_#}=L(qPDwdH?~K1UHWX2+)~s{y>?-c4bGO=32xb&X z-$J*`lxVbZzl$RYpF_+ioI2H+T6;r|A}m(D*UbJ}A<(n1d?~G3m#T|~M31RTR8wO0imsJeyFi`4r_&=*e z(6XB+W{+M5Hkq%5cV1DtYKo1XyYVqikx^UG^^o9lL|vVE0hYY!R8MNRC!+)wd~{ac z88qi@HI$*#w;D`KCshnEBaH(d!?1#>gXZyzLSzz_p z^Dot*l30H^OCYH;_G*`Ak%I~2JNIda+LvK)Q#%-CKH4mbV!=ZRrIxTIYKoIKN_1XK zF4pC35sUX;=S!kGE#K%xs+NBHv>f+rRshpz@uFRX*p1=TT_2YBWg48w?9Y^}Tz#nT z*NU;EsBWuZzrxzs%q~Xt<(T`V4RNO^gO~f)+VJuxUbMnH)|dW=n@I7kJ_g-5BMQtJ zt4mBc6*!!l-M0@CzQwFnsJ7;5WS$C*x?Tx(XZoHcL8Nf+$ ze@mz2{rO4pFS*x(4Z9)e2cdJoTbrMmin3qXmGZOF`47$2zsDc!;r>6?!Z2P?ZwlmU zoh1`^;dblL=NDJ@4=r|%J(UA%nYT*LF9XnCroS6N1AGoj2h1Q=Gobp=!hUC!O0r&>7!5Ep?l?;@Us12|iql|KWK{ks$}D tZ%i!pF}b-I_1ypf literal 9058 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 DXgp|+ diff --git a/doc/serv_alu_int.png b/doc/serv_alu_int.png index 1d8c04b39b5dd9cecf4ad5eadb1e9be4293b7d9a..a58ca4578fbe6510eb9e4c9ebe5e509cf7a0be86 100644 GIT binary patch literal 39064 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

>?>=+ljF+BCjkb^pE35|nKHBRamwc|u zZvFrE&X!O1H7ky^Y>$|$*_P>Wq=0ptR1PwK`TJB53S`WXzYWJrtAvAIbv^e5i7LC& zYnPTSnpAynYevhhbynK%O)QrW|2b;Mt-AT@x=pR+0^e=6_W*0Rx( zDt9j+u84q^J8nsn094lS$$jmQ6X(t?G537TI78h%U)y-t@D$+RiTnR^7Nr|fCxQ)h zwlS?sJofO$zQ*Y;a0f%g+qD30J_A&abK1bSJL9wfZ&>j9`*x7ddv=Vt?R`Dy zxO^W>=-566GUDjEKL+de2l0nUTF^9Ez3pG^FnQ(n?AGt|Mk#8dJ7-N^%-!D8*`i8W z+j2A2!cum7B;HPfK-ADz7?i;fPVvy{TWKKrI zAbhz#bDeNzB?uc9R4t#g_wQN&`}WO%0M3yi2CKoFf9?0olBc z{V zwb5DU#;+^;@UkZUQE|Y^?1}$+v?}Y|>_3mb<&Qb_??*9N=U{(7I`;)TB78jXdXSKf z=h+ciydQ)9Jc_va_{R8ub(qil@%LB}S8ui|4g(P1QrQXoF=X@jZ2IiiH@kv9G5bJp z+udQ9jR;a{l9x~aw)r6YSLZ{{v%6j|a7u(Py8UyhwxoZyO=WLS-p=VquDYX(4zB34 zikpV}H0g3;+cwq?+lGw`W>yD%PU&#^yVW(EQ=RWGp*ZMA4!;{es)Y0_<$RD0d@)XL zAA!498M5qmlhGBtPo0^6($8BXHlffZ{5P(TW?3t0R`DW$p%+&ZXF$Z37kkqz<=FDW4Bjytb z=<<)|ZkaM+RyEknA^V%}P4VrxeDOBpS@W>_pY$L=)>ioQ%7HGgY`VGIiQxxINyL)1 z-gXDdOt)KJ|rB*H{D(n#J?yLmG8LR<^>m2lD z>F)_}(bq4>02DqQoedkSbfinq@~C`)jaJ3>b!026a*c_PU3!t{l@a2qH=v57^Xthss=}&rm1A~%GuZc;SE*S* zC#>NY-n;EeK6vopB~ryj0bwI5mU?~Z&(0PGh~7_HQev^4Ej6lwYwCJZZsU=)@5iK@ z&=R?{9y0Kzra$F?YdC43uV!G?g6x~UZ6(N%zpT5vN?Zz0fOr5D0_VJKco17+{@#SU zyLIyMmV%#j4^{cG_}(KRn0nZlT!vcvLmu|_`la5RcehPl`GWCh=PrJ&o&0N8vTpvE z;eRe5Ib}&;$ZMMv=anQt#+(8!x+D>iwEi2+lBnHn`=RbmLdh5@fEbqQkd&Ic>0ipp z_9sCBkHsD}bvLFZAyI|jo@M9GuFDO&xMp2<*OzNG7W(AjeGs@G1?ITKe8*#;R|AMz zIN{CI;HcS2?sewBEae>d^z$I=_x<*8dyvw8&dplwY;W&o+}Zyv!E;~Q&yK8E#ikrk zTX2RcUF>(lx)0pgTMF_p^wibnGYw05f3N6sjsLF|1wB}V`@Cy)&cnZhfIBcuc`e?Z`uZm6xh*2feF(R(Bmgp0+a7#INq*g-y6Wz zmJZYm^aZEOC{rrCx?Ah-KQ4WFnziAGx%te-_PKw~#p<`Ne|>qk7}Q)egdWcib31p+ z%wM6&PxhWt`Jpt8(eddeI<0-!F0!xj&cpQcV5>i@O^a&VGFrgJWVe#s*OOVs&b`fI z!G^R`6=T#d>j8!ptr-9r!NK60%xzxCeWw4`eHNuz4|ju0n#>? z-d0Rk1NP>Z?YG*yp$@3nqt0FNIj@A32hggeayrVc4`_@wR zA?nR~?lyM!hPOLrEq`BcAJaAaBjpVsHnt__tm$7G7rei(^uyzW-JVyY3^R(FY$p}% zof{~vua7;aPg)(*-S8bydnJv}PWk%CI;C{_j;QTb#|vx>?vX1RSxY_cZEuZto|B$< zr$YB~6}ct9eMi)j``N9R#K~p%oThxMi98(w(#%V2Dl>Um^qQ#l#O{^7X~R6|JE8%q zYt9=3vjcOCywtL?cqUL zo_x|L)ej_;8(v4P%GJWgIV1tJv1Mp}-nP=RZTVA6-`>!ik-xrdsYd}=$%gLrEn(xQ z-Q-7ImuCh!8B?8xUn;(EpW)fZIdY;Xuh5c)yyFiTr3U45%BtGrT$G}+_+n|{og~xT z)K4O$-KzTWuYn0GX;}-*+2c;`xd5DhCMWsXt(pflckbU(L+i`k>?R*srpwHaa~ZIE zVmIb<%iylP;=ESBdU(68SU_Cs0#3r@(Z^~)hvE%};2z)|jw>AGKB;w&Sk13#j>_OH1 zHWa;K5+lL(A9win()CFRy*P*L8?z~2tZto=C$Ia}_(j+>@w(o+F2QLJGIynChxCtMX8Q-E>ubg@DO7Dwv zfrM*SdRyI>N`IxBg>dhQ9cURS2enQ#OI^h}r{&8JCXG+7iSF%Ed%Q{oOf#tb`o6Pw ziLILvx=MX_a$75)jGL<0wwye}&N%RF(g;O9%Yq6(K|nOf7CQ7adJgQ5@BoI(B|`wf zN92sIYp*TEE`VRPq#3$B7>v350&hw(3SMP}*l_;CuYSd3yZ1C5f1VZW39O2p`#^7d zo6atNap2{-(cKNH-=8r&SwIT!C4ukr4!VZV|8%C=q`S4+X|G_gVn!6bbL3~Ubd-Rq zxXr94#cy~6>Sbgt)i<+2nS!O(^D&?q^hUR$Tec~M1AQ&uffrzdBD+UVz9q%>9`8*> zlYnUhWo47l*_SxvN=x3ey%li4GLT1TYXwk()>#u<*u5Hf_eX0&J630w{Pm=5Lv4NT zGa!mR_%|R`*H90(p7qB?wqXaz@dVrYf$LuQm7fh~kMM@?%8~3HQi<$3^mTGT=f_c_ zzm{RLL4D4(6;6g{zGxQUdmE&aQ$ay%@vUDu!Sd^4XDusc>UzG*x=k+lH=yje!P?gT z(=)(}VAtQyHMA@(^bBcx{~#24#a#L%q*cCdLrX*z)iwKk(2b{2)d1-oa9^7fwY}_A z%8G--(w^NM{K+GF-R)U3Kv}H+^e^{pRdcI#Gj7*?wp0Pb2J)i1BX9U57&gGG5BD6b z>Alz6D@=0#upoOD02(oUpMswO$*H=dZm%C|sa)#bw_$q1rOmGZ@9w^Q+ubWe#}?et zIUO#$cRb%E|J(YgsF$k@ui7w*%GDovSJ@ z3O0ahnuC!Sm+6`(fsD#(kA6@T@O~{Q!KF;A>{@H$IkjwEbt#1Smi_~P-Q&T1%{=Y9 zzeaRNfpWP}fCi`D9JPmxbiDnj`CoIYC`$okmHqv%b`1ly`JfI2RO&R7r6o(&p~iS* ztR4Cyx@YhP#*o^b?33P;HN3I)RfpZe?%vOFZ!4bj{i%-&D6#TUPl z9{cJ*>;3~XcY!n+z}mGXir$ui{wz1lL6`2^1MrwchL`l^g~QV!^>q`+8!JIwZvSHd zdJp$E#`Y&zP*BE}4YSj8~`zgFosb<&zO-K;7Dd_aT>k|5yuM znnwg9(Bg<5E;=;-xhLgB%I4tU4WA{)4@G_SzUK{v!HNV!*v#Y zb64Fj4(ETyvmavHY`+3$3Bn9y5QMeY@GJ$pzwI2D@9^83dWP#k>Y*iW*OthoAFwU( z!v_mT|6*x>pX+l!zvC{Z_Yayh>7P`?!`NU8Q}iFBq#-iN8~qmU%>6qGJGm@1a6&+1 zttOYZrYd9H`Y|1)(<|OceFlGexzti7yxIPRBPWXse$TYnk3ZvJkDF~3)HQvT6?5ZD zPp>|o;l1=YvAWHEV4_x zDjHba8FH{;#=l+>0^ruZC|kVkz2PP#UfYtbP4louJ@*WM(9io?fhw5{mN+VtcXnR7 zL$>1e<@ja#&y?fjq?7^W+v~8p@0J4{2BI~?TlMfnd(R^l6bDkZCqX#$6cATuOzj_@ z7skc{gOkcjPn?(cY3PCzYco#%UVLE5lotbwOCP0ReE%LLx$YC>!-o%k4G;HztWWX; z78cYrF!#g7O`xJ`M27lbUjmeZVtillDFeJJcA)Qr1eBsom{pm-fcqcoD13hotfTJ3 zOYGlkF8;Qx<{!dXLcimSuJQtr3ImfkvvLvVG_&?90CdklUiMKVh<~3vr>xBXml)sh zlj{cd|ID7-6MQ3YWl-vf?=GvEH~G#ZhNhnf9(E}HO(MElx+DMY9RSUfNcCm+aLz?{ z%2J$n)pQJ=^z`Plr_nu-q9@I<4NFy#RrAUUjku1mt8?M`PfF7~(_VZne^r*V=Jxu* zd1T5gAKbU?m&!Qa`E)3DH!u_6w1c`ge19Im5gVTw zfT;(3yzSlvto575*((d4%+V#ewOL=4mgA4?EIa8l)e`$kLF!Uj%2@P|$l{J{QOjtpK$^K>>?QLwcsVT+fNgclge41Oye|JHt9VgFSQy zx$~nHD5M&;wc9lQ+wDpaZ7%%s`U=@24KM(Y_rdNY-gN}B{&;H@6avI(@js9eUup`| zls7xL43x*8?^>Ql#ehV-Y47)c6-nVlb58C$ZhGIqJ3$%W(|X^&K~uo|2zbkx(Gujk z{&};mj~WJ!$*+^`FuR)aO?M#Q#<>jfx>i(IGIFM8OpxxU+AS?VJR4*~ zb`(0Am;*l-)dB>g(`gXaD<^;Z6WR!u!vJL)S)beMm9UZ@hc1L#q*^2J*a;C=^R zzZ9329$ubmsa*%(ogBk$81|rK2dwmK~Q4c{A2fzdwcK5L6ZMbqfg3`sO6P;-L)|l2kJ*p)h7*fH+Xe|o1u zCo*p?h)TQt!#krG8#K#4j^lE;r~~MMPqsQ6Quun)8W

=B20s}KQ%`{EYU)nY1y|-oV>#b~mS}@&f z26Vs%*4j!~up;i@UK7FCX<=+Gk=?H4DuMqTPt(-%R+Dax*p9wmg=2>6$uSeb?s%W3 z*$e)t*|@G*=E1>RwqqB&m;Q{NF%D!TY{Q(fc5;cl=M{0cUK|X@C%NKcMIMD1(bbRQ zh490iOr7xg$-~nzW@~ncN_$=XQm>=K>gam~BcjnA=eI>hT5p@!8C^6#^1|~(SeTgsVB!|(*DHJ;u!Ja- z46mK*+5aMlM!V(AbcHkQtIj%6^Pvmbb!CMm?Ur6(p({+q-M1O@D}Nvl7r%-+?U~)m zsg$txC5=~z<& zry=4YXCS1z8)Kz~8!Z_?gyUpe5ulu3TRuB4iJs{noc4U*i0hTg& z2v)DsH2~M}CV{~xZpFQt-TderApOxzmFe&w7jLR{GIl`TD6hfMeHgL{i^-C`1gG$+OZ+@&KZ+@7uZ4X`8alk9#NTA&s!{^fxq`umR$9DyuCzrhd=j zqYFv3>*5kgecD>K?}3JQqC1L$>x3Cm;a(niszmm9HgP|Qm+-N#!@CrmWz6rIG326} X5}uqNyhWXSpnZGPcE>9oyYhbkKUSOo diff --git a/doc/serv_dataflow.png b/doc/serv_dataflow.png index 1d701559ef8ace802576410259b5a6217d746812..6bf1237ee09ca9356c7c5772a2ca86156ea151c9 100644 GIT binary patch delta 21618 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≻~qtyU(r@wdo|_3J2$|+)lkz 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 delta 19086 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 diff --git a/doc/serv_mem_if.png b/doc/serv_mem_if.png index babcf55e0d5844e9bcef868da0d2d7efd5762308..0ffc48b6ff00f98619ef8e93db4fc1cbe23fcdd6 100644 GIT binary patch literal 10528 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 RF=fMktl=n&JhO8#{{tee-=6>g literal 10595 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 diff --git a/doc/serv_mem_if_int.png b/doc/serv_mem_if_int.png index d23ec6d453a178c496c2ab7244c91190833be7ea..ba7c43d4f8d35a1f7ae9615d009c69619b49455d 100644 GIT binary patch literal 68244 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

S>v?`ckIM~}CH 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 literal 63568 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 diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index d8bd1e9..400c181 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -3,15 +3,10 @@ module serv_alu ( input wire clk, //State - input wire i_init, input wire i_en, input wire i_cnt0, - input wire i_shamt_en, output wire o_cmp, - output wire o_sh_done, - output wire o_sh_done_r, //Control - input wire i_op_b_rs2, input wire i_sub, input wire [1:0] i_bool_op, input wire i_cmp_eq, @@ -19,8 +14,7 @@ module serv_alu input wire [3:0] i_rd_sel, //Data input wire i_rs1, - input wire i_rs2, - input wire i_imm, + input wire i_op_b, input wire i_buf, output wire o_rd); @@ -28,18 +22,14 @@ module serv_alu reg cmp_r; - reg [5:0] shamt_r; - wire add_cy; reg add_cy_r; - wire op_b = i_op_b_rs2 ? i_rs2 : i_imm; - //Sign-extended operands wire rs1_sx = i_rs1 & i_cmp_sig; - wire op_b_sx = op_b & i_cmp_sig; + wire op_b_sx = i_op_b & i_cmp_sig; - wire add_b = op_b^i_sub; + wire add_b = i_op_b^i_sub; assign {add_cy,result_add} = i_rs1+add_b+add_cy_r; @@ -50,26 +40,18 @@ module serv_alu assign o_cmp = i_cmp_eq ? result_eq : result_lt; localparam [15:0] BOOL_LUT = 16'h8E96;//And, Or, =, xor - wire result_bool = BOOL_LUT[{i_bool_op, i_rs1, op_b}]; + wire result_bool = BOOL_LUT[{i_bool_op, i_rs1, i_op_b}]; assign o_rd = (i_rd_sel[0] & result_add) | (i_rd_sel[1] & i_buf) | (i_rd_sel[2] & cmp_r & i_cnt0) | (i_rd_sel[3] & result_bool); - - wire [5:0] shamt = i_init ? {1'b0,op_b,shamt_r[4:1]} : shamt_r-1; - assign o_sh_done = shamt[5]; - assign o_sh_done_r = shamt_r[5]; - always @(posedge clk) begin add_cy_r <= i_en ? add_cy : i_sub; if (i_en) cmp_r <= o_cmp; - - if (i_shamt_en) - shamt_r <= shamt; end endmodule diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 2daee16..8bc1dc4 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -6,6 +6,7 @@ module serv_decode input wire [31:2] i_wb_rdt, input wire i_wb_en, //To state + output wire o_sh_right, output wire o_bne_or_bge, output wire o_cond_branch, output wire o_e_op, @@ -19,6 +20,7 @@ module serv_decode output wire o_bufreg_rs1_en, output wire o_bufreg_imm_en, output wire o_bufreg_clr_lsb, + output wire o_bufreg_sh_signed, //To ctrl output wire o_ctrl_jal_or_jalr, output wire o_ctrl_utype, @@ -29,8 +31,6 @@ module serv_decode output wire [1:0] o_alu_bool_op, output wire o_alu_cmp_eq, output wire o_alu_cmp_sig, - output wire o_alu_sh_signed, - output wire o_alu_sh_right, output wire [3:0] o_alu_rd_sel, //To mem IF output wire o_mem_signed, @@ -106,6 +106,7 @@ module serv_decode //funct3 // + assign o_sh_right = funct3[2]; assign o_bne_or_bge = funct3[0]; // @@ -132,6 +133,8 @@ module serv_decode //opcode & funct3 & imm30 + assign o_bufreg_sh_signed = imm30; + /* True for sub, b*, slt* False for add* @@ -184,8 +187,6 @@ module serv_decode assign o_alu_cmp_eq = funct3[2:1] == 2'b00; assign o_alu_cmp_sig = ~((funct3[0] & funct3[1]) | (funct3[1] & funct3[2])); - assign o_alu_sh_signed = imm30; - assign o_alu_sh_right = funct3[2]; assign o_mem_cmd = opcode[3]; assign o_mem_signed = ~funct3[2]; diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index 85a5ac8..1130b8c 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -5,16 +5,21 @@ module serv_mem_if input wire i_clk, //State input wire i_en, + input wire i_init, + input wire i_cnt_done, input wire [1:0] i_bytecnt, input wire [1:0] i_lsb, output wire o_misalign, + output wire o_sh_done, + output wire o_sh_done_r, //Control input wire i_mem_op, + input wire i_shift_op, input wire i_signed, input wire i_word, input wire i_half, //Data - input wire i_rs2, + input wire i_op_b, output wire o_rd, //External interface output wire [31:0] o_wb_dat, @@ -27,7 +32,7 @@ module serv_mem_if wire [2:0] tmp = {1'b0,i_bytecnt}+{1'b0,i_lsb}; - wire dat_en = i_en & !tmp[2]; + wire dat_en = i_shift_op | (i_en & !tmp[2]); wire dat_cur = ((i_lsb == 2'd3) & dat[24]) | @@ -49,12 +54,30 @@ module serv_mem_if assign o_wb_dat = dat; - always @(posedge i_clk) begin - if (dat_en) - dat <= {i_rs2, dat[31:1]}; + /* The dat register has three different use cases for store, load and + shift operations. + store : Data to be written is shifted to the correct position in dat during + init by dat_en and is presented on the data bus as o_wb_dat + load : Data from the bus gets latched into dat during i_wb_ack and is then + shifted out at the appropriate time to end up in the correct + position in rd + shift : Data is shifted in during init. After that, the six LSB are used as + a downcounter (with bit 5 initially set to 0) that triggers + o_sh_done and o_sh_done_r when they wrap around to indicate that + the requested number of shifts have been performed + */ + wire [5:0] dat_shamt = (i_shift_op & !i_init) ? + //Down counter mode + dat[5:0]-1 : + //Shift reg mode with optional clearing of bit 5 + {dat[6] & !(i_shift_op & i_cnt_done),dat[5:1]}; - if (i_wb_ack) - dat <= i_wb_rdt; + assign o_sh_done = dat_shamt[5]; + assign o_sh_done_r = dat[5]; + + always @(posedge i_clk) begin + if (dat_en | i_wb_ack) + dat <= i_wb_ack ? i_wb_rdt : {i_op_b, dat[31:7], dat_shamt}; if (dat_valid) signbit <= dat_cur; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index ef2302c..547cd75 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -35,9 +35,8 @@ module serv_state output reg o_ctrl_jump, output wire o_ctrl_trap, input wire i_ctrl_misalign, - output wire o_alu_shamt_en, - input wire i_alu_sh_done, - input wire i_alu_sh_done_r, + input wire i_sh_done, + input wire i_sh_done_r, output wire o_dbus_cyc, output wire [1:0] o_mem_bytecnt, input wire i_mem_misalign, @@ -70,9 +69,6 @@ module serv_state assign cnt4 = (o_cnt[4:2] == 3'd1) & o_cnt_r[0]; assign o_cnt7 = (o_cnt[4:2] == 3'd1) & o_cnt_r[3]; - - assign o_alu_shamt_en = o_cnt0to3 | cnt4 | !o_init; - //Take branch for jump or branch instructions (opcode == 1x0xx) if //a) It's an unconditional branch (opcode[0] == 1) //b) It's a conditional branch (opcode[0] == 0) of type beq,blt,bltu (funct3[0] == 0) and ALU compare is true @@ -93,7 +89,7 @@ module serv_state //Prepare RF for writes when everything is ready to enter stage two // and the first stage didn't cause a misalign exception assign o_rf_wreq = !misalign_trap_sync & - ((i_shift_op & (i_alu_sh_done | !i_sh_right) & init_done) | + ((i_shift_op & (i_sh_done | !i_sh_right) & init_done) | (i_mem_op & i_dbus_ack) | (stage_two_req & (i_slt_op | i_branch_op))); @@ -110,7 +106,7 @@ module serv_state shift : Shift in during phase 1. Continue shifting between phases (except for the first cycle after init). Shift out during phase 2 */ - assign o_bufreg_en = (o_cnt_en & (o_init | o_ctrl_trap | i_branch_op)) | (i_shift_op & !stage_two_req & (i_sh_right | i_alu_sh_done_r)); + assign o_bufreg_en = (o_cnt_en & (o_init | o_ctrl_trap | i_branch_op)) | (i_shift_op & !stage_two_req & (i_sh_right | i_sh_done_r)); assign o_ibus_cyc = ibus_cyc & !i_rst; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 3113073..7fbd0d9 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -64,6 +64,7 @@ module serv_top wire [3:0] immdec_ctrl; + wire sh_right; wire bne_or_bge; wire cond_branch; wire e_op; @@ -103,6 +104,7 @@ module serv_top wire cnt_done; wire bufreg_en; + wire bufreg_sh_signed; wire bufreg_rs1_en; wire bufreg_imm_en; wire bufreg_clr_lsb; @@ -113,11 +115,6 @@ module serv_top wire alu_cmp_eq; wire alu_cmp_sig; wire alu_cmp; - wire alu_shamt_en; - wire alu_sh_signed; - wire alu_sh_right; - wire alu_sh_done; - wire alu_sh_done_r; wire [3:0] alu_rd_sel; wire rs1; @@ -130,6 +127,8 @@ module serv_top wire mem_word; wire mem_half; wire [1:0] mem_bytecnt; + wire mem_sh_done; + wire mem_sh_done_r; wire mem_misalign; @@ -152,6 +151,8 @@ module serv_top wire [1:0] lsb; + wire op_b = op_b_source ? rs2 : imm; + serv_state #(.RESET_STRATEGY (RESET_STRATEGY), .WITH_CSR (WITH_CSR)) @@ -177,9 +178,8 @@ module serv_top .o_ctrl_jump (jump), .o_ctrl_trap (trap), .i_ctrl_misalign(lsb[1]), - .o_alu_shamt_en (alu_shamt_en), - .i_alu_sh_done (alu_sh_done), - .i_alu_sh_done_r (alu_sh_done_r), + .i_sh_done (mem_sh_done), + .i_sh_done_r (mem_sh_done_r), .o_mem_bytecnt (mem_bytecnt), .i_mem_misalign (mem_misalign), //Control @@ -188,7 +188,7 @@ module serv_top .i_branch_op (branch_op), .i_mem_op (mem_op), .i_shift_op (shift_op), - .i_sh_right (alu_sh_right), + .i_sh_right (sh_right), .i_slt_op (slt_op), .i_e_op (e_op), .i_rd_op (rd_op), @@ -219,10 +219,12 @@ module serv_top .o_shift_op (shift_op), .o_slt_op (slt_op), .o_rd_op (rd_op), + .o_sh_right (sh_right), //To bufreg .o_bufreg_rs1_en (bufreg_rs1_en), .o_bufreg_imm_en (bufreg_imm_en), .o_bufreg_clr_lsb (bufreg_clr_lsb), + .o_bufreg_sh_signed (bufreg_sh_signed), //To ctrl .o_ctrl_jal_or_jalr (jal_or_jalr), .o_ctrl_utype (utype), @@ -234,8 +236,6 @@ module serv_top .o_alu_bool_op (alu_bool_op), .o_alu_cmp_eq (alu_cmp_eq), .o_alu_cmp_sig (alu_cmp_sig), - .o_alu_sh_signed (alu_sh_signed), - .o_alu_sh_right (alu_sh_right), .o_alu_rd_sel (alu_rd_sel), //To mem IF .o_mem_cmd (o_dbus_we), @@ -285,10 +285,10 @@ module serv_top .i_init (init), .o_lsb (lsb), //Control - .i_sh_signed (alu_sh_signed), - .i_rs1_en (bufreg_rs1_en), - .i_imm_en (bufreg_imm_en), - .i_clr_lsb (bufreg_clr_lsb), + .i_sh_signed (bufreg_sh_signed), + .i_rs1_en (bufreg_rs1_en), + .i_imm_en (bufreg_imm_en), + .i_clr_lsb (bufreg_clr_lsb), //Data .i_rs1 (rs1), .i_imm (imm), @@ -329,14 +329,9 @@ module serv_top .clk (clk), //State .i_en (cnt_en), - .i_init (init), .i_cnt0 (cnt0), - .i_shamt_en (alu_shamt_en), .o_cmp (alu_cmp), - .o_sh_done (alu_sh_done), - .o_sh_done_r (alu_sh_done_r), //Control - .i_op_b_rs2 (op_b_source), .i_sub (alu_sub), .i_bool_op (alu_bool_op), .i_cmp_eq (alu_cmp_eq), @@ -344,8 +339,7 @@ module serv_top .i_rd_sel (alu_rd_sel), //Data .i_rs1 (rs1), - .i_rs2 (rs2), - .i_imm (imm), + .i_op_b (op_b), .i_buf (bufreg_q), .o_rd (alu_rd)); @@ -403,17 +397,22 @@ module serv_top .i_clk (clk), //State .i_en (cnt_en), + .i_init (init), + .i_cnt_done (cnt_done), .i_bytecnt (mem_bytecnt), .i_lsb (lsb), .o_misalign (mem_misalign), + .o_sh_done (mem_sh_done), + .o_sh_done_r (mem_sh_done_r), //Control .i_mem_op (mem_op), + .i_shift_op (shift_op), .i_signed (mem_signed), .i_word (mem_word), .i_half (mem_half), //Data - .i_rs2 (rs2), - .o_rd (mem_rd), + .i_op_b (op_b), + .o_rd (mem_rd), //External interface .o_wb_dat (o_dbus_dat), .o_wb_sel (o_dbus_sel), From ceddc1876ba08333b7ead3f90b703a633c22655b Mon Sep 17 00:00:00 2001 From: somhi Date: Sun, 7 Feb 2021 00:21:44 +0100 Subject: [PATCH 094/289] Sockit notes added --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 9391bd7..c846ffc 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,12 @@ FPGA Pin D11 (Connector JP1, pin 38) is used for UART output with 57600 baud rat fusesoc run --target=de0_nano servant +### SoCKit development board + +FPGA Pin F14 (HSTC GPIO addon connector J2, pin 2) is used for UART output with 57600 baud rate. + + fusesoc run --target=sockit servant + ### Saanlima Pipistrello (Spartan6 LX45) Pin A10 (usb_data<1>) is used for UART output with 57600 baud rate (to use From a6292d46a2030bb56ada7637bc4d56131e94c4f4 Mon Sep 17 00:00:00 2001 From: somhi Date: Sun, 7 Feb 2021 12:04:23 +0100 Subject: [PATCH 095/289] Add support for DECA Max 10 board --- README.md | 8 ++++++- data/deca.sdc | 8 +++++++ data/deca.tcl | 19 +++++++++++++++++ servant.core | 25 +++++++++++++++++++--- servant/servive_clock_gen_sockit.v | 34 ------------------------------ 5 files changed, 56 insertions(+), 38 deletions(-) create mode 100644 data/deca.sdc create mode 100644 data/deca.tcl delete mode 100644 servant/servive_clock_gen_sockit.v diff --git a/README.md b/README.md index c846ffc..d4d7df8 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,13 @@ FPGA Pin D11 (Connector JP1, pin 38) is used for UART output with 57600 baud rat fusesoc run --target=de0_nano servant -### SoCKit development board +### DECA development kit + +FPGA Pin W18 (Pin 3 P8 connector) is used for UART output with 57600 baud rate. Key 0 is reset and Led 0 q output. + + fusesoc run --target=deca servant + +### SoCKit development kit FPGA Pin F14 (HSTC GPIO addon connector J2, pin 2) is used for UART output with 57600 baud rate. diff --git a/data/deca.sdc b/data/deca.sdc new file mode 100644 index 0000000..7a5fcef --- /dev/null +++ b/data/deca.sdc @@ -0,0 +1,8 @@ +# Main system clock (50 Mhz) +create_clock -name "clk" -period 20.000ns [get_ports {i_clk}] + +# Automatically constrain PLL and other generated clocks +derive_pll_clocks -create_base_clocks + +# Automatically calculate clock uncertainty to jitter and other effects. +derive_clock_uncertainty diff --git a/data/deca.tcl b/data/deca.tcl new file mode 100644 index 0000000..f4e511e --- /dev/null +++ b/data/deca.tcl @@ -0,0 +1,19 @@ +#MAX10_CLK2_50 3.3V +set_location_assignment PIN_P11 -to i_clk +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to i_clk + +#LED[0] +set_location_assignment PIN_C7 -to q +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to q + +#P8 3 GPIO0_D0 (P8 1 GND) +set_location_assignment PIN_W18 -to uart_txd +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to uart_txd + +#KEY[0] +set_location_assignment PIN_H21 -to i_rst_n +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to i_rst_n + +# Configuration mode that allows Memory Initialisation +set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "SINGLE IMAGE WITH ERAM" + diff --git a/servant.core b/servant.core index 5ac4ea3..bd2e6d6 100644 --- a/servant.core +++ b/servant.core @@ -52,9 +52,16 @@ filesets: files: - data/sockit.sdc : {file_type : SDC} - data/sockit.tcl : {file_type : tclSource} - - servant/servive_clock_gen_sockit.v : {file_type : verilogSource} + - servant/servive_clock_gen.v : {file_type : verilogSource} - servant/servive.v : {file_type : verilogSource} - + + deca: + files: + - data/deca.sdc : {file_type : SDC} + - data/deca.tcl : {file_type : tclSource} + - servant/servive_clock_gen.v : {file_type : verilogSource} + - servant/servive.v : {file_type : verilogSource} + de0_nano: files: - data/de0_nano.sdc : {file_type : SDC} @@ -144,6 +151,7 @@ targets: sockit: default_tool : quartus + description: SoCKit development kit by Arrow / Terasic filesets : [mem_files, soc, sockit] parameters : [memfile, memsize] tools: @@ -151,7 +159,18 @@ targets: family : CycloneV device : 5CSXFC6D6F31C6 toplevel: servive - + + deca: + default_tool : quartus + description: DECA development kit by Arrow / Terasic + filesets : [mem_files, soc, deca] + parameters : [memfile, memsize] + tools: + quartus: + family : MAX 10 + device : 10M50DAF484C6GES + toplevel: servive + de0_nano: default_tool : quartus filesets : [mem_files, soc, de0_nano] diff --git a/servant/servive_clock_gen_sockit.v b/servant/servive_clock_gen_sockit.v deleted file mode 100644 index 716e34d..0000000 --- a/servant/servive_clock_gen_sockit.v +++ /dev/null @@ -1,34 +0,0 @@ -`default_nettype none -module servive_clock_gen - (input wire i_clk, - input wire i_rst, - output wire o_clk, - output wire o_rst); - - wire locked; - reg [9:0] r; - - assign o_rst = r[9]; - - always @(posedge o_clk) - if (locked) - r <= {r[8:0],1'b0}; - else - r <= 10'b1111111111; - - wire [5:0] clk; - - assign o_clk = clk[0]; - - altpll - #(.operation_mode ("NORMAL"), - .clk0_divide_by (25), - .clk0_multiply_by (8), - .inclk0_input_frequency (20000)) - pll - (.areset (i_rst), - .inclk ({1'b0, i_clk}), - .clk (clk), - .locked (locked)); - -endmodule From 7624466ddd552dbd8c94127149527638dee3ca37 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 14 Feb 2021 22:13:49 +0100 Subject: [PATCH 096/289] Optimize serv_rf_ram_if --- rtl/serv_rf_if.v | 63 ++++++++++++++++++++++---------------------- rtl/serv_rf_ram_if.v | 27 +++++-------------- rtl/serv_state.v | 4 +-- rtl/serv_top.v | 1 + 4 files changed, 42 insertions(+), 53 deletions(-) diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index 431bfbb..f3f7842 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -2,46 +2,47 @@ module serv_rf_if #(parameter WITH_CSR = 1) (//RF Interface + input wire i_cnt_en, output wire [4+WITH_CSR:0] o_wreg0, output wire [4+WITH_CSR:0] o_wreg1, - output wire o_wen0, - output wire o_wen1, - output wire o_wdata0, - output wire o_wdata1, + output wire o_wen0, + output wire o_wen1, + output wire o_wdata0, + output wire o_wdata1, output wire [4+WITH_CSR:0] o_rreg0, output wire [4+WITH_CSR:0] o_rreg1, - input wire i_rdata0, - input wire i_rdata1, + input wire i_rdata0, + input wire i_rdata1, //Trap interface - input wire i_trap, - input wire i_mret, - input wire i_mepc, - input wire i_mem_op, - input wire i_bufreg_q, - input wire i_bad_pc, - output wire o_csr_pc, + input wire i_trap, + input wire i_mret, + input wire i_mepc, + input wire i_mem_op, + input wire i_bufreg_q, + input wire i_bad_pc, + output wire o_csr_pc, //CSR interface - input wire i_csr_en, - input wire [1:0] i_csr_addr, - input wire i_csr, - output wire o_csr, + input wire i_csr_en, + input wire [1:0] i_csr_addr, + input wire i_csr, + output wire o_csr, //RD write port - input wire i_rd_wen, - input wire [4:0] i_rd_waddr, - input wire i_ctrl_rd, - input wire i_alu_rd, - input wire i_rd_alu_en, - input wire i_csr_rd, - input wire i_rd_csr_en, - input wire i_mem_rd, + input wire i_rd_wen, + input wire [4:0] i_rd_waddr, + input wire i_ctrl_rd, + input wire i_alu_rd, + input wire i_rd_alu_en, + input wire i_csr_rd, + input wire i_rd_csr_en, + input wire i_mem_rd, //RS1 read port - input wire [4:0] i_rs1_raddr, - output wire o_rs1, + input wire [4:0] i_rs1_raddr, + output wire o_rs1, //RS2 read port - input wire [4:0] i_rs2_raddr, - output wire o_rs2); + input wire [4:0] i_rs2_raddr, + output wire o_rs2); `include "serv_params.vh" @@ -73,8 +74,8 @@ module serv_rf_if assign o_wreg0 = i_trap ? {4'b1000,CSR_MTVAL} : {1'b0,i_rd_waddr}; assign o_wreg1 = i_trap ? {4'b1000,CSR_MEPC} : {4'b1000,i_csr_addr}; - assign o_wen0 = i_trap | rd_wen; - assign o_wen1 = i_trap | i_csr_en; + assign o_wen0 = i_cnt_en & (i_trap | rd_wen); + assign o_wen1 = i_cnt_en & (i_trap | i_csr_en); /* ********** Read side *********** diff --git a/rtl/serv_rf_ram_if.v b/rtl/serv_rf_ram_if.v index f7b47da..4de1169 100644 --- a/rtl/serv_rf_ram_if.v +++ b/rtl/serv_rf_ram_if.v @@ -31,12 +31,13 @@ module serv_rf_ram_if reg rgnt; assign o_ready = rgnt | i_wreq; + reg [4:0] rcnt; /* ********** Write side *********** */ - reg [4:0] wcnt; + wire [4:0] wcnt; reg wgo; @@ -70,9 +71,7 @@ module serv_rf_ram_if assign o_waddr = {wreg, wcnt[4:l2w]}; endgenerate - assign o_wen = wgo & ((wtrig0 & wen0_r) | (wtrig1 & wen1_r)); - - reg wreq_r; + assign o_wen = (wtrig0 & wen0_r) | (wtrig1 & wen1_r); generate if (width > 2) always @(posedge i_clk) wdata0_r <= {i_wdata0, wdata0_r[width-2:1]}; @@ -80,34 +79,20 @@ module serv_rf_ram_if always @(posedge i_clk) wdata0_r <= i_wdata0; endgenerate + assign wcnt = rcnt-3; + always @(posedge i_clk) begin wen0_r <= i_wen0; wen1_r <= i_wen1; - wreq_r <= i_wreq | rgnt; wdata1_r <= {i_wdata1,wdata1_r[width-1:1]}; - if (wgo) - wcnt <= wcnt+5'd1; - - if (wreq_r) begin - wgo <= 1'b1; - end - - if (wcnt == 5'b11111) - wgo <= 1'b0; - - if (i_rst) begin - if (reset_strategy != "NONE") - wcnt <= 5'd0; - end end /* ********** Read side *********** */ - reg [4:0] rcnt; wire rtrig0; reg rtrig1; @@ -144,6 +129,8 @@ module serv_rf_ram_if rcnt <= rcnt+5'd1; if (i_rreq) rcnt <= 5'd0; + if (i_wreq) + rcnt <= 5'd2; rreq_r <= i_rreq; rgnt <= rreq_r; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 547cd75..f78c108 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -89,11 +89,11 @@ module serv_state //Prepare RF for writes when everything is ready to enter stage two // and the first stage didn't cause a misalign exception assign o_rf_wreq = !misalign_trap_sync & - ((i_shift_op & (i_sh_done | !i_sh_right) & init_done) | + ((i_shift_op & (i_sh_done | !i_sh_right) & !o_cnt_en & init_done) | (i_mem_op & i_dbus_ack) | (stage_two_req & (i_slt_op | i_branch_op))); - assign o_rf_rd_en = i_rd_op & o_cnt_en & !o_init; + assign o_rf_rd_en = i_rd_op & !o_init; /* bufreg is used during mem. branch and shift operations diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 7fbd0d9..9355d9f 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -347,6 +347,7 @@ module serv_top #(.WITH_CSR (WITH_CSR)) rf_if (//RF interface + .i_cnt_en (cnt_en), .o_wreg0 (o_wreg0), .o_wreg1 (o_wreg1), .o_wen0 (o_wen0), From 727bb40a8784c50b081abdcfd784a5bc7c34e40e Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 14 Mar 2021 00:12:29 +0100 Subject: [PATCH 097/289] Simplify control logic for bool ops --- rtl/serv_alu.v | 2 +- rtl/serv_decode.v | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index 400c181..278186b 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -39,7 +39,7 @@ module serv_alu assign o_cmp = i_cmp_eq ? result_eq : result_lt; - localparam [15:0] BOOL_LUT = 16'h8E96;//And, Or, =, xor + localparam [15:0] BOOL_LUT = 16'h8E06;//And, Or, 0, xor wire result_bool = BOOL_LUT[{i_bool_op, i_rs1, i_op_b}]; assign o_rd = (i_rd_sel[0] & result_add) | diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 8bc1dc4..e7f2fa7 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -207,7 +207,7 @@ module serv_decode assign o_alu_rd_sel[0] = (funct3 == 3'b000); // Add/sub assign o_alu_rd_sel[1] = (funct3[1:0] == 2'b01); //Shift assign o_alu_rd_sel[2] = (funct3[2:1] == 2'b01); //SLT* - assign o_alu_rd_sel[3] = (funct3[2] & !(funct3[1:0] == 2'b01)); //Bool + assign o_alu_rd_sel[3] = funct3[2]; //Bool always @(posedge clk) begin if (i_wb_en) begin funct3 <= i_wb_rdt[14:12]; From 548b7fbb41770b80810e011de438aedf1c814dd5 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 14 Mar 2021 23:22:50 +0100 Subject: [PATCH 098/289] remove redundant ALU control signal --- rtl/serv_alu.v | 10 +++++----- rtl/serv_decode.v | 7 +++---- rtl/serv_top.v | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index 278186b..88a926f 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -11,7 +11,7 @@ module serv_alu input wire [1:0] i_bool_op, input wire i_cmp_eq, input wire i_cmp_sig, - input wire [3:0] i_rd_sel, + input wire [2:0] i_rd_sel, //Data input wire i_rs1, input wire i_op_b, @@ -42,10 +42,10 @@ module serv_alu localparam [15:0] BOOL_LUT = 16'h8E06;//And, Or, 0, xor wire result_bool = BOOL_LUT[{i_bool_op, i_rs1, i_op_b}]; - assign o_rd = (i_rd_sel[0] & result_add) | - (i_rd_sel[1] & i_buf) | - (i_rd_sel[2] & cmp_r & i_cnt0) | - (i_rd_sel[3] & result_bool); + assign o_rd = i_buf | + (i_rd_sel[0] & result_add) | + (i_rd_sel[1] & cmp_r & i_cnt0) | + (i_rd_sel[2] & result_bool); always @(posedge clk) begin add_cy_r <= i_en ? add_cy : i_sub; diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index e7f2fa7..dfd4123 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -31,7 +31,7 @@ module serv_decode output wire [1:0] o_alu_bool_op, output wire o_alu_cmp_eq, output wire o_alu_cmp_sig, - output wire [3:0] o_alu_rd_sel, + output wire [2:0] o_alu_rd_sel, //To mem IF output wire o_mem_signed, output wire o_mem_word, @@ -205,9 +205,8 @@ module serv_decode assign o_immdec_ctrl[3] = opcode[4]; assign o_alu_rd_sel[0] = (funct3 == 3'b000); // Add/sub - assign o_alu_rd_sel[1] = (funct3[1:0] == 2'b01); //Shift - assign o_alu_rd_sel[2] = (funct3[2:1] == 2'b01); //SLT* - assign o_alu_rd_sel[3] = funct3[2]; //Bool + assign o_alu_rd_sel[1] = (funct3[2:1] == 2'b01); //SLT* + assign o_alu_rd_sel[2] = funct3[2]; //Bool always @(posedge clk) begin if (i_wb_en) begin funct3 <= i_wb_rdt[14:12]; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 9355d9f..e976e81 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -115,7 +115,7 @@ module serv_top wire alu_cmp_eq; wire alu_cmp_sig; wire alu_cmp; - wire [3:0] alu_rd_sel; + wire [2:0] alu_rd_sel; wire rs1; wire rs2; From 9b84539bc0a72fb4c99a15cd894ffb62e3cc8e05 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 17 Mar 2021 21:14:41 +0100 Subject: [PATCH 099/289] Add LibreCores badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d4d7df8..ba82d2a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ # SERV +[![LibreCores](https://www.librecores.org/olofk/serv/badge.svg?style=flat)](https://www.librecores.org/olofk/serv) + SERV is an award-winning bit-serial RISC-V core If you want to know more about SERV, what a bit-serial CPU is and what it's good for, I recommend starting out by watching the movies [introduction to SERV](https://diode.zone/videos/watch/0230a518-e207-4cf6-b5e2-69cc09411013) and the [presentation from the Zürich 2019 RISC-V workshop](https://www.youtube.com/watch?v=xjIxORBRaeQ) From 079a5c4250067a4e0a65cf2aa8daed83f0f233c2 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 8 Apr 2021 15:36:11 +0200 Subject: [PATCH 100/289] Remove unused wgo register --- rtl/serv_rf_ram_if.v | 2 -- 1 file changed, 2 deletions(-) diff --git a/rtl/serv_rf_ram_if.v b/rtl/serv_rf_ram_if.v index 4de1169..0c69296 100644 --- a/rtl/serv_rf_ram_if.v +++ b/rtl/serv_rf_ram_if.v @@ -38,8 +38,6 @@ module serv_rf_ram_if */ wire [4:0] wcnt; - reg wgo; - reg [width-2:0] wdata0_r; reg [width-1:0] wdata1_r; From 4c3ea39b06113e8b514b9f5996a692ad96884581 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 17 Apr 2021 23:59:15 +0200 Subject: [PATCH 101/289] Start documenting instruction life cycle --- doc/index.rst | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/doc/index.rst b/doc/index.rst index c8cd221..1739424 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -172,3 +172,69 @@ serv_shift ^^^^^^^^^^ serv_shift lives inside the ALU and contains the control logic for shift operations + +Instruction life cycle +---------------------- + +The life cycle of an instruction starts by the core issuing a request for a new instruction on the ibus and ends when the PC has been updated with the address of the next instruction. This section goes through what happens between those points for the various types of instructions. SERV distinguishes between two-stage and one-stage operations with the former category being all jump (branch), shift, slt and load/store instructions and the latter all other operations. In addition to this, exceptions are a special case. Only two-stage operations (jump, load/store) can cause an exception. Regardless of instruction type, they all start out the same way. + +.. wavedrom:: + + { signal: [ + { name: "clk" , wave: "0P|......"}, + { name: "o_ibus_cyc", wave: "01|.0.....", node: ".a..."}, + { name: "i_ibus_ack", wave: "0.|10.....", node: "...b", data: "r0"}, + { name: "rf_rreq" , wave: "0.|10.....", node: "...c.", data: "r1"}, + { name: "i_ibus_rdt", wave: "x.|2x.....", node: "...", data: "i0"}, + { name: "opcode" , wave: "x.|.2.....", data: "i0[6:2]"}, + { name: "funct3" , wave: "x.|.2.....", data: "i0[14:12]"}, + { name: "imm30" , wave: "x.|.2.....", data: "i0[30]"}, + {}, + { name: "r*_addr" , wave: "x.|.2.....", data: "i0[24:15,11:7]"}, + { name: "imm*" , wave: "x.|.2.....", data: "i0[31:7]"}, + + ], + edge : [ + "a~>b","b~>c"] + } + +The bus requests begin by SERV raising o_ibus_cyc until the memory responds with an i_ibus_ack and presents the instruction on i_ibus_rdt. Upon seeing the ack, SERV will ower cyc to indicate the end of the bus cycle. + +When the ack appears, two things happen in SERV. The relevant portions of the instruction such as opcode, funct3 and immediate value are saved in serv_decode and serv_immdec. The saved bits of the instruction is then decoded to create the internal control signals that corresponds to the current instruction. + +The other thing to happen is that request to start accessing the register file is sent by strobing rf_rreq which prepares the register file for both read and write access. + +.. wavedrom:: + + { signal: [ + { name: "clk" , wave: "0P.|....."}, + { name: "rreq" , wave: "010|.....", node: ".a..."}, + { name: "rreg0" , wave: "x.2|.....", node: "....", data: "r0"}, + { name: "rreg1" , wave: "x.2|.....", node: "....", data: "r1"}, + { name: "ready" , wave: "0..|10...", node: "....b."}, + { name: "rdata0" , wave: "-..|12345", data: "0 1 2 3 4"}, + { name: "rdata1" , wave: "-..|12345", data: "0 1 2 3 4"}, + ], + edge : [ + "a~>b"] + } + +The interface between the core and the register file is described in a protocol where the core strobes rreq and present the registers to read on the following cycle. The register file will prepare to stream out data bit from the two requested registers. The cycle before it sends out the first bit (LSB) it will strobe rf_ready. Writes work in a similar way in that the registers to write has to be presented the cycle after rf_wreq is strobed and that the register file will start accepting data the cycle after it has strobed rf_ready. Note that the delay between rf_wreq and rf_ready does not have to be the same as from rf_rreq to rf_ready. Also note that register data will only be written to a register if the corresponding write enable signal is asserted. In the diagram below, only register r0 will be written to. + +.. wavedrom:: + + { signal: [ + { name: "clk" , wave: "0P......"}, + { name: "wreq" , wave: "010.....", node: ".a..."}, + { name: "ready" , wave: "010.....", node: ".b."}, + { name: "wreg0" , wave: "x.2.....", node: "....", data: "r0"}, + { name: "wreg1" , wave: "x.2.....", node: "....", data: "r1"}, + { name: "wen0" , wave: "0.1.....", node: "....", data: "r0"}, + { name: "wen1" , wave: "0.......", node: "....", data: "r1"}, + { name: "wdata0" , wave: "-..12345", data: "0 1 2 3 4"}, + { name: "wdata1" , wave: "-.......", data: "0 1 2 3 4"}, + ], + edge : [ + "a~>b"] + } + From 0c601f0872e24b263b1a84df3b8d39ac0134d6c7 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 7 Apr 2021 14:31:09 +0200 Subject: [PATCH 102/289] Fix RF we gating for RF width > 2 --- rtl/serv_rf_if.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index f3f7842..2462af5 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -126,7 +126,7 @@ module serv_rf_if assign o_wreg0 = i_rd_waddr; assign o_wreg1 = 5'd0; - assign o_wen0 = rd_wen; + assign o_wen0 = i_cnt_en & rd_wen; assign o_wen1 = 1'b0; /* From 5c303f46b44863367d3cbcff6f95ebbfcf890532 Mon Sep 17 00:00:00 2001 From: Stefan Wallentowitz Date: Sun, 18 Apr 2021 13:58:43 +0200 Subject: [PATCH 103/289] Build website automatically and publish to gh-pages --- .github/workflows/pages.yml | 26 ++++++++++++++++++++++++++ doc/.nojekyll | 1 + doc/conf.py | 4 ++++ doc/requirements.txt | 2 +- 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/pages.yml create mode 100644 doc/.nojekyll diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..83c73af --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,26 @@ +on: + push: + branches: + - master + +jobs: + docs: + name: Build documentation + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v1 + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + python3 -m pip install --upgrade pip + pip install -r doc/requirements.txt + - name: Build sphinx documentation + run: | + make -C doc html + - name: Deploy to gh-pages + uses: JamesIves/github-pages-deploy-action@4.1.1 + with: + branch: gh-pages # The branch the action should deploy to. + folder: doc/_build/html # The folder the action should deploy. diff --git a/doc/.nojekyll b/doc/.nojekyll new file mode 100644 index 0000000..65cb711 --- /dev/null +++ b/doc/.nojekyll @@ -0,0 +1 @@ +This is published to GitHub Pages. It will ignore the _images path etc. otherwise. diff --git a/doc/conf.py b/doc/conf.py index 0d96a97..e2aa689 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -52,4 +52,8 @@ html_theme = 'alabaster' # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] +html_extra_path = ['.nojekyll'] + master_doc = 'index' + +online_wavedrom_js_url = "https://wavedrom.com" diff --git a/doc/requirements.txt b/doc/requirements.txt index 5443f82..5ed235f 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1 +1 @@ -sphinxcontrib-wavedrom +git+https://github.com/bavovanachte/sphinx-wavedrom@master#egg=sphinxcontrib-wavedrom From 62d5d5f8fbaf049092700d46c37773a9797024b5 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 18 Apr 2021 22:01:32 +0200 Subject: [PATCH 104/289] Remove unused wire cnt4 --- rtl/serv_state.v | 3 --- 1 file changed, 3 deletions(-) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index f78c108..7eadd26 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -43,8 +43,6 @@ module serv_state output reg o_cnt_done, output wire o_bufreg_en); - wire cnt4; - reg stage_two_req; reg init_done; reg misalign_trap_sync; @@ -66,7 +64,6 @@ module serv_state assign o_cnt1 = (o_cnt[4:2] == 3'd0) & o_cnt_r[1]; assign o_cnt2 = (o_cnt[4:2] == 3'd0) & o_cnt_r[2]; assign o_cnt3 = (o_cnt[4:2] == 3'd0) & o_cnt_r[3]; - assign cnt4 = (o_cnt[4:2] == 3'd1) & o_cnt_r[0]; assign o_cnt7 = (o_cnt[4:2] == 3'd1) & o_cnt_r[3]; //Take branch for jump or branch instructions (opcode == 1x0xx) if From 82c808aa1ed0521f97b2fe18fe6472f610ba3633 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 18 Apr 2021 22:48:46 +0200 Subject: [PATCH 105/289] Implement byte_valid in a more efficient way --- rtl/serv_mem_if.v | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index 1130b8c..fbdc3c4 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -30,9 +30,22 @@ module serv_mem_if reg signbit; reg [31:0] dat; - wire [2:0] tmp = {1'b0,i_bytecnt}+{1'b0,i_lsb}; + /* + Before a store operation, the data to be written needs to be shifted into + place. Depending on the address alignment, we need to shift different + amounts. One formula for calculating this is to say that we shift when + i_lsb + i_bytecnt < 4. Unfortunately, the synthesis tools don't seem to be + clever enough so the hideous expression below is used to achieve the same + thing in a more optimal way. + */ + wire byte_valid = + (!i_lsb[0] & !i_lsb[1]) | + (!i_bytecnt[0] & !i_bytecnt[1]) | + (!i_bytecnt[1] & !i_lsb[1]) | + (!i_bytecnt[1] & !i_lsb[0]) | + (!i_bytecnt[0] & !i_lsb[1]); - wire dat_en = i_shift_op | (i_en & !tmp[2]); + wire dat_en = i_shift_op | (i_en & byte_valid); wire dat_cur = ((i_lsb == 2'd3) & dat[24]) | From 0519ae4a523e2ad7ee10eedaddc18ea2a538951d Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 18 Apr 2021 23:01:26 +0200 Subject: [PATCH 106/289] Add verilator waiver file --- data/verilator_waiver.vlt | 7 +++++++ serv.core | 1 + 2 files changed, 8 insertions(+) create mode 100644 data/verilator_waiver.vlt diff --git a/data/verilator_waiver.vlt b/data/verilator_waiver.vlt new file mode 100644 index 0000000..dc368e4 --- /dev/null +++ b/data/verilator_waiver.vlt @@ -0,0 +1,7 @@ +`verilator_config +// Bits [1:0] in i_ibus_rdt are not used at all +lint_off -rule UNUSED -file "*/serv_top.v" -lines 51 + +//Some bits in the instruction word are not used in serv_decode but it's easier +//to just send in the whole word than picking out bits +lint_off -rule UNUSED -file "*/serv_decode.v" -lines 6 diff --git a/serv.core b/serv.core index 1068b78..00f55b3 100644 --- a/serv.core +++ b/serv.core @@ -5,6 +5,7 @@ name : ::serv:1.0.2 filesets: core: files: + - "tool_verilator? (data/verilator_waiver.vlt)" : {file_type: vlt} - rtl/serv_params.vh : {is_include_file : true} - rtl/serv_bufreg.v - rtl/serv_alu.v From cfb779d3d6a1a338104d6b25add8f3a549ac0c30 Mon Sep 17 00:00:00 2001 From: Stefan Wallentowitz Date: Sun, 18 Apr 2021 14:23:31 +0200 Subject: [PATCH 107/289] CI Lint with librecores github action linter Add the librecores linter, that also does proper annotation to the source code. --- .github/workflows/ci.yml | 5 ----- .github/workflows/lint.yml | 16 ++++++++++++++++ serv.core | 2 ++ 3 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cb94fd3..5a8b3d0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,11 +33,6 @@ jobs: cd $SERV/workspace fusesoc library add serv $SERV - - name: lint - run: | - cd $SERV/workspace - fusesoc run --target=lint serv - - name: build servant run: | cd $SERV/workspace diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..dc90821 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,16 @@ +on: [push, pull_request] + +jobs: + lint: + runs-on: ubuntu-latest + name: Linter + steps: + - name: Checkout + uses: actions/checkout@v1 + - name: Lint Verilog source files with Verilator + uses: librecores/ci-fusesoc-action@master + with: + command: 'run' + core: 'serv' + target: 'lint' + tool: 'verilator' diff --git a/serv.core b/serv.core index 00f55b3..264da94 100644 --- a/serv.core +++ b/serv.core @@ -38,6 +38,8 @@ targets: tools: verilator: mode : lint-only + verilator_options: + - "-Wall" toplevel : serv_rf_top parameters: From 1c11365ae82a23171f396baf4d8da2f33abd2059 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 7 Apr 2021 14:39:03 +0200 Subject: [PATCH 108/289] Simulator-friendly cleanup of misalign_trap_sync --- rtl/serv_state.v | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 7eadd26..7fa088a 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -45,7 +45,7 @@ module serv_state reg stage_two_req; reg init_done; - reg misalign_trap_sync; + wire misalign_trap_sync; reg [4:2] o_cnt; reg [3:0] o_cnt_r; @@ -169,6 +169,8 @@ module serv_state generate if (WITH_CSR) begin + reg misalign_trap_sync_r; + //trap_pending is only guaranteed to have correct value during the // last cycle of the init stage wire trap_pending = WITH_CSR & ((take_branch & i_ctrl_misalign) | @@ -176,13 +178,13 @@ module serv_state always @(posedge i_clk) begin if (o_cnt_done) - misalign_trap_sync <= trap_pending & o_init; + misalign_trap_sync_r <= trap_pending & o_init; if (i_rst) if (RESET_STRATEGY != "NONE") - misalign_trap_sync <= 1'b0; + misalign_trap_sync_r <= 1'b0; end + assign misalign_trap_sync = misalign_trap_sync_r; end else - always @(*) - misalign_trap_sync = 1'b0; + assign misalign_trap_sync = 1'b0; endgenerate endmodule From 1b6aa6637909908dc017dbb4ca7927647a4485fe Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 7 Apr 2021 14:46:31 +0200 Subject: [PATCH 109/289] Clear t0 in blinky example --- sw/blinky.S | 2 ++ sw/blinky.hex | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sw/blinky.S b/sw/blinky.S index 80bc620..50a94dd 100644 --- a/sw/blinky.S +++ b/sw/blinky.S @@ -29,6 +29,8 @@ _start: /* Set timer value to control blink speed */ li t1, DELAY + /* Clear t0 */ + addi t0, zero, 0 bl1: /* Write to LEDs */ sb t0, 0(a0) diff --git a/sw/blinky.hex b/sw/blinky.hex index b9847be..cabe9e9 100644 --- a/sw/blinky.hex +++ b/sw/blinky.hex @@ -1,6 +1,7 @@ 40000537 00050513 00100337 +00000293 00550023 0012c293 000073b3 @@ -2045,4 +2046,3 @@ fedff06f 0 0 0 -0 From c0bb0282a5fee8e2e0274702233de9965b644c1b Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 18 Apr 2021 23:47:43 +0200 Subject: [PATCH 110/289] Fix up wreq timing diagram --- doc/index.rst | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/doc/index.rst b/doc/index.rst index 1739424..fb8c978 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -224,17 +224,16 @@ The interface between the core and the register file is described in a protocol .. wavedrom:: { signal: [ - { name: "clk" , wave: "0P......"}, - { name: "wreq" , wave: "010.....", node: ".a..."}, - { name: "ready" , wave: "010.....", node: ".b."}, - { name: "wreg0" , wave: "x.2.....", node: "....", data: "r0"}, - { name: "wreg1" , wave: "x.2.....", node: "....", data: "r1"}, - { name: "wen0" , wave: "0.1.....", node: "....", data: "r0"}, - { name: "wen1" , wave: "0.......", node: "....", data: "r1"}, - { name: "wdata0" , wave: "-..12345", data: "0 1 2 3 4"}, - { name: "wdata1" , wave: "-.......", data: "0 1 2 3 4"}, + { name: "clk" , wave: "0P....."}, + { name: "wreq" , wave: "010....", node: ".a..."}, + { name: "ready" , wave: "010....", node: ".b."}, + { name: "wreg0" , wave: "x.2....", node: "....", data: "r0"}, + { name: "wreg1" , wave: "x.2....", node: "....", data: "r1"}, + { name: "wen0" , wave: "0.1...."}, + { name: "wen1" , wave: "0......"}, + { name: "wdata0" , wave: "-123456", node: "..c.", data: "0 1 2 3 4"}, + { name: "wdata1" , wave: "-123456", node: "..d.", data: "0 1 2 3 4"}, ], edge : [ - "a~>b"] + "a~>b", "b~>c", "b~>d"] } - From a5c1c8ddc44f83fa358e9a444a7eec2dc12ba483 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 26 Apr 2021 17:04:18 +0200 Subject: [PATCH 111/289] Kill off serv_params.vh --- rtl/serv_decode.v | 2 -- rtl/serv_params.vh | 5 ----- rtl/serv_rf_if.v | 23 +++++++++++++---------- serv.core | 1 - 4 files changed, 13 insertions(+), 18 deletions(-) delete mode 100644 rtl/serv_params.vh diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index dfd4123..f5846ee 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -52,8 +52,6 @@ module serv_decode output wire o_rd_csr_en, output wire o_rd_alu_en); -`include "serv_params.vh" - reg [4:0] opcode; reg [2:0] funct3; reg op20; diff --git a/rtl/serv_params.vh b/rtl/serv_params.vh deleted file mode 100644 index d28b172..0000000 --- a/rtl/serv_params.vh +++ /dev/null @@ -1,5 +0,0 @@ -localparam [1:0] - CSR_MSCRATCH = 2'b00, - CSR_MTVEC = 2'b01, - CSR_MEPC = 2'b10, - CSR_MTVAL = 2'b11; diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index 2462af5..cff08bb 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -45,8 +45,6 @@ module serv_rf_if output wire o_rs2); -`include "serv_params.vh" - /* ********** Write side *********** */ @@ -65,14 +63,19 @@ module serv_rf_if assign o_wdata0 = i_trap ? mtval : rd; assign o_wdata1 = i_trap ? i_mepc : i_csr; - //port 0 rd mtval - //port 1 csr mepc - //mepc 100010 - //mtval 100011 - //csr 1000xx - //rd 0xxxxx - assign o_wreg0 = i_trap ? {4'b1000,CSR_MTVAL} : {1'b0,i_rd_waddr}; - assign o_wreg1 = i_trap ? {4'b1000,CSR_MEPC} : {4'b1000,i_csr_addr}; + /* Port 0 handles writes to mtval during traps and rd otherwise + * Port 1 handles writes to mepc during traps and csr accesses otherwise + * + * GPR registers are mapped to address 0-31 (bits 0xxxxx). + * Following that are four CSR registers + * mscratch 100000 + * mtvec 100001 + * mepc 100010 + * mtval 100011 + */ + + assign o_wreg0 = i_trap ? {6'b100011} : {1'b0,i_rd_waddr}; + assign o_wreg1 = i_trap ? {6'b100010} : {4'b1000,i_csr_addr}; assign o_wen0 = i_cnt_en & (i_trap | rd_wen); assign o_wen1 = i_cnt_en & (i_trap | i_csr_en); diff --git a/serv.core b/serv.core index 264da94..4d34e60 100644 --- a/serv.core +++ b/serv.core @@ -6,7 +6,6 @@ filesets: core: files: - "tool_verilator? (data/verilator_waiver.vlt)" : {file_type: vlt} - - rtl/serv_params.vh : {is_include_file : true} - rtl/serv_bufreg.v - rtl/serv_alu.v - rtl/serv_csr.v From 1acd829f83bbc9194f4dc5dc7a68080da68b6e28 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 5 May 2021 15:32:02 +0200 Subject: [PATCH 112/289] Fix CI after branch renaming --- .github/workflows/ci.yml | 4 ++-- .github/workflows/lint.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5a8b3d0..9336b67 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: serv ci on: push: - branches: [ master ] + branches: [ main ] pull_request: - branches: [ master ] + branches: [ main ] jobs: compliance: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index dc90821..9d6cb50 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -8,7 +8,7 @@ jobs: - name: Checkout uses: actions/checkout@v1 - name: Lint Verilog source files with Verilator - uses: librecores/ci-fusesoc-action@master + uses: librecores/ci-fusesoc-action@main with: command: 'run' core: 'serv' From 14262bfc304b0c192c623d2787c6a54ba32ecede Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 15 May 2021 23:07:10 +0200 Subject: [PATCH 113/289] Rewrite logic expression of alu bool operations --- rtl/serv_alu.v | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index 88a926f..a93c516 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -39,8 +39,19 @@ module serv_alu assign o_cmp = i_cmp_eq ? result_eq : result_lt; - localparam [15:0] BOOL_LUT = 16'h8E06;//And, Or, 0, xor - wire result_bool = BOOL_LUT[{i_bool_op, i_rs1, i_op_b}]; + /* + The result_bool expression implements the following operations between + i_rs1 and i_op_b depending on the value of i_bool_op + + 00 xor + 01 0 + 10 or + 11 and + + i_bool_op will be 01 during shift operations, so by outputting zero under + this condition we can safely or result_bool with i_buf + */ + wire result_bool = ((i_rs1 ^ i_op_b) & ~ i_bool_op[0]) | (i_bool_op[1] & i_op_b & i_rs1); assign o_rd = i_buf | (i_rd_sel[0] & result_add) | From f373d7bcb69421674735efd8a78220aa4d772cd8 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 25 Aug 2020 11:55:08 +0200 Subject: [PATCH 114/289] Reuse immediate regs for RF addresses --- rtl/serv_decode.v | 6 ++++ rtl/serv_immdec.v | 86 ++++++++++++++++++++++++++++++++--------------- rtl/serv_top.v | 3 ++ 3 files changed, 67 insertions(+), 28 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index f5846ee..f735b1a 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -48,6 +48,7 @@ module serv_decode output wire o_csr_imm_en, //To top output wire [3:0] o_immdec_ctrl, + output wire [3:0] o_immdec_en, output wire o_op_b_source, output wire o_rd_csr_en, output wire o_rd_alu_en); @@ -202,6 +203,11 @@ module serv_decode assign o_immdec_ctrl[2] = opcode[4] & !opcode[0]; assign o_immdec_ctrl[3] = opcode[4]; + assign o_immdec_en[3] = opcode[4] | opcode[3] | opcode[2] | !opcode[0]; //B I J S U + assign o_immdec_en[2] = (opcode[4] & opcode[2]) | !opcode[3] | opcode[0]; // I J U + assign o_immdec_en[1] = (opcode[2:1] == 2'b01) | (opcode[2] & opcode[0]) | o_csr_imm_en;// J U + assign o_immdec_en[0] = ~o_rd_op; //B S + assign o_alu_rd_sel[0] = (funct3 == 3'b000); // Add/sub assign o_alu_rd_sel[1] = (funct3[2:1] == 2'b01); //SLT* assign o_alu_rd_sel[2] = funct3[2]; //Bool diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v index 0216be7..aa40e7d 100644 --- a/rtl/serv_immdec.v +++ b/rtl/serv_immdec.v @@ -1,11 +1,13 @@ `default_nettype none module serv_immdec + #(parameter SHARED_RFADDR_IMM_REGS = 1) ( input wire i_clk, //State input wire i_cnt_en, input wire i_cnt_done, //Control + input wire [3:0] i_immdec_en, input wire i_csr_imm_en, input wire [3:0] i_ctrl, output wire [4:0] o_rd_addr, @@ -26,37 +28,65 @@ module serv_immdec reg [4:0] imm24_20; reg [4:0] imm11_7; - reg [4:0] rd_addr; - reg [4:0] rs1_addr; - reg [4:0] rs2_addr; - - assign o_rd_addr = rd_addr; - assign o_rs1_addr = rs1_addr; - assign o_rs2_addr = rs2_addr; - assign o_imm = i_cnt_done ? signbit : i_ctrl[0] ? imm11_7[0] : imm24_20[0]; assign o_csr_imm = imm19_12_20[4]; - always @(posedge i_clk) begin - if (i_wb_en) begin - /* CSR immediates are always zero-extended, hence clear the signbit */ - signbit <= i_wb_rdt[31] & !i_csr_imm_en; - imm19_12_20 <= {i_wb_rdt[19:12],i_wb_rdt[20]}; - imm7 <= i_wb_rdt[7]; - imm30_25 <= i_wb_rdt[30:25]; - imm24_20 <= i_wb_rdt[24:20]; - imm11_7 <= i_wb_rdt[11:7]; + generate + if (SHARED_RFADDR_IMM_REGS) begin + assign o_rs1_addr = imm19_12_20[8:4]; + assign o_rs2_addr = imm24_20; + assign o_rd_addr = imm11_7; - rd_addr <= i_wb_rdt[11:7]; - rs1_addr <= i_wb_rdt[19:15]; - rs2_addr <= i_wb_rdt[24:20]; + always @(posedge i_clk) begin + if (i_wb_en) begin + /* CSR immediates are always zero-extended, hence clear the signbit */ + signbit <= i_wb_rdt[31] & !i_csr_imm_en; + end + if (i_wb_en | (i_cnt_en & i_immdec_en[1])) + imm19_12_20 <= i_wb_en ? {i_wb_rdt[19:12],i_wb_rdt[20]} : {i_ctrl[3] ? signbit : imm24_20[0], imm19_12_20[8:1]}; + if (i_wb_en | (i_cnt_en)) + imm7 <= i_wb_en ? i_wb_rdt[7] : signbit; + + if (i_wb_en | (i_cnt_en & i_immdec_en[3])) + imm30_25 <= i_wb_en ? i_wb_rdt[30:25] : {i_ctrl[2] ? imm7 : i_ctrl[1] ? signbit : imm19_12_20[0], imm30_25[5:1]}; + + if (i_wb_en | (i_cnt_en & i_immdec_en[2])) + imm24_20 <= i_wb_en ? i_wb_rdt[24:20] : {imm30_25[0], imm24_20[4:1]}; + + if (i_wb_en | (i_cnt_en & i_immdec_en[0])) + imm11_7 <= i_wb_en ? i_wb_rdt[11:7] : {imm30_25[0], imm11_7[4:1]}; + end + end else begin + reg [4:0] rd_addr; + reg [4:0] rs1_addr; + reg [4:0] rs2_addr; + + assign o_rd_addr = rd_addr; + assign o_rs1_addr = rs1_addr; + assign o_rs2_addr = rs2_addr; + always @(posedge i_clk) begin + if (i_wb_en) begin + /* CSR immediates are always zero-extended, hence clear the signbit */ + signbit <= i_wb_rdt[31] & !i_csr_imm_en; + imm19_12_20 <= {i_wb_rdt[19:12],i_wb_rdt[20]}; + imm7 <= i_wb_rdt[7]; + imm30_25 <= i_wb_rdt[30:25]; + imm24_20 <= i_wb_rdt[24:20]; + imm11_7 <= i_wb_rdt[11:7]; + + rd_addr <= i_wb_rdt[11:7]; + rs1_addr <= i_wb_rdt[19:15]; + rs2_addr <= i_wb_rdt[24:20]; + end + if (i_cnt_en) begin + imm19_12_20 <= {i_ctrl[3] ? signbit : imm24_20[0], imm19_12_20[8:1]}; + imm7 <= signbit; + imm30_25 <= {i_ctrl[2] ? imm7 : i_ctrl[1] ? signbit : imm19_12_20[0], imm30_25[5:1]}; + imm24_20 <= {imm30_25[0], imm24_20[4:1]}; + imm11_7 <= {imm30_25[0], imm11_7[4:1]}; + end + end end - if (i_cnt_en) begin - imm19_12_20 <= {i_ctrl[3] ? signbit : imm24_20[0], imm19_12_20[8:1]}; - imm7 <= signbit; - imm30_25 <= {i_ctrl[2] ? imm7 : i_ctrl[1] ? signbit : imm19_12_20[0], imm30_25[5:1]}; - imm24_20 <= {imm30_25[0], imm24_20[4:1]}; - imm11_7 <= {imm30_25[0], imm11_7[4:1]}; - end - end + endgenerate + endmodule diff --git a/rtl/serv_top.v b/rtl/serv_top.v index e976e81..3f6aac2 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -63,6 +63,7 @@ module serv_top wire [4:0] rs2_addr; wire [3:0] immdec_ctrl; + wire [3:0] immdec_en; wire sh_right; wire bne_or_bge; @@ -253,6 +254,7 @@ module serv_top .o_csr_imm_en (csr_imm_en), //To top .o_immdec_ctrl (immdec_ctrl), + .o_immdec_en (immdec_en), .o_rd_csr_en (rd_csr_en), .o_rd_alu_en (rd_alu_en)); @@ -263,6 +265,7 @@ module serv_top .i_cnt_en (cnt_en), .i_cnt_done (cnt_done), //Control + .i_immdec_en (immdec_en), .i_csr_imm_en (csr_imm_en), .i_ctrl (immdec_ctrl), .o_rd_addr (rd_addr), From 06653f52b2073bfd79a0e312407847b3c401ba66 Mon Sep 17 00:00:00 2001 From: The Gitter Badger Date: Sun, 23 May 2021 12:40:36 +0000 Subject: [PATCH 115/289] Add Gitter badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ba82d2a..0d1aa1d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # SERV -[![LibreCores](https://www.librecores.org/olofk/serv/badge.svg?style=flat)](https://www.librecores.org/olofk/serv) +[![LibreCores](https://www.librecores.org/olofk/serv/badge.svg?style=flat)](https://www.librecores.org/olofk/serv) [![Join the chat at https://gitter.im/librecores/serv](https://badges.gitter.im/librecores/serv.svg)](https://gitter.im/librecores/serv?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) SERV is an award-winning bit-serial RISC-V core From 259d5a10ed61021311470bca8f9c3034c64f7b59 Mon Sep 17 00:00:00 2001 From: Sylvain Munaut Date: Fri, 28 May 2021 21:19:33 +0200 Subject: [PATCH 116/289] decode: Add option to pre or post register during decoding Either the input from instruction bus is registered and the outputs are generated combinatorially (PRE_REGISTER mode), or the input from the instruction bus is decoded combinatorially and the result of decoding is registered (POST_REGISTER mode). First is smaller because it allows synthesis to optimize decoding logic with its users, but is slow. The second one is faster but slightly bigger. Signed-off-by: Sylvain Munaut --- rtl/serv_decode.v | 344 ++++++++++++++++++++++++++++++---------------- 1 file changed, 227 insertions(+), 117 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index f735b1a..271b601 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -1,138 +1,139 @@ `default_nettype none -module serv_decode - ( - input wire clk, +module serv_decode #( + parameter integer PRE_REGISTER = 1 +)( + input wire clk, //Input input wire [31:2] i_wb_rdt, - input wire i_wb_en, + input wire i_wb_en, //To state - output wire o_sh_right, - output wire o_bne_or_bge, - output wire o_cond_branch, - output wire o_e_op, - output wire o_ebreak, - output wire o_branch_op, - output wire o_mem_op, - output wire o_shift_op, - output wire o_slt_op, - output wire o_rd_op, + output reg o_sh_right, + output reg o_bne_or_bge, + output reg o_cond_branch, + output reg o_e_op, + output reg o_ebreak, + output reg o_branch_op, + output reg o_mem_op, + output reg o_shift_op, + output reg o_slt_op, + output reg o_rd_op, //To bufreg - output wire o_bufreg_rs1_en, - output wire o_bufreg_imm_en, - output wire o_bufreg_clr_lsb, - output wire o_bufreg_sh_signed, + output reg o_bufreg_rs1_en, + output reg o_bufreg_imm_en, + output reg o_bufreg_clr_lsb, + output reg o_bufreg_sh_signed, //To ctrl - output wire o_ctrl_jal_or_jalr, - output wire o_ctrl_utype, - output wire o_ctrl_pc_rel, - output wire o_ctrl_mret, + output reg o_ctrl_jal_or_jalr, + output reg o_ctrl_utype, + output reg o_ctrl_pc_rel, + output reg o_ctrl_mret, //To alu - output wire o_alu_sub, - output wire [1:0] o_alu_bool_op, - output wire o_alu_cmp_eq, - output wire o_alu_cmp_sig, - output wire [2:0] o_alu_rd_sel, + output reg o_alu_sub, + output reg [1:0] o_alu_bool_op, + output reg o_alu_cmp_eq, + output reg o_alu_cmp_sig, + output reg [2:0] o_alu_rd_sel, //To mem IF - output wire o_mem_signed, - output wire o_mem_word, - output wire o_mem_half, - output wire o_mem_cmd, + output reg o_mem_signed, + output reg o_mem_word, + output reg o_mem_half, + output reg o_mem_cmd, //To CSR - output wire o_csr_en, - output wire [1:0] o_csr_addr, - output wire o_csr_mstatus_en, - output wire o_csr_mie_en, - output wire o_csr_mcause_en, - output wire [1:0] o_csr_source, - output wire o_csr_d_sel, - output wire o_csr_imm_en, + output reg o_csr_en, + output reg [1:0] o_csr_addr, + output reg o_csr_mstatus_en, + output reg o_csr_mie_en, + output reg o_csr_mcause_en, + output reg [1:0] o_csr_source, + output reg o_csr_d_sel, + output reg o_csr_imm_en, //To top - output wire [3:0] o_immdec_ctrl, - output wire [3:0] o_immdec_en, - output wire o_op_b_source, - output wire o_rd_csr_en, - output wire o_rd_alu_en); + output reg [3:0] o_immdec_ctrl, + output reg [3:0] o_immdec_en, + output reg o_op_b_source, + output reg o_rd_csr_en, + output reg o_rd_alu_en); reg [4:0] opcode; reg [2:0] funct3; - reg op20; - reg op21; - reg op22; - reg op26; + reg op20; + reg op21; + reg op22; + reg op26; reg imm30; //opcode - wire op_or_opimm = (!opcode[4] & opcode[2] & !opcode[0]); + wire op_or_opimm = (!opcode[4] & opcode[2] & !opcode[0]); - assign o_mem_op = !opcode[4] & !opcode[2] & !opcode[0]; - assign o_branch_op = opcode[4] & !opcode[2]; + wire co_mem_op = !opcode[4] & !opcode[2] & !opcode[0]; + wire co_branch_op = opcode[4] & !opcode[2]; //jal,branch = imm //jalr = rs1+imm //mem = rs1+imm //shift = rs1 - assign o_bufreg_rs1_en = !opcode[4] | (!opcode[1] & opcode[0]); - assign o_bufreg_imm_en = !opcode[2]; + wire co_bufreg_rs1_en = !opcode[4] | (!opcode[1] & opcode[0]); + wire co_bufreg_imm_en = !opcode[2]; //Clear LSB of immediate for BRANCH and JAL ops //True for BRANCH and JAL //False for JALR/LOAD/STORE/OP/OPIMM? - assign o_bufreg_clr_lsb = opcode[4] & ((opcode[1:0] == 2'b00) | (opcode[1:0] == 2'b11)); + wire co_bufreg_clr_lsb = opcode[4] & ((opcode[1:0] == 2'b00) | (opcode[1:0] == 2'b11)); //Conditional branch //True for BRANCH //False for JAL/JALR - assign o_cond_branch = !opcode[0]; + wire co_cond_branch = !opcode[0]; - assign o_ctrl_utype = !opcode[4] & opcode[2] & opcode[0]; - assign o_ctrl_jal_or_jalr = opcode[4] & opcode[0]; + wire co_ctrl_utype = !opcode[4] & opcode[2] & opcode[0]; + wire co_ctrl_jal_or_jalr = opcode[4] & opcode[0]; //PC-relative operations //True for jal, b* auipc //False for jalr, lui - assign o_ctrl_pc_rel = (opcode[2:0] == 3'b000) | - (opcode[1:0] == 2'b11) | - (opcode[4:3] == 2'b00); + wire co_ctrl_pc_rel = (opcode[2:0] == 3'b000) | + (opcode[1:0] == 2'b11) | + (opcode[4:3] == 2'b00); //Write to RD //True for OP-IMM, AUIPC, OP, LUI, SYSTEM, JALR, JAL, LOAD //False for STORE, BRANCH, MISC-MEM - assign o_rd_op = (opcode[2] | - (!opcode[2] & opcode[4] & opcode[0]) | - (!opcode[2] & !opcode[3] & !opcode[0])); + wire co_rd_op = (opcode[2] | + (!opcode[2] & opcode[4] & opcode[0]) | + (!opcode[2] & !opcode[3] & !opcode[0])); // //funct3 // - assign o_sh_right = funct3[2]; - assign o_bne_or_bge = funct3[0]; - + wire co_sh_right = funct3[2]; + wire co_bne_or_bge = funct3[0]; + // // opcode & funct3 // - assign o_shift_op = op_or_opimm & (funct3[1:0] == 2'b01); - assign o_slt_op = op_or_opimm & (funct3[2:1] == 2'b01); + wire co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01); + wire co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01); //Matches system ops except eceall/ebreak/mret wire csr_op = opcode[4] & opcode[2] & (|funct3); //op20 - assign o_ebreak = op20; + wire co_ebreak = op20; //opcode & funct3 & op21 - assign o_ctrl_mret = opcode[4] & opcode[2] & op21 & !(|funct3); + wire co_ctrl_mret = opcode[4] & opcode[2] & op21 & !(|funct3); //Matches system opcodes except CSR accesses (funct3 == 0) //and mret (!op21) - assign o_e_op = opcode[4] & opcode[2] & !op21 & !(|funct3); + wire co_e_op = opcode[4] & opcode[2] & !op21 & !(|funct3); //opcode & funct3 & imm30 - assign o_bufreg_sh_signed = imm30; + wire co_bufreg_sh_signed = imm30; /* True for sub, b*, slt* @@ -144,16 +145,16 @@ module serv_decode add 01100 000 0 f sub 01100 000 1 t */ - assign o_alu_sub = funct3[1] | funct3[0] | (opcode[3] & imm30) | opcode[4]; + wire co_alu_sub = funct3[1] | funct3[0] | (opcode[3] & imm30) | opcode[4]; /* Bits 26, 22, 21 and 20 are enough to uniquely identify the eight supported CSR regs mtvec, mscratch, mepc and mtval are stored externally (normally in the RF) and are treated differently from mstatus, mie and mcause which are stored in serv_csr. - + The former get a 2-bit address as seen below while the latter get a one-hot enable signal each. - + Hex|2 222|Reg |csr adr|6 210|name |addr ---|-----|--------|---- @@ -164,70 +165,179 @@ module serv_decode 341|1_001|mepc | 10 342|1_010|mcause | xx 343|1_011|mtval | 11 - + */ //true for mtvec,mscratch,mepc and mtval //false for mstatus, mie, mcause wire csr_valid = op20 | (op26 & !op21); - assign o_rd_csr_en = csr_op; + wire co_rd_csr_en = csr_op; - assign o_csr_en = csr_op & csr_valid; - assign o_csr_mstatus_en = csr_op & !op26 & !op22; - assign o_csr_mie_en = csr_op & !op26 & op22 & !op20; - assign o_csr_mcause_en = csr_op & op21 & !op20; + wire co_csr_en = csr_op & csr_valid; + wire co_csr_mstatus_en = csr_op & !op26 & !op22; + wire co_csr_mie_en = csr_op & !op26 & op22 & !op20; + wire co_csr_mcause_en = csr_op & op21 & !op20; - assign o_csr_source = funct3[1:0]; - assign o_csr_d_sel = funct3[2]; - assign o_csr_imm_en = opcode[4] & opcode[2] & funct3[2]; - assign o_csr_addr = {op26 & op20, !op26 | op21}; + wire [1:0] co_csr_source = funct3[1:0]; + wire co_csr_d_sel = funct3[2]; + wire co_csr_imm_en = opcode[4] & opcode[2] & funct3[2]; + wire [1:0] co_csr_addr = {op26 & op20, !op26 | op21}; - assign o_alu_cmp_eq = funct3[2:1] == 2'b00; + wire co_alu_cmp_eq = funct3[2:1] == 2'b00; - assign o_alu_cmp_sig = ~((funct3[0] & funct3[1]) | (funct3[1] & funct3[2])); + wire co_alu_cmp_sig = ~((funct3[0] & funct3[1]) | (funct3[1] & funct3[2])); - assign o_mem_cmd = opcode[3]; - assign o_mem_signed = ~funct3[2]; - assign o_mem_word = funct3[1]; - assign o_mem_half = funct3[0]; + wire co_mem_cmd = opcode[3]; + wire co_mem_signed = ~funct3[2]; + wire co_mem_word = funct3[1]; + wire co_mem_half = funct3[0]; - assign o_alu_bool_op = funct3[1:0]; + wire [1:0] co_alu_bool_op = funct3[1:0]; + wire [3:0] co_immdec_ctrl; //True for S (STORE) or B (BRANCH) type instructions //False for J type instructions - assign o_immdec_ctrl[0] = opcode[3:0] == 4'b1000; + assign co_immdec_ctrl[0] = opcode[3:0] == 4'b1000; //True for OP-IMM, LOAD, STORE, JALR (I S) - //False for LUI, AUIPC, JAL (U J) - assign o_immdec_ctrl[1] = (opcode[1:0] == 2'b00) | (opcode[2:1] == 2'b00); - assign o_immdec_ctrl[2] = opcode[4] & !opcode[0]; - assign o_immdec_ctrl[3] = opcode[4]; + //False for LUI, AUIPC, JAL (U J) + assign co_immdec_ctrl[1] = (opcode[1:0] == 2'b00) | (opcode[2:1] == 2'b00); + assign co_immdec_ctrl[2] = opcode[4] & !opcode[0]; + assign co_immdec_ctrl[3] = opcode[4]; - assign o_immdec_en[3] = opcode[4] | opcode[3] | opcode[2] | !opcode[0]; //B I J S U - assign o_immdec_en[2] = (opcode[4] & opcode[2]) | !opcode[3] | opcode[0]; // I J U - assign o_immdec_en[1] = (opcode[2:1] == 2'b01) | (opcode[2] & opcode[0]) | o_csr_imm_en;// J U - assign o_immdec_en[0] = ~o_rd_op; //B S + wire [3:0] co_immdec_en; + assign co_immdec_en[3] = opcode[4] | opcode[3] | opcode[2] | !opcode[0]; //B I J S U + assign co_immdec_en[2] = (opcode[4] & opcode[2]) | !opcode[3] | opcode[0]; // I J U + assign co_immdec_en[1] = (opcode[2:1] == 2'b01) | (opcode[2] & opcode[0]) | co_csr_imm_en;// J U + assign co_immdec_en[0] = ~co_rd_op; //B S - assign o_alu_rd_sel[0] = (funct3 == 3'b000); // Add/sub - assign o_alu_rd_sel[1] = (funct3[2:1] == 2'b01); //SLT* - assign o_alu_rd_sel[2] = funct3[2]; //Bool - always @(posedge clk) begin - if (i_wb_en) begin - funct3 <= i_wb_rdt[14:12]; - imm30 <= i_wb_rdt[30]; - opcode <= i_wb_rdt[6:2]; - op20 <= i_wb_rdt[20]; - op21 <= i_wb_rdt[21]; - op22 <= i_wb_rdt[22]; - op26 <= i_wb_rdt[26]; - end - end + wire [2:0] co_alu_rd_sel; + assign co_alu_rd_sel[0] = (funct3 == 3'b000); // Add/sub + assign co_alu_rd_sel[1] = (funct3[2:1] == 2'b01); //SLT* + assign co_alu_rd_sel[2] = funct3[2]; //Bool //0 (OP_B_SOURCE_IMM) when OPIMM //1 (OP_B_SOURCE_RS2) when BRANCH or OP - assign o_op_b_source = opcode[3]; + wire co_op_b_source = opcode[3]; - assign o_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4]; + wire co_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4]; + generate + if (PRE_REGISTER) begin + + always @(posedge clk) begin + if (i_wb_en) begin + funct3 <= i_wb_rdt[14:12]; + imm30 <= i_wb_rdt[30]; + opcode <= i_wb_rdt[6:2]; + op20 <= i_wb_rdt[20]; + op21 <= i_wb_rdt[21]; + op22 <= i_wb_rdt[22]; + op26 <= i_wb_rdt[26]; + end + end + + always @(*) begin + o_sh_right = co_sh_right; + o_bne_or_bge = co_bne_or_bge; + o_cond_branch = co_cond_branch; + o_e_op = co_e_op; + o_ebreak = co_ebreak; + o_branch_op = co_branch_op; + o_mem_op = co_mem_op; + o_shift_op = co_shift_op; + o_slt_op = co_slt_op; + o_rd_op = co_rd_op; + o_bufreg_rs1_en = co_bufreg_rs1_en; + o_bufreg_imm_en = co_bufreg_imm_en; + o_bufreg_clr_lsb = co_bufreg_clr_lsb; + o_bufreg_sh_signed = co_bufreg_sh_signed; + o_ctrl_jal_or_jalr = co_ctrl_jal_or_jalr; + o_ctrl_utype = co_ctrl_utype; + o_ctrl_pc_rel = co_ctrl_pc_rel; + o_ctrl_mret = co_ctrl_mret; + o_alu_sub = co_alu_sub; + o_alu_bool_op = co_alu_bool_op; + o_alu_cmp_eq = co_alu_cmp_eq; + o_alu_cmp_sig = co_alu_cmp_sig; + o_alu_rd_sel = co_alu_rd_sel; + o_mem_signed = co_mem_signed; + o_mem_word = co_mem_word; + o_mem_half = co_mem_half; + o_mem_cmd = co_mem_cmd; + o_csr_en = co_csr_en; + o_csr_addr = co_csr_addr; + o_csr_mstatus_en = co_csr_mstatus_en; + o_csr_mie_en = co_csr_mie_en; + o_csr_mcause_en = co_csr_mcause_en; + o_csr_source = co_csr_source; + o_csr_d_sel = co_csr_d_sel; + o_csr_imm_en = co_csr_imm_en; + o_immdec_ctrl = co_immdec_ctrl; + o_immdec_en = co_immdec_en; + o_op_b_source = co_op_b_source; + o_rd_csr_en = co_rd_csr_en; + o_rd_alu_en = co_rd_alu_en; + end + + end else begin + + always @(*) begin + funct3 = i_wb_rdt[14:12]; + imm30 = i_wb_rdt[30]; + opcode = i_wb_rdt[6:2]; + op20 = i_wb_rdt[20]; + op21 = i_wb_rdt[21]; + op22 = i_wb_rdt[22]; + op26 = i_wb_rdt[26]; + end + + always @(posedge clk) begin + if (i_wb_en) begin + o_sh_right <= co_sh_right; + o_bne_or_bge <= co_bne_or_bge; + o_cond_branch <= co_cond_branch; + o_e_op <= co_e_op; + o_ebreak <= co_ebreak; + o_branch_op <= co_branch_op; + o_mem_op <= co_mem_op; + o_shift_op <= co_shift_op; + o_slt_op <= co_slt_op; + o_rd_op <= co_rd_op; + o_bufreg_rs1_en <= co_bufreg_rs1_en; + o_bufreg_imm_en <= co_bufreg_imm_en; + o_bufreg_clr_lsb <= co_bufreg_clr_lsb; + o_bufreg_sh_signed <= co_bufreg_sh_signed; + o_ctrl_jal_or_jalr <= co_ctrl_jal_or_jalr; + o_ctrl_utype <= co_ctrl_utype; + o_ctrl_pc_rel <= co_ctrl_pc_rel; + o_ctrl_mret <= co_ctrl_mret; + o_alu_sub <= co_alu_sub; + o_alu_bool_op <= co_alu_bool_op; + o_alu_cmp_eq <= co_alu_cmp_eq; + o_alu_cmp_sig <= co_alu_cmp_sig; + o_alu_rd_sel <= co_alu_rd_sel; + o_mem_signed <= co_mem_signed; + o_mem_word <= co_mem_word; + o_mem_half <= co_mem_half; + o_mem_cmd <= co_mem_cmd; + o_csr_en <= co_csr_en; + o_csr_addr <= co_csr_addr; + o_csr_mstatus_en <= co_csr_mstatus_en; + o_csr_mie_en <= co_csr_mie_en; + o_csr_mcause_en <= co_csr_mcause_en; + o_csr_source <= co_csr_source; + o_csr_d_sel <= co_csr_d_sel; + o_csr_imm_en <= co_csr_imm_en; + o_immdec_ctrl <= co_immdec_ctrl; + o_immdec_en <= co_immdec_en; + o_op_b_source <= co_op_b_source; + o_rd_csr_en <= co_rd_csr_en; + o_rd_alu_en <= co_rd_alu_en; + end + end + + end + endgenerate endmodule From c2cdd44f736d7442801ca938c27ec4451848c59b Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 5 Jun 2021 22:56:37 +0200 Subject: [PATCH 117/289] Expose and document PRE_REGISTER --- rtl/serv_decode.v | 2 +- rtl/serv_rf_top.v | 6 ++++++ rtl/serv_top.v | 5 ++++- serv.core | 6 ++++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 271b601..b675901 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -1,6 +1,6 @@ `default_nettype none module serv_decode #( - parameter integer PRE_REGISTER = 1 + parameter [0:0] PRE_REGISTER = 1 )( input wire clk, //Input diff --git a/rtl/serv_rf_top.v b/rtl/serv_rf_top.v index e84ac36..3f41373 100644 --- a/rtl/serv_rf_top.v +++ b/rtl/serv_rf_top.v @@ -3,6 +3,11 @@ module serv_rf_top #(parameter RESET_PC = 32'd0, + /* Register signals before or after the decoder + 0 : Register after the decoder. Faster but uses more resources + 1 : (default) Register before the decoder. Slower but uses less resources + */ + parameter PRE_REGISTER = 1, /* Amount of reset applied to design "NONE" : No reset at all. Relies on a POR to set correct initialization values and that core isn't reset during runtime @@ -113,6 +118,7 @@ module serv_rf_top serv_top #(.RESET_PC (RESET_PC), + .PRE_REGISTER (PRE_REGISTER), .RESET_STRATEGY (RESET_STRATEGY), .WITH_CSR (WITH_CSR)) cpu diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 3f6aac2..c465ae4 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -2,6 +2,7 @@ module serv_top #(parameter WITH_CSR = 1, + parameter PRE_REGISTER = 1, parameter RESET_STRATEGY = "MINI", parameter RESET_PC = 32'd0) ( @@ -204,7 +205,9 @@ module serv_top .i_rf_ready (i_rf_ready), .o_rf_rd_en (rd_en)); - serv_decode decode + serv_decode + #(.PRE_REGISTER (PRE_REGISTER)) + decode ( .clk (clk), //Input diff --git a/serv.core b/serv.core index 4d34e60..058ab61 100644 --- a/serv.core +++ b/serv.core @@ -25,6 +25,7 @@ targets: default: filesets : [core] parameters : + - "is_toplevel? (PRE_REGISTER)" - "is_toplevel? (RESET_STRATEGY)" - RISCV_FORMAL - SERV_CLEAR_RAM @@ -42,6 +43,11 @@ targets: toplevel : serv_rf_top parameters: + PRE_REGISTER: + datatype : int + description : Register signals before or after the decoder + paramtype : vlogparam + RESET_STRATEGY: datatype : str paramtype : vlogparam From c4bf02aeb0409b22d4c1e68db7484dafaf09bd4e Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 10 Jun 2021 16:30:39 +0200 Subject: [PATCH 118/289] Add instruction life cycle flowchart to doc --- doc/index.rst | 8 +++++--- doc/life_cycle.png | Bin 0 -> 31391 bytes 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 doc/life_cycle.png diff --git a/doc/index.rst b/doc/index.rst index fb8c978..5912308 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -178,6 +178,10 @@ Instruction life cycle The life cycle of an instruction starts by the core issuing a request for a new instruction on the ibus and ends when the PC has been updated with the address of the next instruction. This section goes through what happens between those points for the various types of instructions. SERV distinguishes between two-stage and one-stage operations with the former category being all jump (branch), shift, slt and load/store instructions and the latter all other operations. In addition to this, exceptions are a special case. Only two-stage operations (jump, load/store) can cause an exception. Regardless of instruction type, they all start out the same way. +.. image:: life_cycle.png + +The bus requests begin by SERV raising o_ibus_cyc until the memory responds with an i_ibus_ack and presents the instruction on i_ibus_rdt. Upon seeing the ack, SERV will lower cyc to indicate the end of the bus cycle. + .. wavedrom:: { signal: [ @@ -198,11 +202,9 @@ The life cycle of an instruction starts by the core issuing a request for a new "a~>b","b~>c"] } -The bus requests begin by SERV raising o_ibus_cyc until the memory responds with an i_ibus_ack and presents the instruction on i_ibus_rdt. Upon seeing the ack, SERV will ower cyc to indicate the end of the bus cycle. - When the ack appears, two things happen in SERV. The relevant portions of the instruction such as opcode, funct3 and immediate value are saved in serv_decode and serv_immdec. The saved bits of the instruction is then decoded to create the internal control signals that corresponds to the current instruction. -The other thing to happen is that request to start accessing the register file is sent by strobing rf_rreq which prepares the register file for both read and write access. +The other thing to happen is that a request to start accessing the register file is sent by strobing rf_rreq which prepares the register file for both read and write access. .. wavedrom:: diff --git a/doc/life_cycle.png b/doc/life_cycle.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab3e9341abf0c8e837282cc460a222181e1b3a6 GIT binary patch literal 31391 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 k+ezn+a literal 0 HcmV?d00001 From cae472b29e276fe71f0da021e27db18c9d500996 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 20 Apr 2021 15:26:16 +0200 Subject: [PATCH 119/289] Document one-stage instructions --- doc/index.rst | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/doc/index.rst b/doc/index.rst index 5912308..b485001 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -202,7 +202,7 @@ The bus requests begin by SERV raising o_ibus_cyc until the memory responds with "a~>b","b~>c"] } -When the ack appears, two things happen in SERV. The relevant portions of the instruction such as opcode, funct3 and immediate value are saved in serv_decode and serv_immdec. The saved bits of the instruction is then decoded to create the internal control signals that corresponds to the current instruction. +When the ack appears, two things happen in SERV. The relevant portions of the instruction such as opcode, funct3 and immediate value are saved in serv_decode and serv_immdec. The saved bits of the instruction is then decoded to create the internal control signals that corresponds to the current instruction. The decoded control signals remain static throughout the instruction life cycle. The other thing to happen is that a request to start accessing the register file is sent by strobing rf_rreq which prepares the register file for both read and write access. @@ -239,3 +239,27 @@ The interface between the core and the register file is described in a protocol edge : [ "a~>b", "b~>c", "b~>d"] } + +After the instruction has been decoded and the register file prepared for reads (and possibly writes) the core knows whether it is a one-stage or two-stage instruction. These are handled differently and we will begin by looking at one-stage instructions. A stage in SERV is 32 consecutive cycles during which the core is active and processes inputs and creates results one bit at a time, starting with the LSB. + +One-stage instructions +^^^^^^^^^^^^^^^^^^^^^^ + +Most operations are one-stage operations which finish in 32 cycles + fetch overhead. During a one-stage operation, the RF is read and written simultaneously as well as the PC which is increased by four to point to the next instruction. trap and init signals are low to distinguish from other stages. + +.. wavedrom:: + + { signal: [ + { name: "clk" , wave: "0P..|..."}, + { name: "cnt_en" , wave: "01..|..0", node: "...."}, + { name: "init" , wave: "0...|...", node: "....", data: "r0"}, + { name: "trap" , wave: "0...|...", node: "....", data: "r1"}, + { name: "pc_en" , wave: "01..|..0"}, + { name: "rs1" , wave: "x234|56x", node: "...", data: "0 1 ... 30 31"}, + { name: "rs2" , wave: "x234|56x", node: "...", data: "0 1 ... 30 31"}, + { name: "imm" , wave: "x234|56x", node: "...", data: "0 1 ... 30 31"}, + { name: "rd" , wave: "x234|56x", node: "...", data: "0 1 ... 30 31"}, + ], + edge : [ + "a~>b", "b~>c", "b~>d"] + } From a1e5a5ea80fee4721e33fda585038241fe4bc700 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 10 Jun 2021 23:56:10 +0200 Subject: [PATCH 120/289] Add timing diagram for interrupts and ecall/ebreak --- doc/index.rst | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/doc/index.rst b/doc/index.rst index b485001..de4574b 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -180,6 +180,8 @@ The life cycle of an instruction starts by the core issuing a request for a new .. image:: life_cycle.png +Fetch +^^^^^ The bus requests begin by SERV raising o_ibus_cyc until the memory responds with an i_ibus_ack and presents the instruction on i_ibus_rdt. Upon seeing the ack, SERV will lower cyc to indicate the end of the bus cycle. .. wavedrom:: @@ -202,6 +204,8 @@ The bus requests begin by SERV raising o_ibus_cyc until the memory responds with "a~>b","b~>c"] } +Decode +^^^^^^ When the ack appears, two things happen in SERV. The relevant portions of the instruction such as opcode, funct3 and immediate value are saved in serv_decode and serv_immdec. The saved bits of the instruction is then decoded to create the internal control signals that corresponds to the current instruction. The decoded control signals remain static throughout the instruction life cycle. The other thing to happen is that a request to start accessing the register file is sent by strobing rf_rreq which prepares the register file for both read and write access. @@ -240,10 +244,13 @@ The interface between the core and the register file is described in a protocol "a~>b", "b~>c", "b~>d"] } +Execute +^^^^^^^ + After the instruction has been decoded and the register file prepared for reads (and possibly writes) the core knows whether it is a one-stage or two-stage instruction. These are handled differently and we will begin by looking at one-stage instructions. A stage in SERV is 32 consecutive cycles during which the core is active and processes inputs and creates results one bit at a time, starting with the LSB. One-stage instructions -^^^^^^^^^^^^^^^^^^^^^^ +:::::::::::::::::::::: Most operations are one-stage operations which finish in 32 cycles + fetch overhead. During a one-stage operation, the RF is read and written simultaneously as well as the PC which is increased by four to point to the next instruction. trap and init signals are low to distinguish from other stages. @@ -263,3 +270,25 @@ Most operations are one-stage operations which finish in 32 cycles + fetch overh edge : [ "a~>b", "b~>c", "b~>d"] } + +Interrupts and ecall/ebreak +::::::::::::::::::::::::::: + +External timer interrupts and ecall/ebreak are also one-stage operations with some notable differences. The new PC is fetched from the MTVEC CSR and instead of writing to rd, the MEPC and MTVAL CSR registers are written. All this is handled by serv_state raising the trap signal during the instruction's execution. + +.. wavedrom:: + + { signal: [ + { name: "clk" , wave: "0P..|..."}, + { name: "cnt_en" , wave: "01..|..0", node: "...."}, + { name: "init" , wave: "0...|...", node: "....", data: "r0"}, + { name: "trap" , wave: "1...|...", node: "....", data: "r1"}, + { name: "pc_en" , wave: "01..|..0"}, + { name: "rs1" , wave: "x...|...", node: "...", data: "0 1 ... 30 31"}, + { name: "rs2" , wave: "x...|...", node: "...", data: "0 1 ... 30 31"}, + { name: "imm" , wave: "x...|...", node: "...", data: "0 1 ... 30 31"}, + { name: "rd" , wave: "x...|...", node: "...", data: "0 1 ... 30 31"}, + ], + edge : [ + "a~>b", "b~>c", "b~>d"] + } From 7f7ea07260a6551707c464eac8a2b223210339be Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 11 Jun 2021 21:48:20 +0200 Subject: [PATCH 121/289] Document memory instructions --- doc/index.rst | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/doc/index.rst b/doc/index.rst index de4574b..fe045fd 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -292,3 +292,90 @@ External timer interrupts and ecall/ebreak are also one-stage operations with so edge : [ "a~>b", "b~>c", "b~>d"] } + +Two-stage operations +:::::::::::::::::::: + +Some operations need to be executed in two stages. In the first stage the operands are read out from the immediate and the rs1/rs2 registers and potential results are written to PC and rd in the second stage. Various things happen between the stages depending on the type of operation. SERV has types of four two-stage operations; memory, shift, slt and branch operations. In all cases the first stage is distinguished by having the init signal raised and only performing reads from the RF. + +.. wavedrom:: + + { signal: [ + { name: "clk" , wave: "0P..|..."}, + { name: "cnt_en" , wave: "01..|..0", node: "...."}, + { name: "init" , wave: "1...|..0", node: "....", data: "r0"}, + { name: "trap" , wave: "0...|...", node: "....", data: "r1"}, + { name: "pc_en" , wave: "0...|..."}, + { name: "rs1" , wave: "x234|56x", node: "...", data: "0 1 ... 30 31"}, + { name: "rs2" , wave: "x234|56x", node: "...", data: "0 1 ... 30 31"}, + { name: "imm" , wave: "x234|56x", node: "...", data: "0 1 ... 30 31"}, + { name: "rd" , wave: "x234|56x", node: "...", data: "0 1 ... 30 31"}, + ], + edge : [ + "a~>b", "b~>c", "b~>d"] + } + + +memory +++++++ + +Loads and stores are memory operations. In the init stage, the data address to access is calculated, checked for alignment and stored in serv_bufreg. For stores, the data to write is also shifted into the data register in serv_mem_if. + +.. wavedrom:: + + { signal: [ + { name: "clk" , wave: "P..|..."}, + { name: "trap" , wave: "0..|...", node: "....", data: "r1"}, + { name: "init" , wave: "1.0|...", node: "....", data: "r0"}, + { name: "cnt_en" , wave: "1.0|.1.", node: ".....d"}, + { name: "cnt_done" , wave: "010|.1.", node: ".a...."}, + { name: "o_dbus_cyc", wave: "0.1|.0.", node: "..b.", data: "0 1 ... 30 31"}, + { name: "i_dbus_ack", wave: "0..|10.", node: "....c", data: "0 1 ... 30 31"}, + { name: "o_dbus_adr", wave: "x.2|.x.", node: "...", data: "address"}, + { name: "rs2" , wave: "33x|...", node: ".e.", data: "d30 d31"}, + { name: "o_dbus_dat", wave: "x.3|.x.", node: "..f", data: "data"}, + { name: "o_dbus_sel", wave: "x.4|.x.", node: "...", data: ["write mask"]}, + { name: "o_dbus_we" , wave: "1..|..."}, + ], + edge : [ + "a~>b", "b~>c", "c~>d", "e~>f"] + } + +If the address has correct alignment, the o_dbus_cyc signal is raised to signal an access on the data bus after the init stage has finished and waits for an incoming i_dbus_ack, and incoming data in case of loads. After an incoming ack, o_dbus_cyc is lowered and stage 2 begins. For stores, the only remaining work in stage 2 is to update the PC. For loads, the incoming data is shifted into rd. + +.. wavedrom:: + + { signal: [ + { name: "clk" , wave: "P..|..."}, + { name: "trap" , wave: "0..|...", node: "....", data: "r1"}, + { name: "init" , wave: "1.0|...", node: "....", data: "r0"}, + { name: "cnt_en" , wave: "1.0|.1.", node: ".....d"}, + { name: "cnt_done" , wave: "010|.1.", node: ".a...."}, + { name: "o_dbus_cyc", wave: "0.1|.0.", node: "..b.", data: "0 1 ... 30 31"}, + { name: "i_dbus_ack", wave: "0..|10.", node: "....c", data: "0 1 ... 30 31"}, + { name: "o_dbus_adr", wave: "x.2|.x.", node: "...", data: "address"}, + { name: "o_dbus_we" , wave: "0..|..."}, + { name: "i_dbus_rdt", wave: "x..|3x.", node: "....e", data: "data"}, + { name: "rd" , wave: "x..|.33", node: ".....f", data: "d0 d1"}, + ], + edge : [ + "a~>b", "b~>c", "c~>d", "e~>f"] + } + +If the calculated address in the init stage was misaligned, SERV will raise a exception. Instead of performing an external bus access it will set mcause and raise the trap signal, which causes SERV to store the current PC to mepc, store misaligned address to mtval and set the new PC from mtvec which will enter the exception handler. + +.. wavedrom:: + + { signal: [ + { name: "clk" , wave: "P...."}, + { name: "misalign" , wave: "1....", node: "c..", data: ["write mask"]}, + { name: "trap" , wave: "0.1..", node: "..b.", data: "r1"}, + { name: "init" , wave: "1.0..", node: "....", data: "r0"}, + { name: "cnt_en" , wave: "1.01.", node: "...d"}, + { name: "cnt_done" , wave: "010..", node: ".a...."}, + { name: "o_dbus_cyc", wave: "0....", node: "....", data: "0 1 ... 30 31"}, + { name: "i_dbus_ack", wave: "0....", node: "....", data: "0 1 ... 30 31"}, + ], + edge : [ + "a~>b", "c~>b", "b~>d"] + } From 5e74b13c241cdb30c4b1ab715992653e99ef9d73 Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Mon, 21 Jun 2021 21:18:33 +0200 Subject: [PATCH 122/289] Add support for Terasic DE10 Nano Kit --- README.md | 6 ++++++ data/de10_nano.sdc | 8 ++++++++ data/de10_nano.tcl | 13 +++++++++++++ servant.core | 19 +++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 data/de10_nano.sdc create mode 100644 data/de10_nano.tcl diff --git a/README.md b/README.md index 0d1aa1d..03efc66 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,12 @@ FPGA Pin D11 (Connector JP1, pin 38) is used for UART output with 57600 baud rat fusesoc run --target=de0_nano servant +### DE10 Nano + +FPGA Pin Y15 (Connector JP7, pin 1) is used for UART output with 57600 baud rate. DE10 Nano needs an external 3.3V UART to connect to this pin + + fusesoc run --target=de10_nano servant + ### DECA development kit FPGA Pin W18 (Pin 3 P8 connector) is used for UART output with 57600 baud rate. Key 0 is reset and Led 0 q output. diff --git a/data/de10_nano.sdc b/data/de10_nano.sdc new file mode 100644 index 0000000..7a5fcef --- /dev/null +++ b/data/de10_nano.sdc @@ -0,0 +1,8 @@ +# Main system clock (50 Mhz) +create_clock -name "clk" -period 20.000ns [get_ports {i_clk}] + +# Automatically constrain PLL and other generated clocks +derive_pll_clocks -create_base_clocks + +# Automatically calculate clock uncertainty to jitter and other effects. +derive_clock_uncertainty diff --git a/data/de10_nano.tcl b/data/de10_nano.tcl new file mode 100644 index 0000000..af4c557 --- /dev/null +++ b/data/de10_nano.tcl @@ -0,0 +1,13 @@ +set_location_assignment PIN_V11 -to i_clk +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to i_clk + +set_location_assignment PIN_W15 -to q +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to q + +# GPIO0 Pin 1 +set_location_assignment PIN_Y15 -to uart_txd +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to uart_txd + +#KEY[0] +set_location_assignment PIN_AH17 -to i_rst_n +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to i_rst_n diff --git a/servant.core b/servant.core index bd2e6d6..49b5d42 100644 --- a/servant.core +++ b/servant.core @@ -69,6 +69,13 @@ filesets: - servant/servive_clock_gen.v : {file_type : verilogSource} - servant/servive.v : {file_type : verilogSource} + de10_nano: + files: + - data/de10_nano.sdc : {file_type : SDC} + - data/de10_nano.tcl : {file_type : tclSource} + - servant/servive_clock_gen.v : {file_type : verilogSource} + - servant/servive.v : {file_type : verilogSource} + tinyfpga_bx: {files: [data/tinyfpga_bx.pcf : {file_type : PCF}]} icebreaker : {files: [data/icebreaker.pcf : {file_type : PCF}]} icesugar : {files: [data/icesugar.pcf : {file_type : PCF}]} @@ -181,6 +188,18 @@ targets: device : EP4CE22F17C6 toplevel: servive + de10_nano: + default_tool: quartus + description: Terasic DE10 Nano Kit + filesets : [mem_files, soc, de10_nano] + parameters : [memfile, memsize=32768] + tools: + quartus: + family : Cyclone V + device : 5CSEBA6U23I7 + board_device_index : 2 + toplevel : servive + icebreaker: default_tool : icestorm filesets : [mem_files, soc, service, icebreaker] From 54d5d65b629841ede03da3bcf8f6ba668f4abf57 Mon Sep 17 00:00:00 2001 From: Dave Dribin Date: Sun, 27 Jun 2021 10:56:40 -0500 Subject: [PATCH 123/289] Add support for Nandland Go Board --- README.md | 7 +++++++ data/go_board.pcf | 5 +++++ servant.core | 17 ++++++++++++++++- servant/service_no_pll.v | 27 +++++++++++++++++++++++++++ sw/Makefile | 2 +- 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 data/go_board.pcf create mode 100644 servant/service_no_pll.v diff --git a/README.md b/README.md index 03efc66..cd73e7c 100644 --- a/README.md +++ b/README.md @@ -183,6 +183,13 @@ Pin 95 is used as the GPIO output which is connected to the board's green LED. D fusesoc run --target=icestick servant iceprog build/servant_1.0.2/icestick-icestorm/servant_1.0.2.bin +### Nandland Go Board + +Pin 56 is used as the GPIO output which is connected to the board's LED1. Due to this board's limited Embedded BRAM, programs with a maximum of 7168 bytes can be loaded. The default program for this board is blinky.hex. + + fusesoc run --target=go_board servant + iceprog build/servant_1.0.2/go_board-icestorm/servant_1.0.2.bin + ## Other targets The above targets are run on the servant SoC, but there are some targets defined for the CPU itself. Verilator can be run in lint mode to check for design problems by running diff --git a/data/go_board.pcf b/data/go_board.pcf new file mode 100644 index 0000000..bf9ecd9 --- /dev/null +++ b/data/go_board.pcf @@ -0,0 +1,5 @@ +# 20 MHz clock input +set_io i_clk 15 + +# Onboard LED 1 +set_io q 56 diff --git a/servant.core b/servant.core index 49b5d42..eb0b8fd 100644 --- a/servant.core +++ b/servant.core @@ -8,6 +8,10 @@ filesets: file_type : verilogSource depend : ["fusesoc:utils:generators"] + service_no_pll: + files: [servant/service_no_pll.v] + file_type : verilogSource + mem_files: files: - sw/blinky.hex : {copyto : blinky.hex} @@ -80,7 +84,8 @@ filesets: icebreaker : {files: [data/icebreaker.pcf : {file_type : PCF}]} icesugar : {files: [data/icesugar.pcf : {file_type : PCF}]} alhambra : {files: [data/alhambra.pcf : {file_type : PCF}]} - icestick : {files: [data/icestick.pcf : {file_type : PCF}]} + icestick : {files: [data/icestick.pcf : {file_type : PCF}]} + go_board : {files: [data/go_board.pcf : {file_type : PCF}]} lx9_microboard: files: @@ -391,6 +396,16 @@ targets: pnr: next toplevel : service + go_board: + default_tool : icestorm + filesets : [mem_files, soc, service_no_pll, go_board] + parameters : [memfile=blinky.hex, memsize=7168] + tools: + icestorm: + nextpnr_options : [--hx1k, --package, vq100, --freq, 20] + pnr: next + toplevel : service + parameters: PLL: datatype : str diff --git a/servant/service_no_pll.v b/servant/service_no_pll.v new file mode 100644 index 0000000..d5f3a6f --- /dev/null +++ b/servant/service_no_pll.v @@ -0,0 +1,27 @@ +`default_nettype none +module service + (input wire i_clk, + output wire q); + + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 7168; + + // Pull reset high for 64 clock cycles. Use the 7th bit as the reset signal. + reg [6:0] rst_count; + wire rst_r = !rst_count[6]; + + always @(posedge i_clk) begin + if (rst_r == 1) begin + rst_count <= rst_count + 1; + end + end + + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (i_clk), + .wb_rst (rst_r), + .q (q)); + +endmodule diff --git a/sw/Makefile b/sw/Makefile index e0fd0a7..5098d2f 100644 --- a/sw/Makefile +++ b/sw/Makefile @@ -1,7 +1,7 @@ TOOLCHAIN_PREFIX=riscv64-unknown-elf- %.elf: %.S link.ld - $(TOOLCHAIN_PREFIX)gcc -nostartfiles -march=rv32i -mabi=ilp32 -Tlink.ld -o$@ $< + $(TOOLCHAIN_PREFIX)gcc -nostartfiles -nostdlib -march=rv32i -mabi=ilp32 -Tlink.ld -o$@ $< %.bin: %.elf $(TOOLCHAIN_PREFIX)objcopy -O binary $< $@ %.hex: %.bin From 0375ba896f801d2fc267f8d904a7ee0380a8fff4 Mon Sep 17 00:00:00 2001 From: Dave Dribin Date: Sun, 27 Jun 2021 23:10:49 -0500 Subject: [PATCH 124/289] Move to board-specific top-level and file set --- data/go_board.pcf | 7 +++++-- servant.core | 15 +++++++-------- servant/{service_no_pll.v => service_go_board.v} | 15 +++++++++------ 3 files changed, 21 insertions(+), 16 deletions(-) rename servant/{service_no_pll.v => service_go_board.v} (54%) diff --git a/data/go_board.pcf b/data/go_board.pcf index bf9ecd9..8f94c26 100644 --- a/data/go_board.pcf +++ b/data/go_board.pcf @@ -1,5 +1,8 @@ # 20 MHz clock input set_io i_clk 15 -# Onboard LED 1 -set_io q 56 +# Onboard LED 1-4 +set_io o_led1 56 +set_io o_led2 57 +set_io o_led3 59 +set_io o_led4 60 \ No newline at end of file diff --git a/servant.core b/servant.core index eb0b8fd..eb05cda 100644 --- a/servant.core +++ b/servant.core @@ -8,10 +8,6 @@ filesets: file_type : verilogSource depend : ["fusesoc:utils:generators"] - service_no_pll: - files: [servant/service_no_pll.v] - file_type : verilogSource - mem_files: files: - sw/blinky.hex : {copyto : blinky.hex} @@ -85,7 +81,11 @@ filesets: icesugar : {files: [data/icesugar.pcf : {file_type : PCF}]} alhambra : {files: [data/alhambra.pcf : {file_type : PCF}]} icestick : {files: [data/icestick.pcf : {file_type : PCF}]} - go_board : {files: [data/go_board.pcf : {file_type : PCF}]} + + go_board: + files: + - data/go_board.pcf : {file_type : PCF} + - servant/service_go_board.v : {file_type : verilogSource} lx9_microboard: files: @@ -398,13 +398,12 @@ targets: go_board: default_tool : icestorm - filesets : [mem_files, soc, service_no_pll, go_board] - parameters : [memfile=blinky.hex, memsize=7168] + filesets : [mem_files, soc, go_board] tools: icestorm: nextpnr_options : [--hx1k, --package, vq100, --freq, 20] pnr: next - toplevel : service + toplevel : service_go_board parameters: PLL: diff --git a/servant/service_no_pll.v b/servant/service_go_board.v similarity index 54% rename from servant/service_no_pll.v rename to servant/service_go_board.v index d5f3a6f..d7effa3 100644 --- a/servant/service_no_pll.v +++ b/servant/service_go_board.v @@ -1,12 +1,15 @@ `default_nettype none -module service +module service_go_board (input wire i_clk, - output wire q); + output wire o_led1, + output wire o_led2 = 1'b0, + output wire o_led3 = 1'b0, + output wire o_led4 = 1'b0); - parameter memfile = "zephyr_hello.hex"; - parameter memsize = 7168; + parameter memfile = "blinky.hex"; + parameter memsize = 512; - // Pull reset high for 64 clock cycles. Use the 7th bit as the reset signal. + // Assert reset for 64 clock cycles. Use the 7th bit as the reset signal. reg [6:0] rst_count; wire rst_r = !rst_count[6]; @@ -22,6 +25,6 @@ module service servant (.wb_clk (i_clk), .wb_rst (rst_r), - .q (q)); + .q (o_led1)); endmodule From c561979c8eb39c06913fef3bd00d9e04a6402f48 Mon Sep 17 00:00:00 2001 From: Dave Dribin Date: Sun, 27 Jun 2021 23:18:37 -0500 Subject: [PATCH 125/289] Minor update to .pcf --- data/go_board.pcf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/go_board.pcf b/data/go_board.pcf index 8f94c26..30ee8b8 100644 --- a/data/go_board.pcf +++ b/data/go_board.pcf @@ -1,8 +1,8 @@ # 20 MHz clock input set_io i_clk 15 -# Onboard LED 1-4 +# Onboard LEDs 1-4 set_io o_led1 56 set_io o_led2 57 set_io o_led3 59 -set_io o_led4 60 \ No newline at end of file +set_io o_led4 60 From 57af7204d11712ecb7a67a005bd4719f8f6bbbec Mon Sep 17 00:00:00 2001 From: Dave Dribin Date: Sun, 27 Jun 2021 23:31:03 -0500 Subject: [PATCH 126/289] Wire up servant.q output to both LED1 and UART TX --- data/go_board.pcf | 2 ++ servant/service_go_board.v | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/data/go_board.pcf b/data/go_board.pcf index 30ee8b8..7167cc5 100644 --- a/data/go_board.pcf +++ b/data/go_board.pcf @@ -6,3 +6,5 @@ set_io o_led1 56 set_io o_led2 57 set_io o_led3 59 set_io o_led4 60 + +set_io o_uart_tx 74 diff --git a/servant/service_go_board.v b/servant/service_go_board.v index d7effa3..5dbcf68 100644 --- a/servant/service_go_board.v +++ b/servant/service_go_board.v @@ -4,7 +4,8 @@ module service_go_board output wire o_led1, output wire o_led2 = 1'b0, output wire o_led3 = 1'b0, - output wire o_led4 = 1'b0); + output wire o_led4 = 1'b0, + output wire o_uart_tx); parameter memfile = "blinky.hex"; parameter memsize = 512; @@ -19,12 +20,15 @@ module service_go_board end end + wire q; servant #(.memfile (memfile), .memsize (memsize)) servant (.wb_clk (i_clk), .wb_rst (rst_r), - .q (o_led1)); + .q (q)); + assign o_led1 = q; + assign o_uart_tx = q; endmodule From 15246e36928a68d7743475ec7b028bf78d00d612 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 5 Jul 2021 23:59:19 +0200 Subject: [PATCH 127/289] Fix Verilator waiver file --- data/verilator_waiver.vlt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/verilator_waiver.vlt b/data/verilator_waiver.vlt index dc368e4..218fd16 100644 --- a/data/verilator_waiver.vlt +++ b/data/verilator_waiver.vlt @@ -1,7 +1,7 @@ `verilator_config // Bits [1:0] in i_ibus_rdt are not used at all -lint_off -rule UNUSED -file "*/serv_top.v" -lines 51 +lint_off -rule UNUSED -file "*/serv_top.v" -lines 52 //Some bits in the instruction word are not used in serv_decode but it's easier //to just send in the whole word than picking out bits -lint_off -rule UNUSED -file "*/serv_decode.v" -lines 6 +lint_off -rule UNUSED -file "*/serv_decode.v" -lines 7 From 18c8c65255eafa8fd927d92ce7bb2e1305f66931 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 6 Jul 2021 00:20:55 +0200 Subject: [PATCH 128/289] Fix RISC-V compliance instructions --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cd73e7c..708643f 100644 --- a/README.md +++ b/README.md @@ -71,19 +71,21 @@ Other applications can be tested by compiling and converting to bin and then hex ## Run RISC-V compliance tests +**Note:** The following instructions are valid for version 1.0 of the RISC-V compliance tests. The target-specific support for SERV has not yet been ported to newer versions. + Build the verilator model (if not already done) fusesoc run --target=verilator_tb --build servant Download the tests repo - git clone https://github.com/riscv/riscv-compliance + git clone https://github.com/riscv/riscv-compliance --branch 1.0 To run the RISC-V compliance tests, we need to supply the SERV-specific support files and point the test suite to where it can find a target to run (i.e. the previously built Verilator model) Run the compliance tests - cd riscv-compliance && make TARGETDIR=$SERV/riscv-target RISCV_TARGET=serv RISCV_DECICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$SERV/build/servant_1.0.2/verilator_tb-verilator/Vservant_sim + cd riscv-compliance && make TARGETDIR=$SERV/riscv-target RISCV_TARGET=serv RISCV_DEVICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$WORKSPACE/build/servant_1.0.2/verilator_tb-verilator/Vservant_sim The above will run all tests in the rv32i test suite. Since SERV also implement the `rv32Zicsr` and `rv32Zifencei` extensions, these can also be tested by choosing any of them instead of rv32i as the `RISCV_ISA` variable. From d2467cf951e6b35aeb56509bbf2a0fdc12153424 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 9 Aug 2021 15:20:34 +0200 Subject: [PATCH 129/289] Update movie links --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 708643f..6178223 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,12 @@ SERV is an award-winning bit-serial RISC-V core -If you want to know more about SERV, what a bit-serial CPU is and what it's good for, I recommend starting out by watching the movies [introduction to SERV](https://diode.zone/videos/watch/0230a518-e207-4cf6-b5e2-69cc09411013) and the [presentation from the Zürich 2019 RISC-V workshop](https://www.youtube.com/watch?v=xjIxORBRaeQ) +If you want to know more about SERV, what a bit-serial CPU is and what it's good for, I recommend starting out by watching the fantastic short SERV movies +* [introduction to SERV](https://www.award-winning.me/serv-introduction/) +* [SERV : RISC-V for a fistful of gates](https://www.award-winning.me/serv-for-a-fistful-of-gates/) +* [Bit by bit - How to fit 8 RISC V cores in a $38 FPGA board (presentation from the Zürich 2019 RISC-V workshop)](https://www.youtube.com/watch?v=xjIxORBRaeQ) -There's also an official [SERV user manual](https://serv.readthedocs.io/en/latest/#) with fancy block diagrams and an in-depth description of how some things work. +There's also an official [SERV user manual](https://serv.readthedocs.io/en/latest/#) with fancy block diagrams, timing diagrams and an in-depth description of how some things work. ## Prerequisites From eb50f8c83cab499cd57c32892f18e9fbc99c13d7 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 9 Aug 2021 15:32:57 +0200 Subject: [PATCH 130/289] Fix Github CI action --- .github/workflows/ci.yml | 46 ++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9336b67..8aeb694 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,6 @@ name: serv ci -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] +on: [push, pull_request] jobs: compliance: @@ -13,38 +9,38 @@ jobs: steps: - uses: actions/checkout@v2 + with: + path: serv - name: install fusesoc, verilator and gcc run: | sudo apt-get install -y python3-setuptools verilator gcc-riscv64-unknown-elf - pip3 install --user fusesoc - echo "~/.local/bin" >> $GITHUB_PATH - - - name: init fusesoc - run: fusesoc init -y + pip3 install fusesoc - name: set SERV directory - run: echo "SERV=$GITHUB_WORKSPACE/.." >> $GITHUB_ENV + run: echo "SERV=$GITHUB_WORKSPACE/serv" >> $GITHUB_ENV - name: setup workspace - run: | - ls $GITHUB_WORKSPACE - mkdir $SERV/workspace - cd $SERV/workspace - fusesoc library add serv $SERV + run: fusesoc library add serv $SERV - name: build servant - run: | - cd $SERV/workspace - fusesoc run --target=verilator_tb --setup --build --build-root=servant_x servant + run: fusesoc run --target=verilator_tb --build --build-root=servant_x servant - name: download risc-v compliance - run: | - cd $SERV - git clone https://github.com/riscv/riscv-compliance + run: git clone https://github.com/riscv/riscv-compliance --branch 1.0 - - name: run risc-v compliance + - name: run RV32i compliance tests run: | - cd $SERV/riscv-compliance - make TARGETDIR=$SERV/serv/riscv-target RISCV_TARGET=serv RISCV_DECICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$SERV/workspace/servant_x/verilator_tb-verilator/Vservant_sim + cd $GITHUB_WORKSPACE/riscv-compliance + make TARGETDIR=$SERV/riscv-target RISCV_TARGET=serv RISCV_DEVICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$GITHUB_WORKSPACE/servant_x/verilator_tb-verilator/Vservant_sim + + - name: run RV32Zicsr compliance tests + run: | + cd $GITHUB_WORKSPACE/riscv-compliance + make TARGETDIR=$SERV/riscv-target RISCV_TARGET=serv RISCV_DEVICE=rv32i RISCV_ISA=rv32Zicsr TARGET_SIM=$GITHUB_WORKSPACE/servant_x/verilator_tb-verilator/Vservant_sim + + - name: run RV32Zifencei compliance tests + run: | + cd $GITHUB_WORKSPACE/riscv-compliance + make TARGETDIR=$SERV/riscv-target RISCV_TARGET=serv RISCV_DEVICE=rv32i RISCV_ISA=rv32Zifencei TARGET_SIM=$GITHUB_WORKSPACE/servant_x/verilator_tb-verilator/Vservant_sim From 64ac4d6eb5a180aa2c73bb2c2e8ca9765d2ecdff Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 9 Aug 2021 16:29:55 +0200 Subject: [PATCH 131/289] Fix badges --- .github/workflows/ci.yml | 2 +- README.md | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8aeb694..d0570cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: serv ci +name: CI on: [push, pull_request] diff --git a/README.md b/README.md index 6178223..741db59 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,10 @@ # SERV -[![LibreCores](https://www.librecores.org/olofk/serv/badge.svg?style=flat)](https://www.librecores.org/olofk/serv) [![Join the chat at https://gitter.im/librecores/serv](https://badges.gitter.im/librecores/serv.svg)](https://gitter.im/librecores/serv?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![LibreCores](https://www.librecores.org/olofk/serv/badge.svg?style=flat)](https://www.librecores.org/olofk/serv) +[![Join the chat at https://gitter.im/librecores/serv](https://badges.gitter.im/librecores/serv.svg)](https://gitter.im/librecores/serv?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![CI status](https://github.com/olofk/serv/workflows/CI/badge.svg)](https://github.com/olofk/serv/actions?query=workflow%3ACI) +[![Documentation Status](https://readthedocs.org/projects/serv/badge/?version=latest)](https://serv.readthedocs.io/en/latest/?badge=latest) SERV is an award-winning bit-serial RISC-V core From 8e073546b8c6af76f61cda41257867957f77d0c0 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 9 Aug 2021 23:12:18 +0200 Subject: [PATCH 132/289] Prepare for release --- README.md | 11 +++++------ serv.core | 2 +- servant.core | 2 +- serving.core | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 741db59..0f9dcbd 100644 --- a/README.md +++ b/README.md @@ -43,11 +43,10 @@ If [Verilator](https://www.veripool.org/wiki/verilator) is installed, we can use If everything worked, the output should look like - INFO: Preparing ::serv:1.0.2 + INFO: Preparing ::serv:1.1.0 INFO: Setting up project INFO: Building simulation model - verilator -f serv_1.0.2.vc INFO: Running ## Running pre-built test software @@ -91,7 +90,7 @@ To run the RISC-V compliance tests, we need to supply the SERV-specific support Run the compliance tests - cd riscv-compliance && make TARGETDIR=$SERV/riscv-target RISCV_TARGET=serv RISCV_DEVICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$WORKSPACE/build/servant_1.0.2/verilator_tb-verilator/Vservant_sim + cd riscv-compliance && make TARGETDIR=$SERV/riscv-target RISCV_TARGET=serv RISCV_DEVICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$WORKSPACE/build/servant_1.1.0/verilator_tb-verilator/Vservant_sim The above will run all tests in the rv32i test suite. Since SERV also implement the `rv32Zicsr` and `rv32Zifencei` extensions, these can also be tested by choosing any of them instead of rv32i as the `RISCV_ISA` variable. @@ -137,7 +136,7 @@ serial console will show up. Pin D1 is used for UART output with 115200 baud rate. fusesoc run --target=orangecrab_r0.2 servant - dfu-util -d 1209:5af0 -D build/servant_1.0.2/orangecrab_r0.2-trellis/servant_1.0.2.bit + dfu-util -d 1209:5af0 -D build/servant_1.1.0/orangecrab_r0.2-trellis/servant_1.1.0.bit ### Arty A7 35T @@ -189,14 +188,14 @@ Pin 61 is used for UART output with 115200 baud rate. This pin is connected to a Pin 95 is used as the GPIO output which is connected to the board's green LED. Due to this board's limited Embedded BRAM, programs with a maximum of 7168 bytes can be loaded. The default program for this board is blinky.hex. fusesoc run --target=icestick servant - iceprog build/servant_1.0.2/icestick-icestorm/servant_1.0.2.bin + iceprog build/servant_1.1.0/icestick-icestorm/servant_1.1.0.bin ### Nandland Go Board Pin 56 is used as the GPIO output which is connected to the board's LED1. Due to this board's limited Embedded BRAM, programs with a maximum of 7168 bytes can be loaded. The default program for this board is blinky.hex. fusesoc run --target=go_board servant - iceprog build/servant_1.0.2/go_board-icestorm/servant_1.0.2.bin + iceprog build/servant_1.1.0/go_board-icestorm/servant_1.1.0.bin ## Other targets diff --git a/serv.core b/serv.core index 058ab61..7163ebc 100644 --- a/serv.core +++ b/serv.core @@ -1,6 +1,6 @@ CAPI=2: -name : ::serv:1.0.2 +name : ::serv:1.1.0 filesets: core: diff --git a/servant.core b/servant.core index eb05cda..5bf3636 100644 --- a/servant.core +++ b/servant.core @@ -1,6 +1,6 @@ CAPI=2: -name : ::servant:1.0.2 +name : ::servant:1.1.0 filesets: service: diff --git a/serving.core b/serving.core index 01714c4..ac2b055 100644 --- a/serving.core +++ b/serving.core @@ -1,6 +1,6 @@ CAPI=2: -name : ::serving:1.0.2 +name : ::serving:1.1.0 filesets: rtl: From b845507e32d5d8e6ec43e4a760359096b074ec11 Mon Sep 17 00:00:00 2001 From: hakan-demirli <78746991+hakan-demirli@users.noreply.github.com> Date: Thu, 15 Jul 2021 18:02:26 +0300 Subject: [PATCH 133/289] Update serv_timer.c Fix a typo 'fro' --- zephyr/drivers/timer/serv_timer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zephyr/drivers/timer/serv_timer.c b/zephyr/drivers/timer/serv_timer.c index e7474fe..0eec6ee 100644 --- a/zephyr/drivers/timer/serv_timer.c +++ b/zephyr/drivers/timer/serv_timer.c @@ -5,7 +5,7 @@ */ /* - This is basically a 32-bit version of riscv_machine_timer.c fro Zephyr + This is basically a 32-bit version of riscv_machine_timer.c for Zephyr */ #include #include From dbe5236b4c351632403865aa295ce07e895ded0c Mon Sep 17 00:00:00 2001 From: Dhiru Kholia Date: Thu, 12 Aug 2021 22:04:09 +0530 Subject: [PATCH 134/289] Add support for EBAZ4205 'Development' Board References: - https://github.com/fusesoc/blinky/pull/68/files (EBAZ4205 blinky) - https://github.com/fusesoc/blinky#ebaz4205-development-board - Existing 'arty_a7_35t' example This PR also cleans up a bunch of whitespace issues (no functional change). --- README.md | 19 +++++++++++--- data/ebaz4205.xdc | 10 ++++++++ servant.core | 17 +++++++++++- servant/servix_ebaz4205.v | 30 ++++++++++++++++++++++ servant/servix_ebaz4205_clock_gen.v | 40 +++++++++++++++++++++++++++++ 5 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 data/ebaz4205.xdc create mode 100644 servant/servix_ebaz4205.v create mode 100644 servant/servix_ebaz4205_clock_gen.v diff --git a/README.md b/README.md index 0f9dcbd..186a1db 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ The FuseSoC standard library already contain a version of SERV, but if we want t `fusesoc library add serv https://github.com/olofk/serv` -The SERV repo will now be available in $WORKSPACE/fusesoc_libraries/serv. To save some typing, we will refer to that directory as `$SERV`. +The SERV repo will now be available in $WORKSPACE/fusesoc_libraries/serv. To save some typing, we will refer to that directory as `$SERV`. We are now ready to do our first exercises with SERV @@ -45,7 +45,7 @@ If everything worked, the output should look like INFO: Preparing ::serv:1.1.0 INFO: Setting up project - + INFO: Building simulation model INFO: Running @@ -159,13 +159,24 @@ FPGA Pin Y15 (Connector JP7, pin 1) is used for UART output with 57600 baud rate ### DECA development kit -FPGA Pin W18 (Pin 3 P8 connector) is used for UART output with 57600 baud rate. Key 0 is reset and Led 0 q output. +FPGA Pin W18 (Pin 3 P8 connector) is used for UART output with 57600 baud rate. Key 0 is reset and Led 0 q output. fusesoc run --target=deca servant +### EBAZ4205 'Development' Board + +Pin B20 is used for UART output with 57600 baud rate. To use `blinky.hex` +change B20 to W14 (red led) in `data/ebaz4205.xdc` file). + + fusesoc run --target=ebaz4205 servant + + fusesoc run --target=ebaz4205 servant --memfile=$SERV/sw/blinky.hex + +Reference: https://github.com/fusesoc/blinky#ebaz4205-development-board + ### SoCKit development kit -FPGA Pin F14 (HSTC GPIO addon connector J2, pin 2) is used for UART output with 57600 baud rate. +FPGA Pin F14 (HSTC GPIO addon connector J2, pin 2) is used for UART output with 57600 baud rate. fusesoc run --target=sockit servant diff --git a/data/ebaz4205.xdc b/data/ebaz4205.xdc new file mode 100644 index 0000000..15219c1 --- /dev/null +++ b/data/ebaz4205.xdc @@ -0,0 +1,10 @@ +## 33.333 MHz Clock signal +set_property -dict { PACKAGE_PIN N18 IOSTANDARD LVCMOS33 } [get_ports i_clk]; +create_clock -add -name sys_clk_pin -period 30.00 -waveform {0 5} [get_ports i_clk]; + +## LED(s) +# set_property -dict { PACKAGE_PIN W13 IOSTANDARD LVCMOS33 } [get_ports { q_green }]; +# set_property -dict { PACKAGE_PIN W14 IOSTANDARD LVCMOS33 } [get_ports { q }]; + +## UART on DATA1_8 pin +set_property -dict { PACKAGE_PIN B20 IOSTANDARD LVCMOS33 } [get_ports q]; diff --git a/servant.core b/servant.core index 5bf3636..938b2df 100644 --- a/servant.core +++ b/servant.core @@ -76,6 +76,12 @@ filesets: - servant/servive_clock_gen.v : {file_type : verilogSource} - servant/servive.v : {file_type : verilogSource} + ebaz4205: + files: + - servant/servix_ebaz4205_clock_gen.v : {file_type : verilogSource} + - servant/servix_ebaz4205.v : {file_type : verilogSource} + - data/ebaz4205.xdc : {file_type : xdc} + tinyfpga_bx: {files: [data/tinyfpga_bx.pcf : {file_type : PCF}]} icebreaker : {files: [data/icebreaker.pcf : {file_type : PCF}]} icesugar : {files: [data/icesugar.pcf : {file_type : PCF}]} @@ -182,7 +188,7 @@ targets: family : MAX 10 device : 10M50DAF484C6GES toplevel: servive - + de0_nano: default_tool : quartus filesets : [mem_files, soc, de0_nano] @@ -296,6 +302,15 @@ targets: vivado: {part : xc7a35ticsg324-1L} toplevel : servix + ebaz4205: + default_tool: vivado + description: EBAZ4205 'Development' Board + filesets : [mem_files, soc, ebaz4205] + parameters : [memfile, memsize, frequency=16] + tools: + vivado: {part : xc7z010clg400-1} + toplevel : servix_ebaz4205 + ac701: default_tool: vivado filesets : [mem_files, soc, ac701] diff --git a/servant/servix_ebaz4205.v b/servant/servix_ebaz4205.v new file mode 100644 index 0000000..1819c37 --- /dev/null +++ b/servant/servix_ebaz4205.v @@ -0,0 +1,30 @@ +`default_nettype none +module servix_ebaz4205 +( + input wire i_clk, + output wire q); + + parameter frequency = 32; + parameter memfile = "zephyr_hello.hex"; + parameter memsize = 8192; + parameter PLL = "NONE"; + + wire wb_clk; + wire wb_rst; + + servix_ebaz4205_clock_gen + #(.frequency (frequency)) + clock_gen + (.i_clk (i_clk), + .o_clk (wb_clk), + .o_rst (wb_rst)); + + servant + #(.memfile (memfile), + .memsize (memsize)) + servant + (.wb_clk (wb_clk), + .wb_rst (wb_rst), + .q (q)); + +endmodule diff --git a/servant/servix_ebaz4205_clock_gen.v b/servant/servix_ebaz4205_clock_gen.v new file mode 100644 index 0000000..54984a4 --- /dev/null +++ b/servant/servix_ebaz4205_clock_gen.v @@ -0,0 +1,40 @@ +`default_nettype none +module servix_ebaz4205_clock_gen + (input wire i_clk, + output wire o_clk, + output reg o_rst); + + parameter frequency = 32; + + wire clkfb; + wire locked; + reg locked_r; + + // (33.333 * 48) / 50 => 31.9996 MHz + PLLE2_BASE + #(.BANDWIDTH("OPTIMIZED"), + .CLKFBOUT_MULT(48), + .CLKIN1_PERIOD(30.000300003), // 33.333 MHz + .CLKOUT0_DIVIDE((frequency == 32) ? 50 : 100), + .DIVCLK_DIVIDE(1), + .STARTUP_WAIT("FALSE")) + PLLE2_BASE_inst + (.CLKOUT0(o_clk), + .CLKOUT1(), + .CLKOUT2(), + .CLKOUT3(), + .CLKOUT4(), + .CLKOUT5(), + .CLKFBOUT(clkfb), + .LOCKED(locked), + .CLKIN1(i_clk), + .PWRDWN(1'b0), + .RST(1'b0), + .CLKFBIN(clkfb)); + + always @(posedge o_clk) begin + locked_r <= locked; + o_rst <= !locked_r; + end + +endmodule From 6e802cb9bc19cefeae5d7e60d75bd6b9edb7230a Mon Sep 17 00:00:00 2001 From: Zeeshan Rafique <36025181+zeeshanrafique23@users.noreply.github.com> Date: Sat, 21 Aug 2021 02:31:42 +0500 Subject: [PATCH 135/289] M-extension support for SERV * modified serv(ant) for MDU * added dependency for mdu * M-extension for SERV * Updated README for running RV32IM compliance tests * waive some lint warnings related to mdu * added mdu param for arty_a7_35t --- README.md | 2 +- data/verilator_waiver.vlt | 12 +++++++- rtl/serv_bufreg.v | 24 +++++++++++----- rtl/serv_decode.v | 52 ++++++++++++++++++++++++++--------- rtl/serv_mem_if.v | 17 ++++++++++-- rtl/serv_rf_top.v | 32 +++++++++++++++++---- rtl/serv_state.v | 47 +++++++++++++++++++++++-------- rtl/serv_top.v | 58 +++++++++++++++++++++++++++++++++------ serv.core | 6 ++++ servant.core | 11 ++++++-- servant/servant.v | 37 ++++++++++++++++++++++++- 11 files changed, 246 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 186a1db..8845db7 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ Run the compliance tests cd riscv-compliance && make TARGETDIR=$SERV/riscv-target RISCV_TARGET=serv RISCV_DEVICE=rv32i RISCV_ISA=rv32i TARGET_SIM=$WORKSPACE/build/servant_1.1.0/verilator_tb-verilator/Vservant_sim -The above will run all tests in the rv32i test suite. Since SERV also implement the `rv32Zicsr` and `rv32Zifencei` extensions, these can also be tested by choosing any of them instead of rv32i as the `RISCV_ISA` variable. +The above will run all tests in the rv32i test suite. Since SERV also implement the `rv32im`, `rv32Zicsr` and `rv32Zifencei` extensions, these can also be tested by choosing any of them instead of rv32i as the `RISCV_ISA` variable. ## Run on hardware diff --git a/data/verilator_waiver.vlt b/data/verilator_waiver.vlt index 218fd16..b3a94e7 100644 --- a/data/verilator_waiver.vlt +++ b/data/verilator_waiver.vlt @@ -1,7 +1,17 @@ `verilator_config // Bits [1:0] in i_ibus_rdt are not used at all -lint_off -rule UNUSED -file "*/serv_top.v" -lines 52 +lint_off -rule UNUSED -file "*/serv_top.v" -lines 53 //Some bits in the instruction word are not used in serv_decode but it's easier //to just send in the whole word than picking out bits lint_off -rule UNUSED -file "*/serv_decode.v" -lines 7 + +//Some variables are only used when we connect an Extension with serv_decode +lint_off -rule UNUSED -file "*/serv_top.v" -lines 65 +lint_off -rule UNUSED -file "*/serv_bufreg.v" -lines 10 +lint_off -rule UNUSED -file "*/serv_decode.v" -lines 8 +lint_off -rule UNUSED -file "*/serv_decode.v" -lines 69 +lint_off -rule UNUSED -file "*/serv_mem_if.v" -lines 23 +lint_off -rule UNUSED -file "*/serv_mem_if.v" -lines 71 +lint_off -rule UNUSED -file "*/serv_state.v" -lines 47 +lint_off -rule UNUSED -file "*/serv_state.v" -lines 49 diff --git a/rtl/serv_bufreg.v b/rtl/serv_bufreg.v index 7d32b42..dcf2354 100644 --- a/rtl/serv_bufreg.v +++ b/rtl/serv_bufreg.v @@ -1,12 +1,14 @@ -module serv_bufreg - ( +module serv_bufreg #( + parameter [0:0] MDU = 0 +)( input wire i_clk, //State input wire i_cnt0, input wire i_cnt1, input wire i_en, input wire i_init, - output reg [1:0] o_lsb, + input wire i_mdu_op, + output wire [1:0] o_lsb, //Control input wire i_rs1_en, input wire i_imm_en, @@ -17,11 +19,14 @@ module serv_bufreg input wire i_imm, output wire o_q, //External - output wire [31:0] o_dbus_adr); + output wire [31:0] o_dbus_adr, + //Extension + output wire [31:0] o_ext_rs1); wire c, q; reg c_r; reg [31:2] data; + reg [1:0] lsb; wire clr_lsb = i_cnt0 & i_clr_lsb; @@ -35,11 +40,16 @@ module serv_bufreg data <= {i_init ? q : (data[31] & i_sh_signed), data[31:3]}; if (i_init ? (i_cnt0 | i_cnt1) : i_en) - o_lsb <= {i_init ? q : data[2],o_lsb[1]}; - + lsb <= {i_init ? q : data[2],lsb[1]}; end - assign o_q = o_lsb[0] & i_en; + assign o_q = lsb[0] & i_en; assign o_dbus_adr = {data, 2'b00}; + assign o_ext_rs1 = {o_dbus_adr[31:2],lsb}; + + generate + if (MDU) assign o_lsb = i_mdu_op ? 2'b00 : lsb; + else assign o_lsb = lsb; + endgenerate endmodule diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index b675901..f4eb7cf 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -1,7 +1,8 @@ `default_nettype none -module serv_decode #( - parameter [0:0] PRE_REGISTER = 1 -)( +module serv_decode + #(parameter [0:0] PRE_REGISTER = 1, + parameter [0:0] MDU = 0) + ( input wire clk, //Input input wire [31:2] i_wb_rdt, @@ -17,6 +18,10 @@ module serv_decode #( output reg o_shift_op, output reg o_slt_op, output reg o_rd_op, + //MDU + output reg o_mdu_op, + //Extension + output reg [2:0] o_ext_funct3, //To bufreg output reg o_bufreg_rs1_en, output reg o_bufreg_imm_en, @@ -61,8 +66,33 @@ module serv_decode #( reg op22; reg op26; + reg imm25; reg imm30; +generate + wire co_mdu_op; + wire [2:0]co_ext_funct3; + wire co_shift_op; + wire co_slt_op; + wire co_mem_word; + wire co_rd_alu_en; + + if (MDU) begin + assign co_mdu_op = ((opcode == 5'b01100) & imm25); + assign co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01) & !co_mdu_op; + assign co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01) & !co_mdu_op; + assign co_mem_word = co_mdu_op ? co_mdu_op :funct3[1]; + assign co_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4] & !co_mdu_op; + end else begin + assign co_mdu_op = 1'b0; + assign co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01); + assign co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01); + assign co_mem_word = funct3[1]; + assign co_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4]; + end + assign co_ext_funct3 = funct3; +endgenerate + //opcode wire op_or_opimm = (!opcode[4] & opcode[2] & !opcode[0]); @@ -109,13 +139,6 @@ module serv_decode #( wire co_sh_right = funct3[2]; wire co_bne_or_bge = funct3[0]; - // - // opcode & funct3 - // - - wire co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01); - wire co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01); - //Matches system ops except eceall/ebreak/mret wire csr_op = opcode[4] & opcode[2] & (|funct3); @@ -190,7 +213,6 @@ module serv_decode #( wire co_mem_cmd = opcode[3]; wire co_mem_signed = ~funct3[2]; - wire co_mem_word = funct3[1]; wire co_mem_half = funct3[0]; wire [1:0] co_alu_bool_op = funct3[1:0]; @@ -220,8 +242,6 @@ module serv_decode #( //1 (OP_B_SOURCE_RS2) when BRANCH or OP wire co_op_b_source = opcode[3]; - wire co_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4]; - generate if (PRE_REGISTER) begin @@ -229,6 +249,7 @@ module serv_decode #( if (i_wb_en) begin funct3 <= i_wb_rdt[14:12]; imm30 <= i_wb_rdt[30]; + imm25 <= i_wb_rdt[25]; opcode <= i_wb_rdt[6:2]; op20 <= i_wb_rdt[20]; op21 <= i_wb_rdt[21]; @@ -248,6 +269,8 @@ module serv_decode #( o_shift_op = co_shift_op; o_slt_op = co_slt_op; o_rd_op = co_rd_op; + o_mdu_op = co_mdu_op; + o_ext_funct3 = co_ext_funct3; o_bufreg_rs1_en = co_bufreg_rs1_en; o_bufreg_imm_en = co_bufreg_imm_en; o_bufreg_clr_lsb = co_bufreg_clr_lsb; @@ -285,6 +308,7 @@ module serv_decode #( always @(*) begin funct3 = i_wb_rdt[14:12]; imm30 = i_wb_rdt[30]; + imm25 = i_wb_rdt[25]; opcode = i_wb_rdt[6:2]; op20 = i_wb_rdt[20]; op21 = i_wb_rdt[21]; @@ -304,6 +328,8 @@ module serv_decode #( o_shift_op <= co_shift_op; o_slt_op <= co_slt_op; o_rd_op <= co_rd_op; + o_mdu_op <= co_mdu_op; + o_ext_funct3 <= co_ext_funct3; o_bufreg_rs1_en <= co_bufreg_rs1_en; o_bufreg_imm_en <= co_bufreg_imm_en; o_bufreg_clr_lsb <= co_bufreg_clr_lsb; diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index fbdc3c4..ee688ac 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -1,6 +1,7 @@ `default_nettype none module serv_mem_if - #(parameter WITH_CSR = 1) + #(parameter WITH_CSR = 1, + parameter [0:0] MDU = 0) ( input wire i_clk, //State @@ -18,6 +19,8 @@ module serv_mem_if input wire i_signed, input wire i_word, input wire i_half, + //MDU + input wire i_mdu_op, //Data input wire i_op_b, output wire o_rd, @@ -58,7 +61,17 @@ module serv_mem_if (i_bytecnt == 2'b00) | (i_half & !i_bytecnt[1]); - assign o_rd = i_mem_op & (dat_valid ? dat_cur : signbit & i_signed); + wire mem_rd = i_mem_op & (dat_valid ? dat_cur : signbit & i_signed); + + generate + if(MDU) begin + wire mdu_rd = i_mdu_op & dat_cur; + assign o_rd = mem_rd | mdu_rd; + end else begin + wire mdu_rd = 1'b0; + assign o_rd = mem_rd; + end + endgenerate assign o_wb_sel[3] = (i_lsb == 2'b11) | i_word | (i_half & i_lsb[1]); assign o_wb_sel[2] = (i_lsb == 2'b10) | i_word; diff --git a/rtl/serv_rf_top.v b/rtl/serv_rf_top.v index 3f41373..6dab9f7 100644 --- a/rtl/serv_rf_top.v +++ b/rtl/serv_rf_top.v @@ -2,7 +2,10 @@ module serv_rf_top #(parameter RESET_PC = 32'd0, - + /* Multiplication and Division Unit + This parameter enables the interface for connecting SERV and MDU + */ + parameter [0:0] MDU = 0, /* Register signals before or after the decoder 0 : Register after the decoder. Faster but uses more resources 1 : (default) Register before the decoder. Slower but uses less resources @@ -55,8 +58,17 @@ module serv_rf_top output wire o_dbus_we , output wire o_dbus_cyc, input wire [31:0] i_dbus_rdt, - input wire i_dbus_ack); - + input wire i_dbus_ack, + + // Extension + output wire [31:0] o_ext_rs1, + output wire [31:0] o_ext_rs2, + output wire [ 2:0] o_ext_funct3, + input wire [31:0] i_ext_rd, + input wire i_ext_ready, + // MDU + output wire o_mdu_valid); + localparam CSR_REGS = WITH_CSR*4; wire rf_wreq; @@ -120,7 +132,8 @@ module serv_rf_top #(.RESET_PC (RESET_PC), .PRE_REGISTER (PRE_REGISTER), .RESET_STRATEGY (RESET_STRATEGY), - .WITH_CSR (WITH_CSR)) + .WITH_CSR (WITH_CSR), + .MDU(MDU)) cpu ( .clk (clk), @@ -174,7 +187,16 @@ module serv_rf_top .o_dbus_we (o_dbus_we), .o_dbus_cyc (o_dbus_cyc), .i_dbus_rdt (i_dbus_rdt), - .i_dbus_ack (i_dbus_ack)); + .i_dbus_ack (i_dbus_ack), + + //Extension + .o_ext_funct3 (o_ext_funct3), + .i_ext_ready (i_ext_ready), + .i_ext_rd (i_ext_rd), + .o_ext_rs1 (o_ext_rs1), + .o_ext_rs2 (o_ext_rs2), + //MDU + .o_mdu_valid (o_mdu_valid)); endmodule `default_nettype wire diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 7fa088a..dfe2ff8 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -1,6 +1,7 @@ module serv_state #(parameter RESET_STRATEGY = "MINI", - parameter [0:0] WITH_CSR = 1) + parameter [0:0] WITH_CSR = 1, + parameter [0:0] MDU = 0) ( input wire i_clk, input wire i_rst, @@ -41,11 +42,16 @@ module serv_state output wire [1:0] o_mem_bytecnt, input wire i_mem_misalign, output reg o_cnt_done, - output wire o_bufreg_en); + output wire o_bufreg_en, + //MDU + input wire i_mdu_op, + output wire o_mdu_valid, + input wire i_mdu_ready); reg stage_two_req; reg init_done; wire misalign_trap_sync; + wire two_stage_op; reg [4:2] o_cnt; reg [3:0] o_cnt_r; @@ -74,8 +80,34 @@ module serv_state //been calculated. wire take_branch = i_branch_op & (!i_cond_branch | (i_alu_cmp^i_bne_or_bge)); - //slt*, branch/jump, shift, load/store - wire two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op; +generate + if (MDU) begin + //slt*, branch/jump, shift, load/store + assign two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op | i_mdu_op; + + //valid signal for mdu + assign o_mdu_valid = !o_cnt_en & init_done & i_mdu_op; + + //Prepare RF for writes when everything is ready to enter stage two + // and the first stage didn't cause a misalign exception + assign o_rf_wreq = !misalign_trap_sync & + ((i_shift_op & (i_sh_done | !i_sh_right) & !o_cnt_en & init_done) | + (i_mem_op & i_dbus_ack) | i_mdu_ready | + (stage_two_req & (i_slt_op | i_branch_op))); + end else begin + //slt*, branch/jump, shift, load/store + assign two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op; + + //valid signal for mdu turned-off + assign o_mdu_valid = 1'b0; + + //Prepare RF for writes when everything is ready to enter stage two + // and the first stage didn't cause a misalign exception + assign o_rf_wreq = !misalign_trap_sync & + ((i_shift_op & (i_sh_done | !i_sh_right) & !o_cnt_en & init_done) | + (i_mem_op & i_dbus_ack) | (stage_two_req & (i_slt_op | i_branch_op))); + end +endgenerate assign o_dbus_cyc = !o_cnt_en & init_done & i_mem_op & !i_mem_misalign; @@ -83,13 +115,6 @@ module serv_state // or when stage one caused an exception (rreq implies a write request too) assign o_rf_rreq = i_ibus_ack | (stage_two_req & misalign_trap_sync); - //Prepare RF for writes when everything is ready to enter stage two - // and the first stage didn't cause a misalign exception - assign o_rf_wreq = !misalign_trap_sync & - ((i_shift_op & (i_sh_done | !i_sh_right) & !o_cnt_en & init_done) | - (i_mem_op & i_dbus_ack) | - (stage_two_req & (i_slt_op | i_branch_op))); - assign o_rf_rd_en = i_rd_op & !o_init; /* diff --git a/rtl/serv_top.v b/rtl/serv_top.v index c465ae4..b517b2e 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -4,7 +4,8 @@ module serv_top #(parameter WITH_CSR = 1, parameter PRE_REGISTER = 1, parameter RESET_STRATEGY = "MINI", - parameter RESET_PC = 32'd0) + parameter RESET_PC = 32'd0, + parameter [0:0] MDU = 1'b0) ( input wire clk, input wire i_rst, @@ -57,7 +58,15 @@ module serv_top output wire o_dbus_we , output wire o_dbus_cyc, input wire [31:0] i_dbus_rdt, - input wire i_dbus_ack); + input wire i_dbus_ack, + //Extension + output wire [ 2:0] o_ext_funct3, + input wire i_ext_ready, + input wire [31:0] i_ext_rd, + output wire [31:0] o_ext_rs1, + output wire [31:0] o_ext_rs2, + //MDU + output wire o_mdu_valid); wire [4:0] rd_addr; wire [4:0] rs1_addr; @@ -76,6 +85,7 @@ module serv_top wire shift_op; wire slt_op; wire rd_op; + wire mdu_op; wire rd_alu_en; wire rd_csr_en; @@ -157,7 +167,8 @@ module serv_top serv_state #(.RESET_STRATEGY (RESET_STRATEGY), - .WITH_CSR (WITH_CSR)) + .WITH_CSR (WITH_CSR), + .MDU(MDU)) state ( .i_clk (clk), @@ -194,6 +205,11 @@ module serv_top .i_slt_op (slt_op), .i_e_op (e_op), .i_rd_op (rd_op), + //MDU + .i_mdu_op (mdu_op), + .o_mdu_valid (o_mdu_valid), + //Extension + .i_mdu_ready (i_ext_ready), //External .o_dbus_cyc (o_dbus_cyc), .i_dbus_ack (i_dbus_ack), @@ -206,7 +222,8 @@ module serv_top .o_rf_rd_en (rd_en)); serv_decode - #(.PRE_REGISTER (PRE_REGISTER)) + #(.PRE_REGISTER (PRE_REGISTER), + .MDU(MDU)) decode ( .clk (clk), @@ -224,6 +241,10 @@ module serv_top .o_slt_op (slt_op), .o_rd_op (rd_op), .o_sh_right (sh_right), + .o_mdu_op (mdu_op), + //Extension + .o_ext_funct3 (o_ext_funct3), + //To bufreg .o_bufreg_rs1_en (bufreg_rs1_en), .o_bufreg_imm_en (bufreg_imm_en), @@ -281,7 +302,9 @@ module serv_top .i_wb_en (i_ibus_ack), .i_wb_rdt (i_ibus_rdt[31:7])); - serv_bufreg bufreg + serv_bufreg + #(.MDU(MDU)) + bufreg ( .i_clk (clk), //State @@ -289,6 +312,7 @@ module serv_top .i_cnt1 (cnt1), .i_en (bufreg_en), .i_init (init), + .i_mdu_op (mdu_op), .o_lsb (lsb), //Control .i_sh_signed (bufreg_sh_signed), @@ -300,7 +324,8 @@ module serv_top .i_imm (imm), .o_q (bufreg_q), //External - .o_dbus_adr (o_dbus_adr)); + .o_dbus_adr (o_dbus_adr), + .o_ext_rs1 (o_ext_rs1)); serv_ctrl #(.RESET_PC (RESET_PC), @@ -398,7 +423,8 @@ module serv_top .o_csr (rf_csr_out)); serv_mem_if - #(.WITH_CSR (WITH_CSR)) + #(.WITH_CSR (WITH_CSR), + .MDU(MDU)) mem_if ( .i_clk (clk), @@ -412,6 +438,7 @@ module serv_top .o_sh_done (mem_sh_done), .o_sh_done_r (mem_sh_done_r), //Control + .i_mdu_op (mdu_op), .i_mem_op (mem_op), .i_shift_op (shift_op), .i_signed (mem_signed), @@ -423,8 +450,8 @@ module serv_top //External interface .o_wb_dat (o_dbus_dat), .o_wb_sel (o_dbus_sel), - .i_wb_rdt (i_dbus_rdt), - .i_wb_ack (i_dbus_ack)); + .i_wb_rdt (dbus_rdt), + .i_wb_ack (dbus_ack)); generate if (WITH_CSR) begin @@ -525,5 +552,18 @@ module serv_top `endif +generate + wire [31:0] dbus_rdt; + wire dbus_ack; + if (MDU) begin + assign dbus_rdt = i_ext_ready ? i_ext_rd:i_dbus_rdt; + assign dbus_ack = i_dbus_ack | i_ext_ready; + end else begin + assign dbus_rdt = i_dbus_rdt; + assign dbus_ack = i_dbus_ack; + end + assign o_ext_rs2 = o_dbus_dat; +endgenerate + endmodule `default_nettype wire diff --git a/serv.core b/serv.core index 7163ebc..a0cbe14 100644 --- a/serv.core +++ b/serv.core @@ -25,6 +25,7 @@ targets: default: filesets : [core] parameters : + - "is_toplevel? (MDU)" - "is_toplevel? (PRE_REGISTER)" - "is_toplevel? (RESET_STRATEGY)" - RISCV_FORMAL @@ -43,6 +44,11 @@ targets: toplevel : serv_rf_top parameters: + MDU: + datatype : int + description: Enables interface for RISC-V standard M-extension + paramtype : vlogparam + PRE_REGISTER: datatype : int description : Register signals before or after the decoder diff --git a/servant.core b/servant.core index 938b2df..1884773 100644 --- a/servant.core +++ b/servant.core @@ -39,7 +39,7 @@ filesets: - "!tool_quartus? (servant/servant_ram.v)" - servant/servant.v file_type : verilogSource - depend : [serv] + depend : [serv, "mdu? (mdu)"] cyc1000: files: @@ -297,7 +297,7 @@ targets: arty_a7_35t: default_tool: vivado filesets : [mem_files, soc, arty_a7_35t] - parameters : [memfile, memsize, frequency=16] + parameters : [memfile, memsize, frequency=16, "mdu? (MDU=1)"] tools: vivado: {part : xc7a35ticsg324-1L} toplevel : servix @@ -347,6 +347,7 @@ targets: filesets : [soc, servant_tb] parameters : - RISCV_FORMAL + - "mdu? (MDU=1)" - SERV_CLEAR_RAM=true - firmware - memsize @@ -379,6 +380,7 @@ targets: filesets : [soc, verilator_tb] parameters : - RISCV_FORMAL + - "mdu? (MDU=1)" - firmware - memsize - signature @@ -429,6 +431,11 @@ parameters: RISCV_FORMAL: datatype : bool paramtype : vlogdefine + + MDU: + datatype : int + description : Enables RISC-V standard M-extension + paramtype : vlogdefine SERV_CLEAR_RAM: datatype : bool diff --git a/servant/servant.v b/servant/servant.v index f300a9a..cae391e 100644 --- a/servant/servant.v +++ b/servant/servant.v @@ -52,6 +52,13 @@ module servant wire wb_timer_cyc; wire [31:0] wb_timer_rdt; + wire [31:0] mdu_rs1; + wire [31:0] mdu_rs2; + wire [ 2:0] mdu_op; + wire mdu_valid; + wire [31:0] mdu_rd; + wire mdu_ready; + servant_arbiter arbiter (.i_wb_cpu_dbus_adr (wb_dmem_adr), .i_wb_cpu_dbus_dat (wb_dmem_dat), @@ -149,6 +156,9 @@ module servant serv_rf_top #(.RESET_PC (32'h0000_0000), .RESET_STRATEGY (reset_strategy), + `ifdef MDU + .MDU(1), + `endif .WITH_CSR (with_csr)) cpu ( @@ -190,6 +200,31 @@ module servant .o_dbus_we (wb_dbus_we), .o_dbus_cyc (wb_dbus_cyc), .i_dbus_rdt (wb_dbus_rdt), - .i_dbus_ack (wb_dbus_ack)); + .i_dbus_ack (wb_dbus_ack), + + //Extension + .o_ext_rs1 (mdu_rs1), + .o_ext_rs2 (mdu_rs2), + .o_ext_funct3 (mdu_op), + .i_ext_rd (mdu_rd), + .i_ext_ready (mdu_ready), + //MDU + .o_mdu_valid (mdu_valid)); + +`ifdef MDU + mdu_top mdu_serv + ( + .i_clk(wb_clk), + .i_rst(wb_rst), + .i_mdu_rs1(mdu_rs1), + .i_mdu_rs2(mdu_rs2), + .i_mdu_op(mdu_op), + .i_mdu_valid(mdu_valid), + .o_mdu_ready(mdu_ready), + .o_mdu_rd(mdu_rd)); +`else + assign mdu_ready = 1'b0; + assign mdu_rd = 32'b0; +`endif endmodule From 621baeff316f8047a97227d5b28441a3a82fd0f8 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 26 Aug 2021 09:21:51 +0200 Subject: [PATCH 136/289] Always return 0 from reads to reg x0 in serv_rf_ram --- rtl/serv_rf_ram.v | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/rtl/serv_rf_ram.v b/rtl/serv_rf_ram.v index 9bbc503..3cedea6 100644 --- a/rtl/serv_rf_ram.v +++ b/rtl/serv_rf_ram.v @@ -7,16 +7,34 @@ module serv_rf_ram input wire [width-1:0] i_wdata, input wire i_wen, input wire [$clog2(depth)-1:0] i_raddr, - output reg [width-1:0] o_rdata); - + output wire [width-1:0] o_rdata); + reg [width-1:0] memory [0:depth-1]; + reg [width-1:0] rdata ; always @(posedge i_clk) begin if (i_wen) memory[i_waddr] <= i_wdata; - o_rdata <= memory[i_raddr]; + rdata <= memory[i_raddr]; end + /* Reads from reg x0 needs to return 0 + Check that the part of the read address corresponding to the register + is zero and gate the output + width LSB of reg index $clog2(width) + 2 4 1 + 4 3 2 + 8 2 3 + 16 1 4 + 32 0 5 + */ + reg regzero; + + always @(posedge i_clk) + regzero <= !(|i_raddr[$clog2(depth)-1:5-$clog2(width)]); + + assign o_rdata = rdata & ~{width{regzero}}; + `ifdef SERV_CLEAR_RAM integer i; initial From d2a42430335330f6c518a937b7c3a19cdfbffe72 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 26 Aug 2021 09:24:47 +0200 Subject: [PATCH 137/289] Add reset for new_irq register --- rtl/serv_csr.v | 8 +++++++- rtl/serv_top.v | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/rtl/serv_csr.v b/rtl/serv_csr.v index 49ec01e..d05f962 100644 --- a/rtl/serv_csr.v +++ b/rtl/serv_csr.v @@ -1,7 +1,9 @@ `default_nettype none module serv_csr + #(parameter RESET_STRATEGY = "MINI") ( input wire i_clk, + input wire i_rst, //State input wire i_init, input wire i_en, @@ -76,7 +78,7 @@ module serv_csr timer_irq_r <= timer_irq; o_new_irq <= timer_irq & !timer_irq_r; end - + if (i_mie_en & i_cnt7) mie_mtie <= csr_in; @@ -130,6 +132,10 @@ module serv_csr end if (i_mcause_en & i_cnt_done | i_trap) mcause31 <= i_trap ? o_new_irq : csr_in; + if (i_rst) + if (RESET_STRATEGY != "NONE") + o_new_irq <= 1'b0; + end endmodule diff --git a/rtl/serv_top.v b/rtl/serv_top.v index b517b2e..476e7ec 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -455,9 +455,12 @@ module serv_top generate if (WITH_CSR) begin - serv_csr csr + serv_csr + #(.RESET_STRATEGY (RESET_STRATEGY)) + csr ( .i_clk (clk), + .i_rst (i_rst), //State .i_init (init), .i_en (cnt_en), From b10a87149963090e365e349d8ffa7a7af3fa2d56 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 26 Aug 2021 10:34:32 +0200 Subject: [PATCH 138/289] Fix signedness bug on immediates The sign bit on immediates relied on the value of csr_imm_en from the previous instruction. This fixes by gating with csr_imm_en after it has been latched instead of before --- rtl/serv_immdec.v | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v index aa40e7d..47dce08 100644 --- a/rtl/serv_immdec.v +++ b/rtl/serv_immdec.v @@ -20,7 +20,7 @@ module serv_immdec input wire i_wb_en, input wire [31:7] i_wb_rdt); - reg signbit; + reg imm31; reg [8:0] imm19_12_20; reg imm7; @@ -31,6 +31,8 @@ module serv_immdec assign o_imm = i_cnt_done ? signbit : i_ctrl[0] ? imm11_7[0] : imm24_20[0]; assign o_csr_imm = imm19_12_20[4]; + wire signbit = imm31 & !i_csr_imm_en; + generate if (SHARED_RFADDR_IMM_REGS) begin assign o_rs1_addr = imm19_12_20[8:4]; @@ -40,7 +42,7 @@ module serv_immdec always @(posedge i_clk) begin if (i_wb_en) begin /* CSR immediates are always zero-extended, hence clear the signbit */ - signbit <= i_wb_rdt[31] & !i_csr_imm_en; + imm31 <= i_wb_rdt[31]; end if (i_wb_en | (i_cnt_en & i_immdec_en[1])) imm19_12_20 <= i_wb_en ? {i_wb_rdt[19:12],i_wb_rdt[20]} : {i_ctrl[3] ? signbit : imm24_20[0], imm19_12_20[8:1]}; @@ -67,7 +69,7 @@ module serv_immdec always @(posedge i_clk) begin if (i_wb_en) begin /* CSR immediates are always zero-extended, hence clear the signbit */ - signbit <= i_wb_rdt[31] & !i_csr_imm_en; + imm31 <= i_wb_rdt[31]; imm19_12_20 <= {i_wb_rdt[19:12],i_wb_rdt[20]}; imm7 <= i_wb_rdt[7]; imm30_25 <= i_wb_rdt[30:25]; From 781c07b7dc8e14880b458286dac0fec52fe05a9a Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 26 Aug 2021 10:47:03 +0200 Subject: [PATCH 139/289] Properly reset stage_two_req signal --- rtl/serv_state.v | 1 + 1 file changed, 1 insertion(+) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index dfe2ff8..95b347b 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -186,6 +186,7 @@ endgenerate init_done <= 1'b0; o_ctrl_jump <= 1'b0; o_cnt_r <= 4'b0000; + stage_two_req <= 1'b0; end end end From 64f5ca0b7f634dddd77cd49e92adc39d23f75016 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 27 Aug 2021 12:18:32 +0200 Subject: [PATCH 140/289] Add missing reset on cnt_done --- rtl/serv_state.v | 1 + 1 file changed, 1 insertion(+) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 95b347b..f47ece7 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -185,6 +185,7 @@ endgenerate o_cnt <= 3'd0; init_done <= 1'b0; o_ctrl_jump <= 1'b0; + o_cnt_done <= 1'b0; o_cnt_r <= 4'b0000; stage_two_req <= 1'b0; end From 3971ca942ed5c9a04384c67994b032006f522b0d Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 27 Aug 2021 12:18:54 +0200 Subject: [PATCH 141/289] Fix up RVFI --- rtl/serv_top.v | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 476e7ec..1866fb5 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -502,12 +502,18 @@ module serv_top wire rs_en = (branch_op|mem_op|shift_op|slt_op) ? init : ctrl_pc_en; always @(posedge clk) begin + /* End of instruction */ rvfi_valid <= cnt_done & ctrl_pc_en & !i_rst; rvfi_order <= rvfi_order + {63'd0,rvfi_valid}; + + /* Get instruction word when it's fetched from ibus */ if (o_ibus_cyc & i_ibus_ack) rvfi_insn <= i_ibus_rdt; + + /* Store data written to rd */ if (o_wen0) rvfi_rd_wdata <= {o_wdata0,rvfi_rd_wdata[31:1]}; + if (cnt_done & ctrl_pc_en) begin rvfi_pc_rdata <= pc; if (!(rd_en & (|rd_addr))) begin @@ -521,18 +527,22 @@ module serv_top pc <= rvfi_pc_wdata; end + /* Not used */ rvfi_halt <= 1'b0; rvfi_intr <= 1'b0; rvfi_mode <= 2'd3; rvfi_ixl = 2'd1; + + /* RS1 not valid during J, U instructions (immdec_en[1]) */ + /* RS2 not valid during I, J, U instructions (immdec_en[2]) */ if (i_rf_ready) begin - rvfi_rs1_addr <= rs1_addr; - rvfi_rs2_addr <= rs2_addr; + rvfi_rs1_addr <= !immdec_en[1] ? rs1_addr : 5'd0; + rvfi_rs2_addr <= !immdec_en[2] /*rs2_valid*/ ? rs2_addr : 5'd0; rvfi_rd_addr <= rd_addr; end if (rs_en) begin - rvfi_rs1_rdata <= {rs1,rvfi_rs1_rdata[31:1]}; - rvfi_rs2_rdata <= {rs2,rvfi_rs2_rdata[31:1]}; + rvfi_rs1_rdata <= {!immdec_en[1] & rs1,rvfi_rs1_rdata[31:1]}; + rvfi_rs2_rdata <= {!immdec_en[2] & rs2,rvfi_rs2_rdata[31:1]}; end if (i_dbus_ack) begin From 2989051f442eea672ebdb473358288210692640a Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 27 Aug 2021 13:00:47 +0200 Subject: [PATCH 142/289] Avoid enabling bufreg before instruction is decoded --- rtl/serv_state.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index f47ece7..cf2a181 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -128,7 +128,7 @@ endgenerate shift : Shift in during phase 1. Continue shifting between phases (except for the first cycle after init). Shift out during phase 2 */ - assign o_bufreg_en = (o_cnt_en & (o_init | o_ctrl_trap | i_branch_op)) | (i_shift_op & !stage_two_req & (i_sh_right | i_sh_done_r)); + assign o_bufreg_en = (o_cnt_en & (o_init | o_ctrl_trap | i_branch_op)) | (i_shift_op & !stage_two_req & (i_sh_right | i_sh_done_r) & init_done); assign o_ibus_cyc = ibus_cyc & !i_rst; From 52d0bf09380d5673308fdc2e423e448b6e2c9abb Mon Sep 17 00:00:00 2001 From: Klas Nordmark Date: Tue, 30 Mar 2021 09:42:00 +0200 Subject: [PATCH 143/289] Added openlane target and params.tcl with suitable openlane parameters for SERV --- data/params.tcl | 6 ++ rtl/serv_synth_wrapper.v | 155 +++++++++++++++++++++++++++++++++++++++ serv.core | 10 +++ 3 files changed, 171 insertions(+) create mode 100644 data/params.tcl create mode 100644 rtl/serv_synth_wrapper.v diff --git a/data/params.tcl b/data/params.tcl new file mode 100644 index 0000000..231da58 --- /dev/null +++ b/data/params.tcl @@ -0,0 +1,6 @@ +set ::env(CLOCK_PERIOD) "10" +set ::env(CLOCK_PORT) "clk" +set ::env(DIE_AREA) "0 0 200 200" +set ::env(FP_SIZING) absolute +set ::env(DESIGN_IS_CORE) 0 +set ::env(GLB_RT_MAXLAYER) 5 diff --git a/rtl/serv_synth_wrapper.v b/rtl/serv_synth_wrapper.v new file mode 100644 index 0000000..5b737d1 --- /dev/null +++ b/rtl/serv_synth_wrapper.v @@ -0,0 +1,155 @@ +`default_nettype none + +module serv_synth_wrapper + #( + /* Register signals before or after the decoder + 0 : Register after the decoder. Faster but uses more resources + 1 : (default) Register before the decoder. Slower but uses less resources + */ + parameter PRE_REGISTER = 1, + /* Amount of reset applied to design + "NONE" : No reset at all. Relies on a POR to set correct initialization + values and that core isn't reset during runtime + "MINI" : Standard setting. Resets the minimal amount of FFs needed to + restart execution from the instruction at RESET_PC + */ + parameter RESET_STRATEGY = "MINI", + parameter WITH_CSR = 1, + parameter RF_WIDTH = 2, + parameter RF_L2D = $clog2((32+(WITH_CSR*4))*32/RF_WIDTH)) + ( + input wire clk, + input wire i_rst, + input wire i_timer_irq, +`ifdef RISCV_FORMAL + output wire rvfi_valid, + output wire [63:0] rvfi_order, + output wire [31:0] rvfi_insn, + output wire rvfi_trap, + output wire rvfi_halt, + output wire rvfi_intr, + output wire [1:0] rvfi_mode, + output wire [1:0] rvfi_ixl, + output wire [4:0] rvfi_rs1_addr, + output wire [4:0] rvfi_rs2_addr, + output wire [31:0] rvfi_rs1_rdata, + output wire [31:0] rvfi_rs2_rdata, + output wire [4:0] rvfi_rd_addr, + output wire [31:0] rvfi_rd_wdata, + output wire [31:0] rvfi_pc_rdata, + output wire [31:0] rvfi_pc_wdata, + output wire [31:0] rvfi_mem_addr, + output wire [3:0] rvfi_mem_rmask, + output wire [3:0] rvfi_mem_wmask, + output wire [31:0] rvfi_mem_rdata, + output wire [31:0] rvfi_mem_wdata, +`endif + output wire [31:0] o_ibus_adr, + output wire o_ibus_cyc, + input wire [31:0] i_ibus_rdt, + input wire i_ibus_ack, + output wire [31:0] o_dbus_adr, + output wire [31:0] o_dbus_dat, + output wire [3:0] o_dbus_sel, + output wire o_dbus_we , + output wire o_dbus_cyc, + input wire [31:0] i_dbus_rdt, + input wire i_dbus_ack, + + output wire [RF_L2D-1:0] o_waddr, + output wire [RF_WIDTH-1:0] o_wdata, + output wire o_wen, + output wire [RF_L2D-1:0] o_raddr, + input wire [RF_WIDTH-1:0] i_rdata); + + localparam CSR_REGS = WITH_CSR*4; + + wire rf_wreq; + wire rf_rreq; + wire [4+WITH_CSR:0] wreg0; + wire [4+WITH_CSR:0] wreg1; + wire wen0; + wire wen1; + wire wdata0; + wire wdata1; + wire [4+WITH_CSR:0] rreg0; + wire [4+WITH_CSR:0] rreg1; + wire rf_ready; + wire rdata0; + wire rdata1; + + serv_rf_ram_if + #(.width (RF_WIDTH), + .reset_strategy (RESET_STRATEGY), + .csr_regs (CSR_REGS)) + rf_ram_if + (.i_clk (clk), + .i_rst (i_rst), + .i_wreq (rf_wreq), + .i_rreq (rf_rreq), + .o_ready (rf_ready), + .i_wreg0 (wreg0), + .i_wreg1 (wreg1), + .i_wen0 (wen0), + .i_wen1 (wen1), + .i_wdata0 (wdata0), + .i_wdata1 (wdata1), + .i_rreg0 (rreg0), + .i_rreg1 (rreg1), + .o_rdata0 (rdata0), + .o_rdata1 (rdata1), + .o_waddr (o_waddr), + .o_wdata (o_wdata), + .o_wen (o_wen), + .o_raddr (o_raddr), + .i_rdata (i_rdata)); + + serv_top + #(.RESET_PC (32'd0), + .PRE_REGISTER (PRE_REGISTER), + .RESET_STRATEGY (RESET_STRATEGY), + .WITH_CSR (WITH_CSR), + .MDU(1'b0)) + cpu + ( + .clk (clk), + .i_rst (i_rst), + .i_timer_irq (i_timer_irq), + .o_rf_rreq (rf_rreq), + .o_rf_wreq (rf_wreq), + .i_rf_ready (rf_ready), + .o_wreg0 (wreg0), + .o_wreg1 (wreg1), + .o_wen0 (wen0), + .o_wen1 (wen1), + .o_wdata0 (wdata0), + .o_wdata1 (wdata1), + .o_rreg0 (rreg0), + .o_rreg1 (rreg1), + .i_rdata0 (rdata0), + .i_rdata1 (rdata1), + + .o_ibus_adr (o_ibus_adr), + .o_ibus_cyc (o_ibus_cyc), + .i_ibus_rdt (i_ibus_rdt), + .i_ibus_ack (i_ibus_ack), + + .o_dbus_adr (o_dbus_adr), + .o_dbus_dat (o_dbus_dat), + .o_dbus_sel (o_dbus_sel), + .o_dbus_we (o_dbus_we), + .o_dbus_cyc (o_dbus_cyc), + .i_dbus_rdt (i_dbus_rdt), + .i_dbus_ack (i_dbus_ack), + + //Extension + .o_ext_funct3 (), + .i_ext_ready (1'b0), + .i_ext_rd (32'd0), + .o_ext_rs1 (), + .o_ext_rs2 (), + //MDU + .o_mdu_valid ()); + +endmodule +`default_nettype wire diff --git a/serv.core b/serv.core index a0cbe14..b11b594 100644 --- a/serv.core +++ b/serv.core @@ -21,6 +21,11 @@ filesets: - rtl/serv_rf_top.v file_type : verilogSource + openlane: + files: + - data/params.tcl : {file_type : tclSource} + - rtl/serv_synth_wrapper.v : {file_type : verilogSource} + targets: default: filesets : [core] @@ -43,6 +48,11 @@ targets: - "-Wall" toplevel : serv_rf_top + sky130: + default_tool : openlane + filesets : [core, openlane] + toplevel : serv_synth_wrapper + parameters: MDU: datatype : int From b15b5ed6525359882d39705ba1ad04cd4bd7be2e Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 25 Aug 2021 23:44:25 +0200 Subject: [PATCH 144/289] Add Github action to build with openlane+sky130 --- .github/workflows/openlane.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/openlane.yml diff --git a/.github/workflows/openlane.yml b/.github/workflows/openlane.yml new file mode 100644 index 0000000..8fcd4c9 --- /dev/null +++ b/.github/workflows/openlane.yml @@ -0,0 +1,14 @@ +name: build-openlane-sky130 +on: [push] +jobs: + build-openlane: + runs-on: ubuntu-latest + steps: + - name: Checkout subservient + uses: actions/checkout@v2 + - name: Build with Openlane + uses: librecores/ci-fusesoc-action@migrate-dockerized + with: + core: serv + target: sky130 + tool: openlane From b929c31c29ef9bcd292108855702eb87c5b2d42c Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 27 Sep 2021 22:10:19 +0200 Subject: [PATCH 145/289] Avoid printing directly in do_uart --- bench/servant_tb.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bench/servant_tb.cpp b/bench/servant_tb.cpp index b8f294a..bf4c4d2 100644 --- a/bench/servant_tb.cpp +++ b/bench/servant_tb.cpp @@ -46,7 +46,7 @@ void uart_init(uart_context_t *context, uint32_t baud_rate) { context->state = 0; } -void do_uart(uart_context_t *context, bool rx) { +bool do_uart(uart_context_t *context, bool rx) { if (context->state == 0) { if (rx) context->state++; @@ -74,10 +74,11 @@ void do_uart(uart_context_t *context, bool rx) { else { if (main_time > context->last_update) { context->last_update += context->baud_t; - putchar(context->ch); context->state=1; + return true; } } + return false; } int main(int argc, char **argv, char **env) @@ -133,11 +134,12 @@ int main(int argc, char **argv, char **env) top->eval(); if (dump) tfp->dump(main_time); - if (baud_rate) - do_uart(&uart_context, top->q); - else + if (baud_rate) { + if (do_uart(&uart_context, top->q)) + putchar(uart_context.ch); + } else { do_gpio(&gpio_context, top->q); - + } if (timeout && (main_time >= timeout)) { printf("Timeout: Exiting at time %lu\n", main_time); done = true; From 48e250ea5e6386ed0a43cb28845ef118b97a75b5 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 3 Oct 2021 22:48:20 +0200 Subject: [PATCH 146/289] Clean up serv_state interface --- rtl/serv_state.v | 71 ++++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/rtl/serv_state.v b/rtl/serv_state.v index cf2a181..03a20d3 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -5,17 +5,31 @@ module serv_state ( input wire i_clk, input wire i_rst, + //State input wire i_new_irq, - input wire i_dbus_ack, - output wire o_ibus_cyc, - input wire i_ibus_ack, - output wire o_rf_rreq, - output wire o_rf_wreq, - input wire i_rf_ready, - output wire o_rf_rd_en, - input wire i_cond_branch, - input wire i_bne_or_bge, input wire i_alu_cmp, + output wire o_init, + output wire o_cnt_en, + output wire o_cnt0to3, + output wire o_cnt12to31, + output wire o_cnt0, + output wire o_cnt1, + output wire o_cnt2, + output wire o_cnt3, + output wire o_cnt7, + output reg o_cnt_done, + output wire o_bufreg_en, + output wire o_ctrl_pc_en, + output reg o_ctrl_jump, + output wire o_ctrl_trap, + input wire i_ctrl_misalign, + input wire i_sh_done, + input wire i_sh_done_r, + output wire [1:0] o_mem_bytecnt, + input wire i_mem_misalign, + //Control + input wire i_bne_or_bge, + input wire i_cond_branch, input wire i_branch_op, input wire i_mem_op, input wire i_shift_op, @@ -23,30 +37,21 @@ module serv_state input wire i_slt_op, input wire i_e_op, input wire i_rd_op, - output wire o_init, - output wire o_cnt_en, - output wire o_cnt0, - output wire o_cnt0to3, - output wire o_cnt12to31, - output wire o_cnt1, - output wire o_cnt2, - output wire o_cnt3, - output wire o_cnt7, - output wire o_ctrl_pc_en, - output reg o_ctrl_jump, - output wire o_ctrl_trap, - input wire i_ctrl_misalign, - input wire i_sh_done, - input wire i_sh_done_r, - output wire o_dbus_cyc, - output wire [1:0] o_mem_bytecnt, - input wire i_mem_misalign, - output reg o_cnt_done, - output wire o_bufreg_en, //MDU - input wire i_mdu_op, - output wire o_mdu_valid, - input wire i_mdu_ready); + input wire i_mdu_op, + output wire o_mdu_valid, + //Extension + input wire i_mdu_ready, + //External + output wire o_dbus_cyc, + input wire i_dbus_ack, + output wire o_ibus_cyc, + input wire i_ibus_ack, + //RF Interface + output wire o_rf_rreq, + output wire o_rf_wreq, + input wire i_rf_ready, + output wire o_rf_rd_en); reg stage_two_req; reg init_done; @@ -97,7 +102,7 @@ generate end else begin //slt*, branch/jump, shift, load/store assign two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op; - + //valid signal for mdu turned-off assign o_mdu_valid = 1'b0; From 8843005407addaaea872662c5239efba878b1f01 Mon Sep 17 00:00:00 2001 From: Zeeshan Rafique <36025181+zeeshanrafique23@users.noreply.github.com> Date: Mon, 4 Oct 2021 02:15:54 +0500 Subject: [PATCH 147/289] updated vars declaration for modelsim (#63) --- rtl/serv_decode.v | 12 ++++++------ rtl/serv_immdec.v | 3 ++- rtl/serv_top.v | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index f4eb7cf..8a37c8b 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -77,6 +77,12 @@ generate wire co_mem_word; wire co_rd_alu_en; + //opcode + wire op_or_opimm = (!opcode[4] & opcode[2] & !opcode[0]); + + wire co_mem_op = !opcode[4] & !opcode[2] & !opcode[0]; + wire co_branch_op = opcode[4] & !opcode[2]; + if (MDU) begin assign co_mdu_op = ((opcode == 5'b01100) & imm25); assign co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01) & !co_mdu_op; @@ -93,12 +99,6 @@ generate assign co_ext_funct3 = funct3; endgenerate - //opcode - wire op_or_opimm = (!opcode[4] & opcode[2] & !opcode[0]); - - wire co_mem_op = !opcode[4] & !opcode[2] & !opcode[0]; - wire co_branch_op = opcode[4] & !opcode[2]; - //jal,branch = imm //jalr = rs1+imm //mem = rs1+imm diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v index 47dce08..8be5e45 100644 --- a/rtl/serv_immdec.v +++ b/rtl/serv_immdec.v @@ -28,7 +28,6 @@ module serv_immdec reg [4:0] imm24_20; reg [4:0] imm11_7; - assign o_imm = i_cnt_done ? signbit : i_ctrl[0] ? imm11_7[0] : imm24_20[0]; assign o_csr_imm = imm19_12_20[4]; wire signbit = imm31 & !i_csr_imm_en; @@ -90,5 +89,7 @@ module serv_immdec end end endgenerate + + assign o_imm = i_cnt_done ? signbit : i_ctrl[0] ? imm11_7[0] : imm24_20[0]; endmodule diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 1866fb5..20ad315 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -121,6 +121,8 @@ module serv_top wire bufreg_imm_en; wire bufreg_clr_lsb; wire bufreg_q; + wire [31:0] dbus_rdt; + wire dbus_ack; wire alu_sub; wire [1:0] alu_bool_op; @@ -566,8 +568,6 @@ module serv_top `endif generate - wire [31:0] dbus_rdt; - wire dbus_ack; if (MDU) begin assign dbus_rdt = i_ext_ready ? i_ext_rd:i_dbus_rdt; assign dbus_ack = i_dbus_ack | i_ext_ready; From 99f82af6eb6b7fe5dad682bd315349fcd37fa102 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 3 Oct 2021 23:28:45 +0200 Subject: [PATCH 148/289] Simplify optional MDU logic --- rtl/serv_bufreg.v | 6 +----- rtl/serv_decode.v | 33 +++++++-------------------------- rtl/serv_state.v | 32 ++++++++------------------------ 3 files changed, 16 insertions(+), 55 deletions(-) diff --git a/rtl/serv_bufreg.v b/rtl/serv_bufreg.v index dcf2354..15a194e 100644 --- a/rtl/serv_bufreg.v +++ b/rtl/serv_bufreg.v @@ -46,10 +46,6 @@ module serv_bufreg #( assign o_q = lsb[0] & i_en; assign o_dbus_adr = {data, 2'b00}; assign o_ext_rs1 = {o_dbus_adr[31:2],lsb}; - - generate - if (MDU) assign o_lsb = i_mdu_op ? 2'b00 : lsb; - else assign o_lsb = lsb; - endgenerate + assign o_lsb = (MDU & i_mdu_op) ? 2'b00 : lsb; endmodule diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 8a37c8b..bc8fed5 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -1,5 +1,5 @@ `default_nettype none -module serv_decode +module serv_decode #(parameter [0:0] PRE_REGISTER = 1, parameter [0:0] MDU = 0) ( @@ -69,35 +69,16 @@ module serv_decode reg imm25; reg imm30; -generate - wire co_mdu_op; - wire [2:0]co_ext_funct3; - wire co_shift_op; - wire co_slt_op; - wire co_mem_word; - wire co_rd_alu_en; - - //opcode wire op_or_opimm = (!opcode[4] & opcode[2] & !opcode[0]); + wire co_mdu_op = MDU & (opcode == 5'b01100) & imm25; + wire co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01) & !co_mdu_op; + wire co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01) & !co_mdu_op; wire co_mem_op = !opcode[4] & !opcode[2] & !opcode[0]; wire co_branch_op = opcode[4] & !opcode[2]; - - if (MDU) begin - assign co_mdu_op = ((opcode == 5'b01100) & imm25); - assign co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01) & !co_mdu_op; - assign co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01) & !co_mdu_op; - assign co_mem_word = co_mdu_op ? co_mdu_op :funct3[1]; - assign co_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4] & !co_mdu_op; - end else begin - assign co_mdu_op = 1'b0; - assign co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01); - assign co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01); - assign co_mem_word = funct3[1]; - assign co_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4]; - end - assign co_ext_funct3 = funct3; -endgenerate + wire co_mem_word = co_mdu_op | funct3[1]; + wire co_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4] & !co_mdu_op; + wire [2:0] co_ext_funct3 = funct3; //jal,branch = imm //jalr = rs1+imm diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 03a20d3..d036776 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -85,34 +85,18 @@ module serv_state //been calculated. wire take_branch = i_branch_op & (!i_cond_branch | (i_alu_cmp^i_bne_or_bge)); -generate - if (MDU) begin - //slt*, branch/jump, shift, load/store - assign two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op | i_mdu_op; + //slt*, branch/jump, shift, load/store, (optionally mdu ops) + assign two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op | (MDU & i_mdu_op); - //valid signal for mdu - assign o_mdu_valid = !o_cnt_en & init_done & i_mdu_op; + //valid signal for mdu + assign o_mdu_valid = MDU & !o_cnt_en & init_done & i_mdu_op; - //Prepare RF for writes when everything is ready to enter stage two - // and the first stage didn't cause a misalign exception - assign o_rf_wreq = !misalign_trap_sync & + //Prepare RF for writes when everything is ready to enter stage two + // and the first stage didn't cause a misalign exception + assign o_rf_wreq = !misalign_trap_sync & ((i_shift_op & (i_sh_done | !i_sh_right) & !o_cnt_en & init_done) | - (i_mem_op & i_dbus_ack) | i_mdu_ready | + (i_mem_op & i_dbus_ack) | (MDU & i_mdu_ready) | (stage_two_req & (i_slt_op | i_branch_op))); - end else begin - //slt*, branch/jump, shift, load/store - assign two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op; - - //valid signal for mdu turned-off - assign o_mdu_valid = 1'b0; - - //Prepare RF for writes when everything is ready to enter stage two - // and the first stage didn't cause a misalign exception - assign o_rf_wreq = !misalign_trap_sync & - ((i_shift_op & (i_sh_done | !i_sh_right) & !o_cnt_en & init_done) | - (i_mem_op & i_dbus_ack) | (stage_two_req & (i_slt_op | i_branch_op))); - end -endgenerate assign o_dbus_cyc = !o_cnt_en & init_done & i_mem_op & !i_mem_misalign; From e5c6e788204e19af4d012972027cf9ccd8c036ed Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 4 Oct 2021 23:38:33 +0200 Subject: [PATCH 149/289] Simplify MDU logic in serv_mem_if --- rtl/serv_decode.v | 2 +- rtl/serv_mem_if.v | 12 +----------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index bc8fed5..c388fd8 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -76,7 +76,7 @@ module serv_decode wire co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01) & !co_mdu_op; wire co_mem_op = !opcode[4] & !opcode[2] & !opcode[0]; wire co_branch_op = opcode[4] & !opcode[2]; - wire co_mem_word = co_mdu_op | funct3[1]; + wire co_mem_word = funct3[1]; wire co_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4] & !co_mdu_op; wire [2:0] co_ext_funct3 = funct3; diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index ee688ac..261fb8e 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -61,17 +61,7 @@ module serv_mem_if (i_bytecnt == 2'b00) | (i_half & !i_bytecnt[1]); - wire mem_rd = i_mem_op & (dat_valid ? dat_cur : signbit & i_signed); - - generate - if(MDU) begin - wire mdu_rd = i_mdu_op & dat_cur; - assign o_rd = mem_rd | mdu_rd; - end else begin - wire mdu_rd = 1'b0; - assign o_rd = mem_rd; - end - endgenerate + assign o_rd = (i_mem_op | i_mdu_op) & ((dat_valid|i_mdu_op) ? dat_cur : signbit & i_signed); assign o_wb_sel[3] = (i_lsb == 2'b11) | i_word | (i_half & i_lsb[1]); assign o_wb_sel[2] = (i_lsb == 2'b10) | i_word; From 9d3ebf3e96c52c81f853a35a231220d64c15bf79 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 5 Oct 2021 09:29:06 +0200 Subject: [PATCH 150/289] Replace mem_op with dedicated control signals --- rtl/serv_decode.v | 23 +++++++++++++++++++---- rtl/serv_mem_if.v | 3 +-- rtl/serv_rf_if.v | 7 ++++--- rtl/serv_state.v | 15 ++++++--------- rtl/serv_top.v | 22 +++++++++++++++------- 5 files changed, 45 insertions(+), 25 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index c388fd8..4a8da11 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -14,10 +14,11 @@ module serv_decode output reg o_e_op, output reg o_ebreak, output reg o_branch_op, - output reg o_mem_op, output reg o_shift_op, output reg o_slt_op, output reg o_rd_op, + output reg o_two_stage_op, + output reg o_dbus_en, //MDU output reg o_mdu_op, //Extension @@ -52,10 +53,13 @@ module serv_decode output reg [1:0] o_csr_source, output reg o_csr_d_sel, output reg o_csr_imm_en, + output reg o_mtval_pc, //To top output reg [3:0] o_immdec_ctrl, output reg [3:0] o_immdec_en, output reg o_op_b_source, + //To RF IF + output reg o_rd_mem_en, output reg o_rd_csr_en, output reg o_rd_alu_en); @@ -72,12 +76,17 @@ module serv_decode wire op_or_opimm = (!opcode[4] & opcode[2] & !opcode[0]); wire co_mdu_op = MDU & (opcode == 5'b01100) & imm25; + wire co_two_stage_op = + ~opcode[2] | (funct3[0] & ~funct3[1] & ~opcode[0] & ~opcode[4]) | + (funct3[1] & ~funct3[2] & ~opcode[0] & ~opcode[4]) | co_mdu_op; wire co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01) & !co_mdu_op; wire co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01) & !co_mdu_op; - wire co_mem_op = !opcode[4] & !opcode[2] & !opcode[0]; wire co_branch_op = opcode[4] & !opcode[2]; + wire co_dbus_en = ~opcode[2] & ~opcode[4]; + wire co_mtval_pc = opcode[4]; wire co_mem_word = funct3[1]; wire co_rd_alu_en = !opcode[0] & opcode[2] & !opcode[4] & !co_mdu_op; + wire co_rd_mem_en = (!opcode[2] & !opcode[0]) | co_mdu_op; wire [2:0] co_ext_funct3 = funct3; //jal,branch = imm @@ -243,10 +252,12 @@ module serv_decode o_sh_right = co_sh_right; o_bne_or_bge = co_bne_or_bge; o_cond_branch = co_cond_branch; + o_dbus_en = co_dbus_en; + o_mtval_pc = co_mtval_pc; + o_two_stage_op = co_two_stage_op; o_e_op = co_e_op; o_ebreak = co_ebreak; o_branch_op = co_branch_op; - o_mem_op = co_mem_op; o_shift_op = co_shift_op; o_slt_op = co_slt_op; o_rd_op = co_rd_op; @@ -282,6 +293,7 @@ module serv_decode o_op_b_source = co_op_b_source; o_rd_csr_en = co_rd_csr_en; o_rd_alu_en = co_rd_alu_en; + o_rd_mem_en = co_rd_mem_en; end end else begin @@ -304,8 +316,10 @@ module serv_decode o_cond_branch <= co_cond_branch; o_e_op <= co_e_op; o_ebreak <= co_ebreak; + o_two_stage_op <= co_two_stage_op; + o_dbus_en <= co_dbus_en; + o_mtval_pc <= co_mtval_pc; o_branch_op <= co_branch_op; - o_mem_op <= co_mem_op; o_shift_op <= co_shift_op; o_slt_op <= co_slt_op; o_rd_op <= co_rd_op; @@ -341,6 +355,7 @@ module serv_decode o_op_b_source <= co_op_b_source; o_rd_csr_en <= co_rd_csr_en; o_rd_alu_en <= co_rd_alu_en; + o_rd_mem_en <= co_rd_mem_en; end end diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index 261fb8e..bbe5715 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -14,7 +14,6 @@ module serv_mem_if output wire o_sh_done, output wire o_sh_done_r, //Control - input wire i_mem_op, input wire i_shift_op, input wire i_signed, input wire i_word, @@ -61,7 +60,7 @@ module serv_mem_if (i_bytecnt == 2'b00) | (i_half & !i_bytecnt[1]); - assign o_rd = (i_mem_op | i_mdu_op) & ((dat_valid|i_mdu_op) ? dat_cur : signbit & i_signed); + assign o_rd = (dat_valid|i_mdu_op) ? dat_cur : signbit & i_signed; assign o_wb_sel[3] = (i_lsb == 2'b11) | i_word | (i_half & i_lsb[1]); assign o_wb_sel[2] = (i_lsb == 2'b10) | i_word; diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index cff08bb..0c5dd67 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -18,7 +18,7 @@ module serv_rf_if input wire i_trap, input wire i_mret, input wire i_mepc, - input wire i_mem_op, + input wire i_mtval_pc, input wire i_bufreg_q, input wire i_bad_pc, output wire o_csr_pc, @@ -36,6 +36,7 @@ module serv_rf_if input wire i_csr_rd, input wire i_rd_csr_en, input wire i_mem_rd, + input wire i_rd_mem_en, //RS1 read port input wire [4:0] i_rs1_raddr, @@ -56,9 +57,9 @@ module serv_rf_if wire rd = (i_ctrl_rd ) | (i_alu_rd & i_rd_alu_en) | (i_csr_rd & i_rd_csr_en) | - (i_mem_rd); + (i_mem_rd & i_rd_mem_en); - wire mtval = i_mem_op ? i_bufreg_q : i_bad_pc; + wire mtval = i_mtval_pc ? i_bad_pc : i_bufreg_q; assign o_wdata0 = i_trap ? mtval : rd; assign o_wdata1 = i_trap ? i_mepc : i_csr; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index d036776..5dc3ced 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -30,8 +30,9 @@ module serv_state //Control input wire i_bne_or_bge, input wire i_cond_branch, + input wire i_dbus_en, + input wire i_two_stage_op, input wire i_branch_op, - input wire i_mem_op, input wire i_shift_op, input wire i_sh_right, input wire i_slt_op, @@ -56,7 +57,6 @@ module serv_state reg stage_two_req; reg init_done; wire misalign_trap_sync; - wire two_stage_op; reg [4:2] o_cnt; reg [3:0] o_cnt_r; @@ -85,9 +85,6 @@ module serv_state //been calculated. wire take_branch = i_branch_op & (!i_cond_branch | (i_alu_cmp^i_bne_or_bge)); - //slt*, branch/jump, shift, load/store, (optionally mdu ops) - assign two_stage_op = i_slt_op | i_mem_op | i_branch_op | i_shift_op | (MDU & i_mdu_op); - //valid signal for mdu assign o_mdu_valid = MDU & !o_cnt_en & init_done & i_mdu_op; @@ -95,10 +92,10 @@ module serv_state // and the first stage didn't cause a misalign exception assign o_rf_wreq = !misalign_trap_sync & ((i_shift_op & (i_sh_done | !i_sh_right) & !o_cnt_en & init_done) | - (i_mem_op & i_dbus_ack) | (MDU & i_mdu_ready) | + i_dbus_ack | (MDU & i_mdu_ready) | (stage_two_req & (i_slt_op | i_branch_op))); - assign o_dbus_cyc = !o_cnt_en & init_done & i_mem_op & !i_mem_misalign; + assign o_dbus_cyc = !o_cnt_en & init_done & i_dbus_en & !i_mem_misalign; //Prepare RF for reads when a new instruction is fetched // or when stage one caused an exception (rreq implies a write request too) @@ -121,7 +118,7 @@ module serv_state assign o_ibus_cyc = ibus_cyc & !i_rst; - assign o_init = two_stage_op & !i_new_irq & !init_done; + assign o_init = i_two_stage_op & !i_new_irq & !init_done; always @(posedge i_clk) begin //ibus_cyc changes on three conditions. @@ -190,7 +187,7 @@ module serv_state //trap_pending is only guaranteed to have correct value during the // last cycle of the init stage wire trap_pending = WITH_CSR & ((take_branch & i_ctrl_misalign) | - (i_mem_op & i_mem_misalign)); + (i_dbus_en & i_mem_misalign)); always @(posedge i_clk) begin if (o_cnt_done) diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 20ad315..e6e9b16 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -78,10 +78,10 @@ module serv_top wire sh_right; wire bne_or_bge; wire cond_branch; + wire two_stage_op; wire e_op; wire ebreak; wire branch_op; - wire mem_op; wire shift_op; wire slt_op; wire rd_op; @@ -89,10 +89,12 @@ module serv_top wire rd_alu_en; wire rd_csr_en; + wire rd_mem_en; wire ctrl_rd; wire alu_rd; wire mem_rd; wire csr_rd; + wire mtval_pc; wire ctrl_pc_en; wire jump; @@ -160,6 +162,7 @@ module serv_top wire csr_imm_en; wire csr_in; wire rf_csr_out; + wire dbus_en; wire new_irq; @@ -200,8 +203,9 @@ module serv_top //Control .i_bne_or_bge (bne_or_bge), .i_cond_branch (cond_branch), + .i_dbus_en (dbus_en), + .i_two_stage_op (two_stage_op), .i_branch_op (branch_op), - .i_mem_op (mem_op), .i_shift_op (shift_op), .i_sh_right (sh_right), .i_slt_op (slt_op), @@ -235,15 +239,16 @@ module serv_top //To state .o_bne_or_bge (bne_or_bge), .o_cond_branch (cond_branch), + .o_dbus_en (dbus_en), .o_e_op (e_op), .o_ebreak (ebreak), .o_branch_op (branch_op), - .o_mem_op (mem_op), .o_shift_op (shift_op), .o_slt_op (slt_op), .o_rd_op (rd_op), .o_sh_right (sh_right), .o_mdu_op (mdu_op), + .o_two_stage_op (two_stage_op), //Extension .o_ext_funct3 (o_ext_funct3), @@ -278,9 +283,12 @@ module serv_top .o_csr_source (csr_source), .o_csr_d_sel (csr_d_sel), .o_csr_imm_en (csr_imm_en), + .o_mtval_pc (mtval_pc ), //To top .o_immdec_ctrl (immdec_ctrl), .o_immdec_en (immdec_en), + //To RF IF + .o_rd_mem_en (rd_mem_en), .o_rd_csr_en (rd_csr_en), .o_rd_alu_en (rd_alu_en)); @@ -396,7 +404,7 @@ module serv_top .i_trap (trap), .i_mret (mret), .i_mepc (o_ibus_adr[0]), - .i_mem_op (mem_op), + .i_mtval_pc (mtval_pc), .i_bufreg_q (bufreg_q), .i_bad_pc (bad_pc), .o_csr_pc (csr_pc), @@ -413,6 +421,7 @@ module serv_top .i_csr_rd (csr_rd), .i_rd_csr_en (rd_csr_en), .i_mem_rd (mem_rd), + .i_rd_mem_en (rd_mem_en), //RS1 read port .i_rs1_raddr (rs1_addr), @@ -441,7 +450,6 @@ module serv_top .o_sh_done_r (mem_sh_done_r), //Control .i_mdu_op (mdu_op), - .i_mem_op (mem_op), .i_shift_op (shift_op), .i_signed (mem_signed), .i_word (mem_word), @@ -470,7 +478,7 @@ module serv_top .i_cnt3 (cnt3), .i_cnt7 (cnt7), .i_cnt_done (cnt_done), - .i_mem_op (mem_op), + .i_mem_op (!mtval_pc), .i_mtip (i_timer_irq), .i_trap (trap), .o_new_irq (new_irq), @@ -501,7 +509,7 @@ module serv_top `ifdef RISCV_FORMAL reg [31:0] pc = RESET_PC; - wire rs_en = (branch_op|mem_op|shift_op|slt_op) ? init : ctrl_pc_en; + wire rs_en = two_stage_op ? init : ctrl_pc_en; always @(posedge clk) begin /* End of instruction */ From 9c4bdd4bfe98e394189bbdd5911c7d008e67a2d5 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 8 Oct 2021 22:15:55 +0200 Subject: [PATCH 151/289] Simplify branch_op/slt_op signals --- rtl/serv_decode.v | 10 +++++----- rtl/serv_state.v | 8 ++++---- rtl/serv_top.v | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 4a8da11..7b9a9fd 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -15,7 +15,7 @@ module serv_decode output reg o_ebreak, output reg o_branch_op, output reg o_shift_op, - output reg o_slt_op, + output reg o_slt_or_branch, output reg o_rd_op, output reg o_two_stage_op, output reg o_dbus_en, @@ -80,8 +80,8 @@ module serv_decode ~opcode[2] | (funct3[0] & ~funct3[1] & ~opcode[0] & ~opcode[4]) | (funct3[1] & ~funct3[2] & ~opcode[0] & ~opcode[4]) | co_mdu_op; wire co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01) & !co_mdu_op; - wire co_slt_op = op_or_opimm & (funct3[2:1] == 2'b01) & !co_mdu_op; - wire co_branch_op = opcode[4] & !opcode[2]; + wire co_slt_or_branch = (opcode[4] | (funct3[1] & opcode[2]) | (imm30 & opcode[2] & opcode[3] & ~funct3[2])) & !co_mdu_op; + wire co_branch_op = opcode[4]; wire co_dbus_en = ~opcode[2] & ~opcode[4]; wire co_mtval_pc = opcode[4]; wire co_mem_word = funct3[1]; @@ -259,7 +259,7 @@ module serv_decode o_ebreak = co_ebreak; o_branch_op = co_branch_op; o_shift_op = co_shift_op; - o_slt_op = co_slt_op; + o_slt_or_branch = co_slt_or_branch; o_rd_op = co_rd_op; o_mdu_op = co_mdu_op; o_ext_funct3 = co_ext_funct3; @@ -321,7 +321,7 @@ module serv_decode o_mtval_pc <= co_mtval_pc; o_branch_op <= co_branch_op; o_shift_op <= co_shift_op; - o_slt_op <= co_slt_op; + o_slt_or_branch <= co_slt_or_branch; o_rd_op <= co_rd_op; o_mdu_op <= co_mdu_op; o_ext_funct3 <= co_ext_funct3; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 5dc3ced..5f1b336 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -35,7 +35,7 @@ module serv_state input wire i_branch_op, input wire i_shift_op, input wire i_sh_right, - input wire i_slt_op, + input wire i_slt_or_branch, input wire i_e_op, input wire i_rd_op, //MDU @@ -90,10 +90,10 @@ module serv_state //Prepare RF for writes when everything is ready to enter stage two // and the first stage didn't cause a misalign exception - assign o_rf_wreq = !misalign_trap_sync & - ((i_shift_op & (i_sh_done | !i_sh_right) & !o_cnt_en & init_done) | + assign o_rf_wreq = !misalign_trap_sync & !o_cnt_en & init_done & + ((i_shift_op & (i_sh_done | !i_sh_right)) | i_dbus_ack | (MDU & i_mdu_ready) | - (stage_two_req & (i_slt_op | i_branch_op))); + i_slt_or_branch); assign o_dbus_cyc = !o_cnt_en & init_done & i_dbus_en & !i_mem_misalign; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index e6e9b16..8ed908a 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -83,7 +83,7 @@ module serv_top wire ebreak; wire branch_op; wire shift_op; - wire slt_op; + wire slt_or_branch; wire rd_op; wire mdu_op; @@ -208,7 +208,7 @@ module serv_top .i_branch_op (branch_op), .i_shift_op (shift_op), .i_sh_right (sh_right), - .i_slt_op (slt_op), + .i_slt_or_branch (slt_or_branch), .i_e_op (e_op), .i_rd_op (rd_op), //MDU @@ -244,7 +244,7 @@ module serv_top .o_ebreak (ebreak), .o_branch_op (branch_op), .o_shift_op (shift_op), - .o_slt_op (slt_op), + .o_slt_or_branch (slt_or_branch), .o_rd_op (rd_op), .o_sh_right (sh_right), .o_mdu_op (mdu_op), From 28953fec4c02314f17f78c5666915a43851995fe Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Fri, 8 Oct 2021 22:42:02 +0200 Subject: [PATCH 152/289] Simplify shift_op signal --- rtl/serv_decode.v | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 7b9a9fd..de6deed 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -73,13 +73,12 @@ module serv_decode reg imm25; reg imm30; - wire op_or_opimm = (!opcode[4] & opcode[2] & !opcode[0]); wire co_mdu_op = MDU & (opcode == 5'b01100) & imm25; wire co_two_stage_op = ~opcode[2] | (funct3[0] & ~funct3[1] & ~opcode[0] & ~opcode[4]) | (funct3[1] & ~funct3[2] & ~opcode[0] & ~opcode[4]) | co_mdu_op; - wire co_shift_op = op_or_opimm & (funct3[1:0] == 2'b01) & !co_mdu_op; + wire co_shift_op = (opcode[2] & ~funct3[1]) & !co_mdu_op; wire co_slt_or_branch = (opcode[4] | (funct3[1] & opcode[2]) | (imm30 & opcode[2] & opcode[3] & ~funct3[2])) & !co_mdu_op; wire co_branch_op = opcode[4]; wire co_dbus_en = ~opcode[2] & ~opcode[4]; From 7765567cf1f717b7eccadca9c85b5e82e5f21616 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 29 Dec 2021 00:17:00 +0100 Subject: [PATCH 153/289] Add missing gate on mem_rd with CSR disabled --- rtl/serv_rf_if.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index 0c5dd67..cf23790 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -122,7 +122,7 @@ module serv_rf_if end else begin wire rd = (i_ctrl_rd ) | (i_alu_rd & i_rd_alu_en) | - (i_mem_rd); + (i_mem_rd & i_rd_mem_en); assign o_wdata0 = rd; assign o_wdata1 = 1'b0; From 0ab7176d3b155a4390c70146a046fdc0c0cd7b44 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 1 Jan 2022 16:35:15 +0100 Subject: [PATCH 154/289] Fix testbench indentation --- bench/servant_tb.cpp | 119 +++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 61 deletions(-) diff --git a/bench/servant_tb.cpp b/bench/servant_tb.cpp index bf4c4d2..1eb6d39 100644 --- a/bench/servant_tb.cpp +++ b/bench/servant_tb.cpp @@ -19,8 +19,8 @@ double sc_time_stamp () { // Called by $time in Verilog void INThandler(int signal) { - printf("\nCaught ctrl-c\n"); - done = true; + printf("\nCaught ctrl-c\n"); + done = true; } typedef struct { @@ -83,73 +83,70 @@ bool do_uart(uart_context_t *context, bool rx) { int main(int argc, char **argv, char **env) { - vluint64_t sample_time = 0; - uint32_t insn = 0; - uint32_t ex_pc = 0; - int baud_rate = 0; + int baud_rate = 0; - gpio_context_t gpio_context; - uart_context_t uart_context; - Verilated::commandArgs(argc, argv); + gpio_context_t gpio_context; + uart_context_t uart_context; + Verilated::commandArgs(argc, argv); - Vservant_sim* top = new Vservant_sim; + Vservant_sim* top = new Vservant_sim; - const char *arg = Verilated::commandArgsPlusMatch("uart_baudrate="); - if (arg[0]) { - baud_rate = atoi(arg+15); - if (baud_rate) { - uart_init(&uart_context, baud_rate); - } - } + const char *arg = Verilated::commandArgsPlusMatch("uart_baudrate="); + if (arg[0]) { + baud_rate = atoi(arg+15); + if (baud_rate) { + uart_init(&uart_context, baud_rate); + } + } - VerilatedVcdC * tfp = 0; - const char *vcd = Verilated::commandArgsPlusMatch("vcd="); - if (vcd[0]) { - Verilated::traceEverOn(true); - tfp = new VerilatedVcdC; - top->trace (tfp, 99); - tfp->open ("trace.vcd"); - } + VerilatedVcdC * tfp = 0; + const char *vcd = Verilated::commandArgsPlusMatch("vcd="); + if (vcd[0]) { + Verilated::traceEverOn(true); + tfp = new VerilatedVcdC; + top->trace (tfp, 99); + tfp->open ("trace.vcd"); + } - signal(SIGINT, INThandler); + signal(SIGINT, INThandler); - vluint64_t timeout = 0; - const char *arg_timeout = Verilated::commandArgsPlusMatch("timeout="); - if (arg_timeout[0]) - timeout = atoi(arg_timeout+9); + vluint64_t timeout = 0; + const char *arg_timeout = Verilated::commandArgsPlusMatch("timeout="); + if (arg_timeout[0]) + timeout = atoi(arg_timeout+9); - vluint64_t vcd_start = 0; - const char *arg_vcd_start = Verilated::commandArgsPlusMatch("vcd_start="); - if (arg_vcd_start[0]) - vcd_start = atoi(arg_vcd_start+11); + vluint64_t vcd_start = 0; + const char *arg_vcd_start = Verilated::commandArgsPlusMatch("vcd_start="); + if (arg_vcd_start[0]) + vcd_start = atoi(arg_vcd_start+11); - bool dump = false; - top->wb_clk = 1; - bool q = top->q; - while (!(done || Verilated::gotFinish())) { - if (tfp && !dump && (main_time > vcd_start)) { - dump = true; - } - top->wb_rst = main_time < 100; - top->eval(); - if (dump) - tfp->dump(main_time); - if (baud_rate) { - if (do_uart(&uart_context, top->q)) - putchar(uart_context.ch); - } else { - do_gpio(&gpio_context, top->q); - } - if (timeout && (main_time >= timeout)) { - printf("Timeout: Exiting at time %lu\n", main_time); - done = true; - } + bool dump = false; + top->wb_clk = 1; + bool q = top->q; + while (!(done || Verilated::gotFinish())) { + if (tfp && !dump && (main_time > vcd_start)) { + dump = true; + } + top->wb_rst = main_time < 100; + top->eval(); + if (dump) + tfp->dump(main_time); + if (baud_rate) { + if (do_uart(&uart_context, top->q)) + putchar(uart_context.ch); + } else { + do_gpio(&gpio_context, top->q); + } + if (timeout && (main_time >= timeout)) { + printf("Timeout: Exiting at time %lu\n", main_time); + done = true; + } - top->wb_clk = !top->wb_clk; - main_time+=31.25; + top->wb_clk = !top->wb_clk; + main_time+=31.25; - } - if (tfp) - tfp->close(); - exit(0); + } + if (tfp) + tfp->close(); + exit(0); } From 07193819972aed16e8474913dbbbee5e01570e58 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 1 Jan 2022 17:15:00 +0100 Subject: [PATCH 155/289] Add ViDBo support --- bench/servant_tb_vidbo.cpp | 163 +++++++++++++++++++++++++++++++++++++ servant.core | 4 +- 2 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 bench/servant_tb_vidbo.cpp diff --git a/bench/servant_tb_vidbo.cpp b/bench/servant_tb_vidbo.cpp new file mode 100644 index 0000000..d0a8322 --- /dev/null +++ b/bench/servant_tb_vidbo.cpp @@ -0,0 +1,163 @@ +#include +#include + +#include "verilated_vcd_c.h" +#include "Vservant_sim.h" + +#include "vidbo.h" + +using namespace std; + +static bool done; + +vluint64_t main_time = 0; // Current simulation time +// This is a 64-bit integer to reduce wrap over issues and +// allow modulus. You can also use a double, if you wish. + +double sc_time_stamp () { // Called by $time in Verilog + return main_time; // converts to double, to match + // what SystemC does +} + +void INThandler(int signal) +{ + printf("\nCaught ctrl-c\n"); + done = true; +} + +typedef struct { + bool last_value; +} gpio_context_t; + +void do_gpio(gpio_context_t *context, bool gpio) { + if (context->last_value != gpio) { + context->last_value = gpio; + printf("%lu output q is %s\n", main_time, gpio ? "ON" : "OFF"); + } +} + +typedef struct { + uint8_t state; + char ch; + uint32_t baud_t; + vluint64_t last_update; +} uart_context_t; + +void uart_init(uart_context_t *context, uint32_t baud_rate) { + context->baud_t = 1000*1000*1000/baud_rate; + context->state = 0; +} + +bool do_uart(uart_context_t *context, bool rx) { + if (context->state == 0) { + if (rx) + context->state++; + } + else if (context->state == 1) { + if (!rx) { + context->last_update = main_time + context->baud_t/2; + context->state++; + } + } + else if(context->state == 2) { + if (main_time > context->last_update) { + context->last_update += context->baud_t; + context->ch = 0; + context->state++; + } + } + else if (context->state < 11) { + if (main_time > context->last_update) { + context->last_update += context->baud_t; + context->ch |= rx << (context->state-3); + context->state++; + } + } + else { + if (main_time > context->last_update) { + context->last_update += context->baud_t; + context->state=1; + return true; + } + } + return false; +} + +int main(int argc, char **argv, char **env) +{ + int baud_rate = 0; + + gpio_context_t gpio_context; + uart_context_t uart_context; + + vidbo_context_t vidbo_context; + vidbo_init(&vidbo_context, 8081); + int poll_vidbo = 0; + + Verilated::commandArgs(argc, argv); + + Vservant_sim* top = new Vservant_sim; + + const char *arg = Verilated::commandArgsPlusMatch("uart_baudrate="); + if (arg[0]) { + baud_rate = atoi(arg+15); + if (baud_rate) { + uart_init(&uart_context, baud_rate); + } + } + + VerilatedVcdC * tfp = 0; + const char *vcd = Verilated::commandArgsPlusMatch("vcd="); + if (vcd[0]) { + Verilated::traceEverOn(true); + tfp = new VerilatedVcdC; + top->trace (tfp, 99); + tfp->open ("trace.vcd"); + } + + signal(SIGINT, INThandler); + + vluint64_t timeout = 0; + const char *arg_timeout = Verilated::commandArgsPlusMatch("timeout="); + if (arg_timeout[0]) + timeout = atoi(arg_timeout+9); + + vluint64_t vcd_start = 0; + const char *arg_vcd_start = Verilated::commandArgsPlusMatch("vcd_start="); + if (arg_vcd_start[0]) + vcd_start = atoi(arg_vcd_start+11); + + bool dump = false; + top->wb_clk = 1; + bool q = top->q; + while (!(done || Verilated::gotFinish())) { + if (tfp && !dump && (main_time > vcd_start)) { + dump = true; + } + top->wb_rst = main_time < 100; + top->eval(); + if (dump) + tfp->dump(main_time); + if (baud_rate) { + if (do_uart(&uart_context, top->q)) + vidbo_send(&vidbo_context, main_time, "serial", "uart", uart_context.ch); + } + if (top->q != gpio_context.last_value) { + vidbo_send(&vidbo_context, main_time, "gpio", "LD0", (top->q) & 0x1); + gpio_context.last_value = top->q; + } + if (timeout && (main_time >= timeout)) { + printf("Timeout: Exiting at time %lu\n", main_time); + done = true; + } + + if (!(poll_vidbo++ % 100000)) vidbo_recv(&vidbo_context, 0); + + top->wb_clk = !top->wb_clk; + main_time+=31.25; + + } + if (tfp) + tfp->close(); + exit(0); +} diff --git a/servant.core b/servant.core index 1884773..2df904e 100644 --- a/servant.core +++ b/servant.core @@ -25,8 +25,10 @@ filesets: verilator_tb: files: - bench/servant_sim.v - - bench/servant_tb.cpp : {file_type : cppSource} + - "vidbo? (bench/servant_tb_vidbo.cpp)" : {file_type : cppSource} + - "!vidbo? (bench/servant_tb.cpp)" : {file_type : cppSource} file_type : verilogSource + depend : ["vidbo? (vidbo)"] soc: files: From f04a510393585f0a68280c912ae568b2dccc11cf Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 1 Jan 2022 22:43:43 +0100 Subject: [PATCH 156/289] Remove unused parameter from serv_mem_if --- rtl/serv_mem_if.v | 3 +-- rtl/serv_top.v | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index bbe5715..6c5d260 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -1,7 +1,6 @@ `default_nettype none module serv_mem_if - #(parameter WITH_CSR = 1, - parameter [0:0] MDU = 0) + #(parameter [0:0] WITH_CSR = 1) ( input wire i_clk, //State diff --git a/rtl/serv_top.v b/rtl/serv_top.v index 8ed908a..73bcbdb 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -434,8 +434,7 @@ module serv_top .o_csr (rf_csr_out)); serv_mem_if - #(.WITH_CSR (WITH_CSR), - .MDU(MDU)) + #(.WITH_CSR (WITH_CSR)) mem_if ( .i_clk (clk), From d910becd7f2210d575384dc688f2b4b79d16f858 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 2 Jan 2022 14:08:54 +0100 Subject: [PATCH 157/289] Move dbus_dat/rs2/shamt storage to bufreg2 --- doc/index.rst | 17 +++++--- doc/serv_bufreg2.png | Bin 0 -> 10257 bytes doc/serv_bufreg2_int.png | Bin 0 -> 50431 bytes doc/serv_dataflow.png | Bin 45471 -> 43488 bytes doc/serv_mem_if.png | Bin 10528 -> 8462 bytes doc/serv_mem_if_int.png | Bin 68244 -> 23528 bytes rtl/serv_bufreg2.v | 65 ++++++++++++++++++++++++++++++ rtl/serv_mem_if.v | 84 ++++++++++----------------------------- rtl/serv_top.v | 79 ++++++++++++++++++++++-------------- serv.core | 1 + 10 files changed, 148 insertions(+), 98 deletions(-) create mode 100644 doc/serv_bufreg2.png create mode 100644 doc/serv_bufreg2_int.png create mode 100644 rtl/serv_bufreg2.v diff --git a/doc/index.rst b/doc/index.rst index fe045fd..9cccede 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -53,6 +53,15 @@ For two-stage operations, serv_bufreg holds data between stages. This data can b .. image:: serv_bufreg_int.png +serv_bufreg2 +^^^^^^^^^^^^ + +.. image:: serv_bufreg2.png + +serv_bugreg2 is a 32-bit buffer register with some special features. It is used for shift operations to store the shift amount. It's used in load and store operations to store the data to be written or be read from the data bus, and it holds rs2 for the SERV extension interface. For shift and store operations, the register is shifted in from MSB when dat_en is asserted, while for loads and uses of the extension interface, the whole data word is written to when the i_load signal is asserted. Once the data is in the buffer, it is used differently depending on the operation. For stores and the extension interface the whole buffer is directly connected to the data bus as a 32-bit register. For load operations, the data is fed out serially once it has been fetched from the data bus. To better support load operations of varying sizes the buffer contains logic for reading out data serially from any of the byte LSBs of the 32-bit word. Finally, in shift mode, the 6 LSB of the register is used as a downcounter that is initialized during the init stage and then counts the remaining number of steps to shift the data and signals using sh_done and sh_done_r when finished. + +.. image:: serv_bufreg2_int.png + serv_csr ^^^^^^^^ @@ -101,16 +110,14 @@ serv_mem_if .. image:: serv_mem_if.png -serv_mem_if prepares the data to be sent out on the dbus during store operations and serializes the incoming data during loads +serv_mem_if contains the control logic for preparing the data to be sent out on the dbus during store operations and sign-extends the incoming data from bufreg2 during loads -The memory interface is centered around four byte-wide shift registers connected in series. During store operations, the `dat_en` signal is asserted long enough to shift in the data from rs2 to the right place in the shift registers and the parallel output of the shift registers is then presented to the data bus as a 32-bit word together with a byte mask. The `Data bus byte mask`_ table summarizes the logic for when the individual byte select signals are asserted depending on the two LSB of the data address together with the size (byte, halfword, word) of the write operation. +The memory interface is centered around four serially connected byte-wide shift registers located in serv_bufreg2. During store operations, the `o_byte_valid` signal is asserted long enough to shift in the data from rs2 to the right place in the shift registers. The `Data bus byte mask`_ table summarizes the logic for when the individual byte select signals are asserted depending on the two LSB of the data address together with the size (byte, halfword, word) of the write operation. -During load operations, the data from the bus is latched into the shift registers. `dat_en` is again asserted to shift out data from the registers. `i_lsb` decides from which byte stage of the shift register to tap the data, depending on the alignment of the received data. The `dat_valid` signal makes sure to only present valid data to `o_rd` and otherwise fill in with zeros or sign extension. +During load operations, the data from the bus is read from serv_bufreg2. `dat_en` is again asserted to shift out data from the registers. `i_lsb` decides from which byte stage of the shift register to tap the data, depending on the alignment of the received data. The `dat_valid` signal makes sure to only present valid data to `o_rd` and otherwise fill in with zeros or sign extension. When SERV is built with `WITH_CSR`, there is also logic to detect misaligned accesses which asserts the o_misalign flag to the core. -The shift register used for stores and loads are also used to keep track of the number of steps to shift for left/right shift operations. In this mode, the six LSB of the register is loaded with the shift amount during the init stage and the used as a down counter which raises o_sh_done and o_sh_done_r when the number of shift steps have been completed. - .. image:: serv_mem_if_int.png .. _`Data bus byte mask`: diff --git a/doc/serv_bufreg2.png b/doc/serv_bufreg2.png new file mode 100644 index 0000000000000000000000000000000000000000..c3cd073b3a6175b973f08cc0925b088487cbccce GIT binary patch literal 10257 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 V}WGHG-bjJpdeYJyl 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 literal 0 HcmV?d00001 diff --git a/doc/serv_dataflow.png b/doc/serv_dataflow.png index 6bf1237ee09ca9356c7c5772a2ca86156ea151c9..3e5abe99fdbc0510c62919cbd0d8fb427b1fc700 100644 GIT binary patch literal 43488 zcmdq|cUY5a6F!P!MO`Y2y@5)w3nU>VktRtt=1d@Y*ZKRbYZ2jnpZ?6;Gjq@6Fx8zfYsS(U z1_lPRh%Pv~fx#rAfx(1N)24za%nAnEYz5tH1!F=H=5Qyt75IQ!TUbNk-rzN8&lk(Xez*0PNGv$P{ydq# zNNy3z4g3AxpT`aT(*R*%1v;$rghJQU@L#t0HzB5vkR?^gHSP9u1c~M z1?%mn<$AkPe-9GsFZweG6)bc!^!Ff04`@IjLT-(xT0^-kjSIybh7VRVB~*nrB!Gi- z@fKNW5kff$AI27G5Ckj-76e*Yk#Vj8bO8$=DDh`nNmyQNtP)9)*tly2$Ph*V!XFu8 zLqK|lsY7ro4^NT8HB6?YQ9Te+5m_q1g8{^00cdd`8wT~F;)19&G@3+_SbHh;lbgdZ zEV#D_77%Jh4e%s#h}IgMM&BotV8gKvW4SWP?m;4cFnEN~cya@*8Q}Kt9_S#23z0x@ zg}T9cWEfS+4-CUeVg52Pn&JuGYcSx0DgdM7ITRb2lulKKGPH0}D9&4fw*f;@*m6by z_!n&@LSsY7RGb9-;i;<-@-VQ>VTW211RgJ+BY5gp|W#1I1yvGRv%IB+hCXhmfbv2c~p z28a(H7b-y5_%pz7HX16Hp=RK@XjeXhL1VgEdmsWC{_Zj?)R{+DBEY7-6~O{1LLS5q z2?ZVaPC-fmgGm!g0toaFZwj44a#y>{X@mfjn}nf2+2B>qPyt!Q#$gx;Yq}cmg~e&C zx$4kRgqVT#;L^k7Fj^R&MGJHD2cn6$Qh{}9B^0Vazh05XlS*<%Yxtf)G**DvhC>p$ zut_jEKPV8Xz_>F=8Yc`wDGSC>fka~HTBuvFzZFC5=7}J9aT!c(P#|~=MrFH7xKIR2 zKQ!MNoTdKyJtRv zwG_`n;ZPwMvCzhyBo&4-FsM*>I9=sog;cOO2=A~kIoU>xWWu=KY_AY6OsHH1l`Bnap8Ky zoIGUSatYlH?nMIq6mp6LN|velQoe|zUp$-WZ6(6PL_!K&z!6eJ0)|%ViUjk3OO^vc zRJ#W%@QM(m!kZP!hSFi4u4E{ZJQ$fOZ&>7Rm~S6Hp2d8k+=n zrSdo|4-dK=Yl91>0&JD5aqeOM+#n}1jtM0qLN#(FHUy3J4D$|i3+8iz(F%5`8xxE} zgA*~{7#`Eji;ERHkB&p%iSQ?R8lrLz-E?Cb`2p`+LwDnlr< zwsBK~l`H9CRBOGUh|pYr7pjaVRxHWW)B9I#FRzQbiuM2xqwBFcjBDw4Ctjf4&2c_G~yEPNQriG`bmf%bm-lNuXjVHp~@GW>BoiDlvrt7vr&F zYik07?;>`=3p`vXavFd*3>2^O@^?~E5d=0*>q(G{FkBBSe;bts8%9=(afo1wjo1d` z5-4TiF&-|?))Z8*Kb>NYR1k=sbWxZq7=rI*?XJZ+$)I}e(vqDNa3xKpWoxApiX1A$ z%Zct`I65Aorn}MkWDyjh!E%G0U5IKlgUa>}5>ef~yj55{)C#4)M{kS<zA*@_%LS3w!$P8;B`9dWoScK(SQ?xi%FyG3FL=zFP!PY1R9*6X% z%W1?=ibPIfs9;Pf)gKlL%Li{bMhOS1)82;X3B{Vop7_8I_6GPuT<;gq(RWO7#Q%h$C z`C~8|KG%w?q{`7@1Zyi#G?hVhg$k6aK(Usq2qBBvY7eG{!W9U47`eOHUyM@AG_FEH zP>?qw$jO_C4-OXF2;`muScn@5hjF2Kh|yeuTuxAU*@V%>O5m1+>hayiMv8KVW8@Th z2qplk^;gLPNFG7np?YI0lE7V+^k647+SSR~narkn!9{XwJ{Fi0JX7i^ zI~lLC(K1;`h7zHoNWf8I_-qda(JfHqq$Rrqs-3J@ETxneK!ZtfDurjLH?X*PJPG(b zL2SI63zHM#A_!r-0PV&&-4kiIT1d8J9 zlf!`jl+4lV98vSlMpAjMrheC zJSxtOL_)K?tOE(wf!+vBAj?C+BWn2+tTI3)MALYBcnVPZE1A|T8&5ixCV(+{Vmg6N zcV&P#L2`teaiI7k3-TCNF^1Ca(AJJNa5sQ4h5w* z_;j9vg7)-h2Qr+1`ul5CT8=YPjt&;<{R0->g(!jJtRw+i3eJm$N8s32DlC->r@IHE zxq9hAsL<}-UQXg5sYv7DPho}qo(&O%pm@+pt`aAD7?Ljw5QNDX=wLUXym*&jSpb)h zLCIMpPnEmpxI--Q6uWvtkz^mSNP2(XgS5Tqv(hbM{xlwoL@{?L>{YqZ)$ zfQAQ!p^#7}2!rrw0DE|D02yY5@Z>w=5Q1Q^B=E?_Ln|S{{9WaIiaSM!l2M$rp58JF zQiR1*$u7BW_gcIaS9-QbYgi&xI0i2l8W<8rhY5)O*f15G8i-Yed4W4aGlh6q7*~Pwau;Ky zD2~)E*xL)OKRB8cd@zyzY86a`cMlVb@WC#Dp)57qMZ#wS0~D%36D1VAYsP|l0o7Fp zdSgA=I4da`>^=Y&sG#ZnoDeUd_evW|h+7B@!}hXr*87%n4aFbjFV?zQfwp)emZPTZ^^C01p8}sKQv&y}g~S+0OoOHp0u5 z?@w0}y`53k^gyJI(4QQt#f1gA!UPC6wUotoN786u8B`Cf3)WL5BHQ4gIFArIOGTo1 ziSRO4T4(@EAST!dL%aepTmi>Q>jd}5bJXr)Bv~L3$)o_LC81g+n;DEGX{;$$q0Vw| zC;zyLZoD2V2%ME{LY=5KH#Bz% zIxJh+YZM(y0s>L$!#K7Pct@^Ohffm>d zoMNCqIa4_Pa5+J-)?sm4(YiV1jrGwjcPHqdN|u+*?)~&Yu%2*ydDuXA<89S9BNICp zMeBzvX!$pe#!azgN?pdyv_i?~@Bs7nj%S-nuKznp+ImBH|HKHItS1T4$NFqmk%Kxgk^;_>uiai zG8G$VEl0hb%Qe(DzHsiJBa0X(S36goYxBvFy~{socFp<7!uJ=PCJi>m`|)2LUvbLP z&tc21LF7oDlH7JWMPCJ|kKZ{FAoBS&gqdv$Q$p}De} zjqF?bP4Szz;YFYBUxWs}q!uS2xVrm0`$9K(+*s^(ZcA($JN?ayk-KR{1xb=qwZ&(V z*Cxg+?S+a6s_V_h#5q-P(1OxJH< zB@^uQ$<3$^&9#qjFJid|6JyuWFv?D^id);chDjyot%FN(4yqp?p&FYPi+qg?ud}W% z6n)9r?qK14KQ)VaRO1`UzD76ybdP7W!Xf;$?cjc9e2io5h8GPDoRFHVjKrFUqO-0? zUmjbw)^w+DC{kQwmq?tbpE}a1$MmAk2yiqdSA*o=U*Imd1(Pt0krxA3-@MF9B zuELG!)XKZuMtitlc-Iuxb&q0u$~VYiL%9S)aP;Bk6X{QsZB^0r_4UEvd|Y(;VGV9H zq(|k356D8^r=A4k+D4ArZT7sq)z{>a|BI#t)S>R_F`SG^@&$=U)g~1L(FXD4F%1&@a7Qw0=Xu_~PI3DToL4ycZ$rhQBS(_sHg78& zitRVPA6#~|fP)2^VSF6cuxD9+%^H)Cs#syS`O!p4_tsfit|nG{OK@G;K3B-`anlp- zXjG{druxMh5W3Ek^Kqc(rOfbQ+IE}qhsOhfgczE*xVYpS+wF*2qF2!)e^c&e&Sb^U z(zn>X@cZ`!)Ru%T4yls8yNB+qarYW%_C4U#7WJU zZ5LvqyRo{-`aix-I2V4(R0kPjlC-0bdsa4_*wR*7_1Hb?<;m-> z!=0O)>NR1RU1`XL;$Es@1T>=?6~y zmMYxeSyMW;#i2x_jayfQvpchfP0BytTmk_sEcox_N?uJC_H5YqSnh=bTc35*_NCQC z99#KYVot!1|Lg@-oSh+i5PevX*tTcs#3`0%D=ums7dZWy z)T(jDLJMWht;q!ovS$0nx13`c{8?$taIS4fW`e9!cXPV2VR}@>6>a2#f7d!cqq}h| z^xLa#;*aORPAdLsWoCcz|93spM^C{kc+fk?ZpoVLsFTl5o^o%KZVJG%KkLuCLss7#&PH{QL;e3h|GsmPAn)ukJjgN zUmj3U#xd=yjf*ZT|IEgY!P6h{6_14zoiE&#J6jdiDZagqQDwJ`j4SD(AQxSDeyrt~ z3hr2=HTww37j|Z<&!zQ^+w7H}RuQ}F$Er0I<)@Ax@}1yOBL~`ti%AAEXoN%B7t7zZ zOg{wAs^lFD?h%bGqvEece z*39yu@#8V5Sw$>7kf`aIEh@dp)}~H3&OP|$y7u?Wr$`8~^3_vZC< z?_`RRazngpjQgGR}{c-)vmPo%oFXiykl4Pyz z_=GD_F1ptn{T}B{YT6aMBKKuaYK_ZypJ}sokiV*8;HrwHz1uiT^7kawS1`rDp?R_q zQRm#faMMriqg4!xjKZTS1L*S4zt8!ila6!IZpw^Z@W$*1NR-;U_t*G%Tfe_#-7r}j zvoi8o&opqR1=2qICNxuQXmI-NSh?Fit3_#!Sm0!tl#AkdOwmU~DmDAuGy%33YH$JJ z;DQ+uzdPhOF?Obb0mtx@-@d}FV^dZdFiTT80Bwigj;>}-9keu55xL`0hpeMwTS(ha`0B^7k1ly#ftTYmg4}h`FrUo9?QH| zz1yK?=bKgmz`&>1x5oZF)%Ss31#i2?DuJ|gKgSLDlooZ+%l0*0Bfj!|FZj8!JFK_t z+#t2lyEnB_9+g^iZ+k=Jx8sLJE=L|ET{cpU#;1J7^o4#4erek>)mmM45 zV0*n47ail%T`4aSSDOxGyC9ZYr(C*Xa=Gu}@{_qU7Oe9*+H&8;>cawZ-`D`H#a?+e zoN_V1Jh*Dx#)i9b9d0T8K`T;=d$6h4F*@eBRmR_uEC!mMf2Nzu-}i;QdGu5KY89yl&o z@0H-|mwoWV@(d@@(9C4smcHI6w_dmPlgT#k>>~?_H+Rmuilp~dfAFh~m5CSon8T%2lw57Y(i}Rahk=IsRmen_Z=Urx8nf!fGcUKV^SwyOQ;O66%tOKfJi(}~W+J1b&XEn5w`$G<9 zSe|&ab(Kajz0X{iYfC}*G+gO>Gzw{|H?_+!trOVie3G{NJ$?h>wx{c@Y5GJ~sgJap zoi*Ry@f+(5=k;*^#tqE-`&{i%0RhVj{30Kh*5dx@$u=)?*cAD!w&=V1?c~VTu2_gv zy$0)ZxO++R>yn-`w{qrv%Wp2|xG81tjt$8xdUYm#D38(G=(Voq;MM8b*94`IB_+RH zaC)71c;qT1_*?hQQyVD`l^#7_=6-Frd45k9gg-pkG|=$s%Qfe|2@w_b*H@GzLNveF zz{2ikKVz0gj&b6%IL9mn^^oRggpEOGUTxFm9bS-|zCEcH=G66Q_7fds)H%4tk#TQR z{Klp`VvAhSvdmfMm*1W^u8JOqu0jq+l}t6Cxtu&OV?i7*D(k_E8XY9({qe{fjrTC{ zxbSw>3UE3QqSvI6MY|35W~@Ctc5Adxu|eWT8~pA!7L$@Qc4y$rqvEE`#5&T6NOVZq zPX5!V@>`I@>D#}xo`YM)Ke|R6%B_Al%W~K4lO#u`@A+>8{g#z~UxgHu$A3-rxo1(l zt>R48{Y^7#e$7{3q<>Kntp!EJVU!M&|GQPb_k~LoK>S6Hf zK3{Keiz{1rGX=d-MXfdNV?_IxHE?%@YfQiVJTss%$v8myY&kgixT*#g&AQZ=W4FOn z{?8yY=7Y=>*b;J$WpC{*zlPm&B1La8qb=6r-rNRd=e5BZtfWhsCCaOB4$q?k0NcI! z(t2VYxqYC9;}DbAx3I^)xaO0;`;Nz!R{qZlKi8B@!guYS`Rqo~HrqFoP@QKsI?QXV z^gB7Ww%KDWu+BDVon?w-95QhX^J99&4cqfCX0A+(wT@o>g0~Z9810dqd3WnLr0#>P z-}!9p(~E6>d!zgq*}L4Q>%nvD@6OMS+AJ~L3u6=K7;FgEqv)Ine&pN@;}=RL>J?^p zCwAxvb%`EEpBheo?vpw?bArKB4fE0VY5Q6N4YsN#SH5aY8Jsj3c>eV2edwiyCCl}A zy)`YGL6|oV^E&}6bo@X!oS>iQL`(hqca!zlo^Mj_b~^du@awty!7mS@6xMt68@fwS z%=^Y)=O~}7w+z=D+*i0=&@bc%?f-H3r%wha__D#Pgt8*>ivzQmY0UMX9*L85y?^O9 zN|#Br@}6&Q8`!s&uW*d;>AgC6d^m%S(qoT>I9+swNSthJY|IDoVnkD|yVlk9Xxrz2 z2a;1s)oILYdm+=e29jpG`{j%d3Noej2U?1!C5#_zjRIbmH8=ifzZ=IbPAE>Ey&Sc* zxw$!_DMQ=4p{**T?3d_{H>$8Cl;SV|0XTT9Qak7PV(4C-PM7MJ8(|&ZFUjp`|9B^g zbZVWGp^?euw$G0kcLM%tNZ)bi&Yhp%lcP&tpMhT^$6GM(a){n{0``YfqD|~mG5cq{ z&r}FB3)943a%A=h!G}{FPa;M#Zw{>;moIUOGv4-D?U_y0=EBg(veMF2_j6mULHL~8 zv)MQ6^xyN>uTEKH;p3v|Za66tH5SHRlh(h~hpP0RZ^g~e3{5Ya5spu;cKBS}-rZw< zDxz3tPUd(4=79B!{87(S@IY`MF|4j^0{;31%g?i)zJJfu$IL@gAD`vBepT`!zA!*! ze+B|ADSO-Y=|S?8zZT{<19pQp^sBA$C*ToMK}0S~`0{GO{UWT9J?=~7Shm8pVSj&e z7k1^GX_KFC^C|gx+Va`XBPne*lCMv96H7DXO;yBFz`3OEc(zxTV7aGh_Gs;kgN=dh zA9K52E|YCJ{i`yxc3tjkOk0Jda^VK1%lVt1ABvXg!}K+A7E66X59Tjjb_^xRTWCf< z>SBHA(C$>u=Lslj9d1Bygd7mC8bsv<9XrF#iCKw&>d9{g=bG>L;51Ly;FWPNq&)52 zdHbC=KCiOGy__(mW&!-t-u%=Zaep5zazDQ89jg&P!C>FXrZbn1tTuC6D#XpcsL|!w zeXjL?ai9Q>Kai_EY|R?Nd7&t2 zu?`~G|0%s75prxPg5-OvX)mOJ=DqafRjt{|ETOHzzp&D%3ig;d;Xi#Q4?kOoXPzLFZy>XeT}%w7V+dAtw5cgfM` zU8md8@TmG*+n;(D(CL?3tKBEY~={%d{u1wyw;@hxNTRJQfAxo*IF95^sA>% z%^!G?%(HE&oZXX+T4Aev-JO*V?phh2WO?zYKo=9kt-R%vL3hYewk-v0$C;M$>xAr` zeOF=J!hDD5852bkW!DmOAMGOZQ_B-iVlL>Qf#>FST(6mCVBq{;Tnd=_C3)Yo<(Ia4 z8j(gLXAK{Tc{J^3?(#4QwczwKBzE+Y*37_Q{`76z{xQ3*5vT@^9%AgjH#{s2$;Dq7 z3z*vHXUq~${z&PSw(uv$9$mt6e);yXfx$bM{~}pXXR2y_8gk-~l;1%2a;8bZJV0%{ zBmLXvlOJ5I?%e!;Z?ox?sR3@|zc9&d`_y2A&U2c6U2|ckb-OD@PRMpLhp1b<&9!SAN zOixta1ZsrAoSXkSj1dI66_6_XAVl=V0jD~Hb&dvyJkriu5wHVi%-)VBTu}_HB4Tux z6W6Q6s)hyPq2rygkB2cLK70t+k`e zas#malW7sVD_FojENt(#1#IVokn+C|%v!dvdnZ!(aqAUQ>?Od0Ro>=S{+StVPi%1v zws@cpU0LiGx$=8oR?onykS}70!gLEl8*}+AQcTZ~HGc2!s!u~si9MrXf*G)DL4x);^GR(9wkYBwOer3m&A(`T-8>IKA27w!40i9&Tq3PGM8*%Vxx0oO_mIF&_q}q?R^^@Pdd_Qm#IvuE;D-E@mD-LN zio;>Zzw`EQqF+BxoX}K%&$X!U>J!tZ&1%z|A0wY7h^%5D$NtBFbnfl}-0k)^wjuA= zwYg?6uJXr6Cv(!N3sHtf zrN7!fH|_++Z=H=zoXM`Av;?&Ls*e(M3I6Br1>N@c+MgF@EZ9J8{cy9Y}=P+{A* z-p-+0e!1sw%H|}PLS~niAHo8GHFz43@{j4*<1)BcCfT#9z%NS;U9g@G`5Nx=@D(sC z$(Nju(32c?t#fej9qoN!a@~s-0r=x&fF7l%p@FG@ZoVJZOwa9+>zKI_yR_{YO{v}w zLhkQ)HgRCs$Z>dU^%GV6E;EZ4&ZGggK>?PjBkG>l}dkB@{$G;Bf;h$vF`c|bf<3z7UpDh z^a@*iyv251EbAg>e?z)IFj75FX2ot`>4?TXcKfSuZMRijdBA_SI^;`EcB1ctkl3ua z(_KTTJu=PriwD0Cb>tdp$LtS(9lMSg;|1m17ap0r9uHYcgH#z7Z*~s7>Dc(;S7P>q zU1?)I$ccNl;sX9-N^jMWW06O9KMAegGGKOte4(iA`S!S_ z%NKd18y2h{O3Bxr@|K52ud#IPNfgMxEHMx#U zPp`ptL`Xf?U>Br0n8z%PIA(e9>~M5>L`CetNcO8YGh1AZ*9t+PV8%P2)lvd+OGMGm zJIjc!u9t~1YX%aN{OUD!S5i`na92d1AGXgxot{zi4_lY_8NqwA9Gx9hymUN;@XJ+a z;q!Pa@IS&Vk3`M_xdsZgwb*r^@SO)1Uc7;U z=j$HVQs(@$>L&C&6=cE8_tZ_=xfAtQ;)^)VnPt1jqb9ALe%$&j?RjOjDK40$Og~6*%e%T za@m9!NJ*dV7Gm9`U;7vNN*upU0zO@VLsL`5)R~J;xKRu&c@*{ zpK(~aH%2Mgm03$V7CGg)J<(teG4t@zojSW1GfHKMDt!9YSr0Pp-&EZ(MM*AXS--B( z-rzV7l;7MI?{UkgIbs+jqsrp_BAVr+uZeU35{>qyAcGQ9U|fHXkO=9zA`QP8ZWFl80M{#aK)w&lI~b7|VZHec`I z;_2vWM6hx1667{t8+K+@AZ&Vfe1oJj+iCybaTfrQFn>GIxZcUA|2=H1bna^xOP?-> z-uI068FHRxMna6S`wn$NhuIcI%Y5^-YZ>iT8R8+!Vxsy~w2Wn&q$+=#?3+oaew=%Xj$9mbEIjSTh07j^yy=fv-w7Z%vvo+xg* z%PksyGuE7vR0ykcpq{l6HALSLf`#7AeKvA@DIz4lLbG+IZ&0?jH&xY9!@TOcq*B~v zUd3I1DP`or^+@0>oN?3jn_OHvD}m9JH+}w)tL@;9SL@Ld>^+N-hOIN*=ABQGip|T; zUK?uQYU~fVC9@oTl(}Q3XU8@hhEKbH{&h#wPF;wNHg1%D(t!@^5o`j$F3J`>~x=pb6aU zdo}j{EkIZbIpinv-~2kA{-!evw<+<*21k>u=bv-B%i%%I%(&H=pZshG*}x8k5{-?_ z-|%+94hpE#u762k>E_?u_rP$v(T)=VwcU9)8xi-^XFN(XK~#JDB=C;zSNKJ4pB+^k zf9K#f$f=|hN&J;Vw|-R|*Na-pHeJL0tvb#G{hD5|L+?m5bsxG(URkai|FgOAXc_mP zEkTGbx>NJOLD;<+^ZF}(ZRlpo!Lg`@BOd?@yZhL`ejbiJBp~Ru6RYFUbo;DUczjA7 z=)Q4P0a$|_X62$q6X&{JN{jsGT=>2W>c|p|hezbP%*gyqz$NeA&P;Npj(*7j9PW56 zfJEG9nlRlIUbYP%syPYTT4)s|j9bbZAB%ZXj92ag*O z^m&^(E0}$gmd|SB9Y2)wtDkvu%fFrwvUQrw(v_LxSGXkg>>h ztNz~y-H*b6Ry2B25ozu`xsqAzUKujb8zsx_V2NT2{(8ReZ3!iQPL3-y|NN;OJ z$w>cTZ|nOfDzUb9|Dsf|g8QP+HhqG`A0X-Q{MLvYeD%w#+@X0N2F*_ozK91Y{h{z< zxn)5*NaU-dOa6P-OaAMQDuXtOKaQX!Uk!j29XfY#-eiZr=Kej@{)D1rJ})lp?%8zq z$EiImi|v{7!*uu6T>(phIY@LTlaq6Y8!g)_PCzu=rcv3Y`R#C0HEwZh{EikQaldUb z??^cGEM(w+cQ5rG?uxdxw}q=mSCHp1Jx9PI`+=0-aVx`e{l+Jb2Cvb^cd zKq69JxzBs5pyJjQ;LtMYbYtKzyz8(5zLp0bIAGPeh4NSTfRAa-$)5ut>(r0V>MTvn z;Lm2WlG0gAtq*B?TVlG**&fv zBdp)lOTOJ}xOS8M&R>`3n&I>7{ejW#R&StRJ~SLEuFj18d%?yvmc=)Hv$uf42GkB+ zLz`!(^0nuG1@gxW&zo!x-BNj!#k((I%tjIFgRUiMc{dOUC zptDAPeeM>{vwZcyt*fi+KJf6+=g>sJQJfpfJ`;2KKu0xX_me`GtJ$kvo|Y*{Mp1Mp6Ke9r4EeBc!0mvs3ZflZgA)_fMBTH|`EY}H?bZ8_lsqLRv!kbx~hHz2D!hK%QquY}zAox#R^cyr`P zD!b~OE0=V5^M`FLF@SvlKv(1V6TB6j*u~FIJ$2);PKL$o;_{sUYynfV!jkHo}Wbrh? zh_UO)v%b$=_QdlM{k4YLhLeP<=$jzBy8`ZEe6nxX;c;lak=#9Y+Im`NCRn1S9c+Q$ zrROjDyWKwKbT)3QTCxO)|AXMNm%E5Xhv%(L1$9n(;_{3{lG1QJJx8}T&RIUbc)$ZS*ptI!wtV5;mp8c&M2NAw{ziR{&npD#q;Kl3T@8FuWe}hm)7)L_qCMsKhdU1)%C0501exw(qKA%#Yca} z9f`lzGy3V-`@Z5uPg;zsTg>O~`m$);!tR)5a^TUKmSde*V!i2lJq?rn+0P-AvB~%9 zn<0T=xgV4;?_J+6>12H&$%n6F3_7V7-+wXF^sAnN-&fOSY5Hi}|4ZY@27cd|6AY_x zd^%3>jE`L6o#lG2uVQvuZou(1mpX>(eoM+7TJO}!Tc_=-dwZt*ReF2xo^od7qt&an z!vE`5pcb_(GHALx*k3;K`ffQh>8R9t&o3-lZ^Liw8JzMo4dbD5lm^h)FiM)P% z&D#k6bfWQOH-)(|kr^4c6YvlITGv8|8-JJ>6IeU=hXk4`;%zD zoS(-#Xm!t)tKZw2m{bLi5t{G!*PAA3*N|1ykLWG~J5D`pY~B!kcC?`|_6Yv?a^hz1 z`xmCpTKd*9cX)M@sjc$HQQ%jVfmozL4stB-FJcWV*^3b&%%_lRfb?SC^hUINxVg-J zpdsex8{3ZjCiJs$ifAzuGm5g+baVdtg^JobbkSUYd=4ivN`Zl!b!-Xz008Ue_WqsM zZ$G|U6mJQf+KAyULK-dkfa_wwO|6NUdh0fT021#_Vwab6xbub4`|O=6uk~G7>{~vo z{663L-?~cogGQ!tJ+l{EZ5?fFYX*eeEK`R>fE%vB^u~8Q0q#|!CHp!%{i?pquJ1u; zbwZlQO;URHuY?j&QC3bz?pRGz1aOLsi1daRdeNvwMQE%HO?r4%t(^MsIudM8I{n-bsp@I!jmfzt%o+F`y>h-3{d#)zA0;bqxfLvVn(&Mw=5&$Dm&^!=zbo43NZ0~}se?!+!jY-0Xxy)W|NhL>5& zK*c3}n!qoq|Fsd|X?>|Yon1wf*Lq%!C4@+ukhF2PytaSV|8Op+Avb+8bOC{ZjXyt& zb2q1()Y`;%u!DdL(EiKeJ>;2ci~3nL!p-@=|pZ@zE4JXxx_Pq&S$~Go;b)IV3*4FPWg)?yQ{A~T|l@ORLtSNdfZ(PDfpsPd)!J~+}rWxi+yo? zdDr@$*Y1g^RhDxb6dAx{>3-zrqPsNFfo;(AysOpp-}KI(wSmxQaW)`6x^mbuU6~wGvA2~YQeRO(HEF@#Y zrkA`(pT4OXy2~KVQkb{zKjo}-Ux)VgciVY9QHst$fHag8#x`xg&wnQ>(gG6W-i@dZ zRo%{W{ZorULKNrF_wB5h-cgf1$wPR)wda2p?H6T`ZYZ>jdKQ0EPJiAvIJgWN-x2w3 z=*YZz^BT>2!Zo&j7JhdEoHbXbeKFe(7>6yAue-BW?;kP>Plt~67xYnwhNN*ZkakPg zGqC+zlt0#`ANNnR>Z%8cg~FXzKpAKQs2O#tpQHhJe7F1SjMWwv?z6+5#>PCFair_P zvjrQNCl<_0nqD_yp4woFiROTKZv%}3c)rGabzlAOq313E{)pYqyw=VKE5dV){n}sl zEs{1C#y4lQZwnaSVs!gy>~hP42fuyW7YabKTahzAdLygGA*UoYthuyX;qX^uG2qfe zx0&Xy?TL`C?gNoyVcAHD!_bWz;Tk@pJjwjy#NWz*c$FY@npEZ9*HXUmM(g}Pvc35R z0>6(j;E6Sl`jwhWJ%4EXKO%ggiB9i2k{I+UV^$@{m<7t*%=$4H?fifPq1 zwj}(P*r&2EYlYnk@|D!-fsw3uG=D zHzCdRtKxqax0ZcA{NT5UyRAVN@MnIP3*u(oY+VE)PK&KQ0XckS$=qbEnf0lENr!C{ zPo6ljwJ2`$J<-6HIsYz~RI|5lGda;_Om=$~yrigumR&t(!Tno)AbZC=5T%2>JZ$`C zUG=TAbHkSmnVUt-^NKP5YPj$i~f&_vPL;sm2~xgYtfb-OT4#l#(WEW^+ES5-B83euZmITWlpem zSFee;ykY8tHu%x=%~cg0ncA62?!}oulV^_*3L4WL!jH8)Xu*iin_^h4)>oo`B^KN@ zDQ}$DF7X7ROsQ=S0TldyrFDR$Du2w8q)$-wzt<qzT#@eN}%1yum9C~xkmRIBeyQmqOdlSgJS(T>goHX)QXI{n+ zo43Qhz6V-Hb|1Preo*uhnq?U%N`s_)@qXkt+PIJR^c1oxy{A69?|gFBlo{{zC5bm0 zM5l(UHHBx^T4v|=u0@-!-BOfe-zvAaw5$%_R{EmgEht*NoYv*mP#+ngIZB`HTlnWh zcIfid|A!+%JM{AL`DUo!-oCioT_E9NvqyIsRA$hwd)#dJsSoQp1-kYM6Ycj^gCNDP z|E9$IoLxHys=&6cf$W?tQ&@Qywj_{9B*G34f*h!xis-i7_C$H}Chy+9Z*7G87~N#| z6PB;+`+T9FU3&E8?v)0To!vK#9s5B2+cozilUuC$%Moth z-L}W9DQGYs+vOa(QygKz?(sQF?0zWmSH zOY4^>K%TYPl|Z)7UoyRPhnZ~JG2P|A7FkfA?VVDcE`{Cam6#;JxPRN-vkt97otc*L zt;}$r@4R-Tk0MNLXgVHU9$~Z)>vA@^ey!?DgdFGT_LS0m0jIai9|I886Cs z>hUY#`)3s0a{_f2yW|6+9yQswpZ;X%?|2<=f6%6Zs*Ww7n(hbUWF4G-xNK2A`Nvhu z8o-DWb!Go?7=+}NH(Yh&$(ro*M7m4{LxfhH&Kd3|1K#1%{++c+e{^iCKr^H2k!E=K zl)wY=J`03nEhBpmUH+|NpaeBDWn;w+a?giwvPf%m1>ZKN{2ZR6i$7?ZPKvzdVf$6< zJGjFvHX=1E>*$-_s%3({(mJtwey~H?dtQ}LPZuX1Cp@aZ4u!2HSUfbJ<6%zJd#SHX zb{>rYru%bE>lw%~6MOG9jPT&?AaD8o`@7^1?MIC;J-^Jn0n&>a*Hgcj@0$>4;a%<7 z1JhKd^%<=OaH+rMsH?>(_%>}moOsOk=cy>G@W-u-w6I&ykq1tHX@2o)S|Z;)exz%r zWXQ_)P1z{k83_t#3nwhu>$PYt1|$ca6-jNb=jN@=htog>Y<$_BlKaU<%Ea!B^Ze-$ z;_(WQ(0B+jvb(!IJUnap)T-Eg^@~2^u14ulUq=c^9G{SVdrfSuNKXMV#@k6oc3T0V zc4`vxXKMw;qGO;bDV}$1@miw(i%!$&AT9g7?w=#w8uu(v&a|o{unyM-QeAhrrf2@W z26ErG!g7Z-x1^lT78$g{gCVi`JeiyjYA1{fez-fvNjrzAA;rBNh z+VN*Ap0(1m@6CaZ11;B4y>hBa=QDlQ;Ze!-J)p{`^1Mr@q&ghGUOsaPEbqO{-trN{ znO_ru1J&mj&W)*>wzD<)K2Mg3d=1mdy`z}Cx0w-6x_#6oF1pp{OCe@Y)VmK%oHFAr z@aw;WQkcSr*nd06f+Tb#vZwwg@_D(W=XX{9>VIvge&wgk7oXhvZ|h@@jjwyXT!qQk z&lw&|**aJFV)^U4>T`XITRpPJzN)<|EM0VSHcTSY^BCuNsD$y2F5B#TzTNb0`{zY% zbw?MQ;)HdPKNqLczD>?Q-Pf}+ehII_-RV78Z>{@=i5Fo^(@8rvVouL~JM+uq^PitL zHjl1q&Dk|4QMw93tY?Wg;bv90E-H77+oDe%Tpa6~@GW)pZ*;=bu8UX1N7sQoO4!&5 z#TN&Cz5Cmf?Y&1@B6g1#6Aqf1?l|6(emZ&ja#QcRqPDutKEGFG_zV0^6 z@O1Lv#&7(IuMR$Ru&Hx85_e_j;EkbQP7+`Pjx#GPdnaYx`nUBUSi<4KLGJIb9y)D{ z+bjv^w-U`}pZ38oF&kYEb7<%bwg2$W%glYcpyS2fPT;w2soQDCIJ)jSf20}jW3#&8 zRcmGF(|Ny37#Aw1PyGD*ON;vy=SEMjcig(xYT`$a-2O|KYPy<01PG#o_esapMTZ=@ z_1TR_Kkmqzx4IsCeD0ES`(<&Wa}N?0OWz#wPD4(mRSw!etTJ6bfoL|$}<^c z&b@gtadCJ>%lnIf^&U7EZ9C@=^-k3@{pan@jP@jry}eiBuraCi;~ld<)V@B%N_L8x zN=x_64!00@)&0Y~>@pXfEvdy6#;i3`G?(h}-W9~gR~Pw(pG-iC-HjajSFS+I_5tGD z9i+Bnavfg1d|3+OK9U|aI@W`)8QuhZ@V222U3K@pzpwiY^|lgT{9ly4by!sE+CPq> zASxmtA|fC#gd&WhNQaVxvGpEahazJ;g2sn1V2XdPpChUoFGCpsgVH4+7!y6txMAzX(;DgjSfQ8mq$!A z9y~Y?Elc%|0B~4hTho{0mooJVBL;_tdP78OrD@26k9faZ2}GZtjQzQ^kX41)GKXx1 zFV>!8vUOzjfIjtwg+SN=p`pu|IZo}|F?2Dlv<#{7M@m8OI*b~ispr_(Msmh-EPLg_ zf*V#kznEG0T$nlL>w!To%)Pi+53&1YCeL}r8>V6|n*_(`XB!6<4u$C%|7iFC*zu1Y zn}2CPgdfG3L|>7|e(f|*HE>f^oimIJ@igz>dlu(orF^ANi?(&ks;R+nh2CvJq zsdH*5>@7Y@@ZY_;GZ+})!m;Fr2yRVm>9DAaH`XX3!`_C;RHXGCzX;ojalf#)h6$GT z%8c%l0o7g3HZ=~!j0z?`!YH?iXpWNUS|85^pfRlAROR5+OaXQ1Y}NMEDv*2b^$n~~ z5OIxuR5d&w2hHFA{$`mV^1WjG^ORr^itK0ej%1tr7GnL8kWHJyk?hlN&={&?Rj^5p zA(iTnPIVXb+$}1?L>Ku(_7y{R=b_eN6sg`eOHfNv1M=!wjHbIMki@~ zc|bGrGx8=oiLk@;YoL(gL9)W0>pRyvuwv{{0`HD(bO@8U5(vfK$-g|`1RO*5Es_g` zBPKK@ZoyWJW5Gip2i~c7o$2D6?E3P4`(-TN_c8s~{W&dr@BX^1&(9^B9aX>s9`qJ` z5m~hz`5}$4c=iU7Ul%B8{$u?fA$PrEW4i(33mObnhvLLq?ZkoLkd)W|SUc@A4HWo? zMY^a7SPQts8Pxe-AGET=Eqxma>qK_p9;Go#{p)^*|01{#kiw5Cx3($$2iV>Tp|~i! zqWQDwzg*ED0(@wL*i z*aiyKEf3ZQaz-cqXaQ2U8dK%4Ex-Pp3?5Vf%5#eoN}U#1_Ll3_+|tgH4C^DZ8`8W9 zyU6WtM~5m1h+do5cJSkGMNP(wxn|clkU%HFU*fv-w?d^7Y~2Ie2RK=jpD0#?Ii7c?=4|-j)7&Ae*?>x$;cDdVq&$Q-K+|> zY+$e46tF}4p_2rK(J;MNA;|h5weNWKRajx(%Sy>)EqgtA@$VGrVZU^%dhSRv$oW-ub#>u?leS~}VM`ev7sr^hLT0i|@io`7?9FE7`GMVI z-I&{1<<9L`m@TgxOf?b|BRQBT zqKo}z3$`r5qm$AD3uo8(g9_$W`hA_?pS9O$^>d_2-vZD+p4!F1c$SLU{@zKnzJheX zi3Q;Xz*SRjf4X<&(WH8sRyMo)#t3e?nl(h_cct;bgRa+pvOSXt^yvX0b&>)c`7J05 z8ecF=rT`#p4=CJ)+BFl%F9;70N8tp)8L`o`y|I+)wy|it2|(^^q@zu}nQZ#~Ih`%u zsW;~0L9Xz{Bj072+@%^s*Ulg^4uJXOp!h8bdp>xOcH#Y}`&DYt)(>z0Rt40$#|zl7 z%=8s^>lp*Vkqnj5RZl}(`*dsSO<&*^IGC0kL;y@)yzB%*^^vV~_LyJdMEDD-1|ME* z2u~kj8iJ<7zMax7XG@&0K_R*|oxLb1wrbf|gmK?oP5=c#6UYKV%b|a_D^UCp7dEjp zvkP-;D7t#$_g4H3*u4_+Ou7mUJQHpC1ocKg$uDnCiY|k%&4^b$Ve%%g*+BccZC(xG z_Kc%mBp&ZN{quD_%BE~o9xGrwS`&B~({}!z)SK$O4@QC2dES<9Rd(XBly`%UV^IfK zy8g%qL>Mm2dXdUwo#MbKQj@I&Xm?lxAJ{+oBf+~>cX?vK(62$84@qYbbC`ZL-QlED z!XG1I-P~Vh;*S)5A^Y(c!kBxAuOHL=o80%vZHiX;fqnsuff{sD6Ki-+Tu4<26FQ8| z03l=r#R*0+XBN=oP*kt%r99+%5W7-(=4^k=GY3{ zCz|sbYH^pMUKS~ewOdr5IL~zRrbE=axmx=7^d3z86LQktIfmV?dug{tHI&4E<)hOD zZCOExvEcy*)=#cm#-|ptDeniF8cUsHT{O8b2zt+^vY99IWs#^xx_FF>Y*T^gKjaGL za#-F5Y6UDrTA<_=6pCg9XXkMjw6I+{7E`mY4`h=+Z+JbAuHZrTgY_6Hj(}Tf>Nes^ z7)%0G`OO$lK;G0rlYXJW&LmSkRc(3leI{aM8MZ63DhhcFpufPU!|!?|*{0{1ympW$ zj!FSrQANXK5cj8DS|N$QbuX^U>u^~BXks@Cm%;_y9~YeoM&BJmA^yL8VKK@c+p&u@ z=M~VN>jxjviwO3+yg(TR#&+Y3rEVOFD6gT3cL%v=J;15{ZsdC;GuCqxqf6ZFc0 z58CJhpcL)x4l`ZSNPFASaeLzwl@ifA_2NaZ;sz+aC82g^yyJ?F9H`DGctJRMMf|xo-Tu ztt8)H#AyGtjv)ltJCl5cN@~aRPI15?|ELl%7vK=@VJ2(Aj7g2BCda)21h4kMFMn|^FpYqMWrsy%V?d>k-zi+o#vBqh$zsw{B2_GqN+sHZ-<3-BVZxHsB zMtKas&&|+0(ZB`zRgk@l!?g3-WY4*z~l%n`OlqzCNccVZs>l{ z6#m_kDUQEFEvO8-wQ<;;0q*aofDD*}-RHjc!} zp2a+wZ~AXo#(+Hb_~`W&)#G1f>Tt=AHd1#j1<$2joj$Fe(x;T{GkO2(fIV9L`q>kt zQar8rbh$%@QO0?PRd2d|ANx>Q``N|w5s!F`nKUOk3iED4-vcrJP;Yvc5S>pIlVVUj zi{Vus*TXCoOM)nb9jQDDdrfSuGGb%8PH3Q&U~BbFc?;m&C|NO=8KVzR<)9G@>}ktR z$YB-W3nThd_GNJc_)~?~;{85vO?-7m#+^A$L@n|o3&~qxqiz%jSe|ZCYG@s=X&<-LIO=e)SxoQ#V zxOa*Md7vU}FoZ7a30Iz=Ui%}RexNjO2b zQtO(_`2LR+l(B7f68aAH3|&DX2rZg0(krm{{~p4m41a#QQ=26VNE}gz!uw4&X6DC0 zGK@OL(Oow72A$q}P31N%XlE~GJ2O*53Iz4$t!6ipnv4Vf0394Ss)Q92wdY$mywj}v zp!IT1i;!TGcEQ%?MfY4@ST}A6vR*y4;9Z?!urB*HC^wEG_g_+w*vOB$S|H=#>&>$% zU$zz7o|kl4Y1JG-m!}=7>!v_#ho@W7fJVGtUbZh?vc^`J_*}QayRS7tHT!9tB(jZ3IEN3>4CU+_4CPBVHV~?`q&BtYxDX>dfHXWI4 zu^Plr1Pjl;zGUTg0e5*}=9YS@OcCCDxGyF@#l19ixt)YNMSg~48NA)5^*Ec7&LSLl35(+Xz&kjg^DASK3;ls<;__{TqS^-0rMSim!Sfp810XD_UYx@N{h|5 zXU4~XibZf4G%U4<8Mmp|5w8f(HNs|flrY74zr_5zoYd`fpFz$#h|Yd&Y@mmR{Vq5D z5tYVwmwJ|N>ww1>95o>dFV>@E3=l(+IOlgv8xUvi8CB;Q4eG5)3A{fDoDl>HD*j!O zfY{cjSDc=rY7!RKZV9J8aHAI7X+Vdl{`hv|%0@BYi8Te+wW$#G4EE$&5eC%**rlWT`X5})wqv0YR@4w;+(GshO1PF(-^i-c*E9Hb8Dv!geeujz&KPiqktXT z#BXdLr$OsQKt=^KtMcxX&-VxiPhYVR6YWh6iSdNUgNcRGHdX!aa?qupzJxJsQN{Z` zHxP0bih1-l&}75Mj-Iz_MImH^Dl*sm$z@DW+~y6e?owV?4`_34hOsLSFF`(A7_KuP z7U7Ez&+~d5+O77R3tGoj3q+_hb_;o*T&abv-BXZr;JOzmc)*F1OxRs3z2dp+=7_al z9#?e)hVp>lPy@=MuP731hl3t5SnPF(q+1arz{{QjP>EI?)KXk3G>nT^O5UqHNo|QV z!G6961u}h8JLHzG&nf8-eFo{ZXe>7IHxst_ya_16#eB%GQrUPF)ne8t;CwYzV@P8b zW%TXY)7iCSo)(uN&4nvDexgT{o$DJrhWg|O`%->H)v_DOaM1w?)K}$N3b`j zL-qsL*g&?jCy#-aGo7q6b~%xfiGJZF_f&~)lWbj zw&YmoI9EP{H}g0M20Pp@w>vAsretsyZ8CIYN&xeq$z391 zgO>w?aE2pX>aX;7=Z{QYb+Y}s;>3=*kJsg)roW77ej1|jGwYaG_K5uCvpN?8{ov#R zxAbGAY#7h0gI<&rX?-sg)NuyY%I!uYs@X)uz~~Q79Ro)B}k?B}vA6WkSI*m^MySE5sGjC)UGh9@)F&oF~9So(;K+%q&Q-Va zrbw#|k&Q24$#T%wH8;a;lks7?U~3jDU~^qb`FBoT90fG>=3bPNAXNSSISu*Abe+q= zDrGiM=3_febTSk}h3IyRHUdcH`eVuM=Nb@?Kdkh&uSs}%3_LcZjj;eCMueEuMM*;j zKv?o-vSPFh4sEbnD58Xg53*6CN}9rt^nu&#&pqgOb^Gs~bPY+oKi!%JZ*gRSvVKJS z{f^Jw&lW~eK42Cy))ToyY*4ah9wH@}w;xZaXjnRXghE93+Od=0aQ&_BIhWl(?wn{f zU%s%Dq;26c@ia)koly4Nad=0q=tCTMmO&{5uz>pAJxmTf*hSL(_v2yXQI%*2q z#B{A}8LDKmVl*(W`sEgK!rk-!EhwnPh z@5qUS=S^J#>U5OnmOhWhGm!2m2bqFRe!H=FyR1v!Ijg`z)ptrubqYIYp-DKSr~D3qhmG@OK~au zaFi5n-vlrs}<;#B|W zG{2p3D;eGUf=Kr&g}?TEuX_aTPuXhZ+XAr0ClJPtjP@__$s!G8*-I3&g6x$~n=w_5bwZCH&$k!%c$B=^@!VVDo!PVZ$KOhMu-1dQc-aJfH zMqHKYyw`Lit(}V_)rYp9ekTHPnB0i>TnHqLxbT-V4ea~GgeSR(4pE#b9Zj_?JM&j( z-i!Izb(@unTc5pGJ0k-@qY-aaW2r}z^VW1qCec|D>+Psy)y=uk( zkE>~E_M^Lc0cXjbn?zoFOa`%5{o^}Nt#;lr*ypuly-iX@xr0MwGl*;*fWl91oq+wn z2DNGvuuc~Ya`qbk+^{=Ir&ybzcYMDMCQgo?ze8CF$JkJ)#y$68IgP~Mp)3X{>dkhv zh!h&nuL53Ar;phs`-xmZHmZMn3mr2Z{+DE$anTiw@fJ6JTlz7Y*9l6`wYCF;VEnev4Od^ z4utVPaA

hV-Or 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 literal 56690 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 Date: Sat, 16 Jan 2021 16:39:33 +0100 Subject: [PATCH 084/289] Simplify and document trap handling --- doc/serv_csr_int.png | Bin 67258 -> 68971 bytes doc/serv_mem_if_int.png | Bin 65840 -> 63568 bytes rtl/serv_csr.v | 33 +++++++++++++++++++-------------- rtl/serv_mem_if.v | 17 +++++++---------- rtl/serv_rf_if.v | 4 ++-- rtl/serv_state.v | 7 ++----- rtl/serv_top.v | 8 +++----- 7 files changed, 33 insertions(+), 36 deletions(-) diff --git a/doc/serv_csr_int.png b/doc/serv_csr_int.png index dad320bf20ab046d747e2b175d1b5bcec7a131d0..c19c7a13f525f12e9806b29801894a0713d83556 100644 GIT binary patch literal 68971 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%0DoVgE6HZ8c+x4NR> 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 PhalGG_GT5P{&D{Sr*me- delta 41798 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 E0nCrI*#H0l diff --git a/rtl/serv_csr.v b/rtl/serv_csr.v index 15fa813..e67d9be 100644 --- a/rtl/serv_csr.v +++ b/rtl/serv_csr.v @@ -8,9 +8,9 @@ module serv_csr input wire i_cnt3, input wire i_cnt7, input wire i_cnt_done, - input wire i_mem_misalign, + input wire i_mem_op, input wire i_mtip, - input wire i_trap_taken, + input wire i_trap, input wire i_pending_irq, output wire o_new_irq, //Control @@ -90,14 +90,14 @@ module serv_csr These conditions are all mutually exclusibe */ - if (i_trap_taken | i_mstatus_en & i_cnt3 | i_mret) - mstatus_mie <= !i_trap_taken & (i_mret ? mstatus_mpie : csr_in); + if ((i_trap & i_cnt_done) | i_mstatus_en & i_cnt3 | i_mret) + mstatus_mie <= !i_trap & (i_mret ? mstatus_mpie : csr_in); /* Note: To save resources mstatus_mpie (mstatus bit 7) is not readable or writable from sw */ - if (i_trap_taken) + if (i_trap & i_cnt_done) mstatus_mpie <= mstatus_mie; /* @@ -115,16 +115,21 @@ module serv_csr if it was caused by an ebreak instruction (3), ecall instruction (11), misaligned load (4), misaligned store (6) or misaligned jump (0) - */ - if (i_mcause_en & i_en & i_cnt0to3 | i_trap_taken) - mcause3_0 <= !i_trap_taken ? {csr_in, mcause3_0[3:1]} : - i_pending_irq ? 4'd7 : - i_e_op ? {!i_ebreak, 3'b011} : - i_mem_misalign ? {2'b01, i_mem_cmd, 1'b0} : - 4'd0; - if (i_mcause_en & i_cnt_done | i_trap_taken) - mcause31 <= i_trap_taken ? i_pending_irq : csr_in; + The expressions below are derived from the following truth table + irq => 0111 (timer=7) + e_op => x011 (ebreak=3, ecall=11) + mem => 01x0 (store=6, load=4) + ctrl => 0000 (jump=0) + */ + if (i_mcause_en & i_en & i_cnt0to3 | (i_trap & i_cnt_done)) begin + mcause3_0[3] <= (i_e_op & !i_ebreak) | (!i_trap & csr_in); + mcause3_0[2] <= i_pending_irq | i_mem_op | (!i_trap & mcause3_0[3]); + mcause3_0[1] <= i_pending_irq | i_e_op | (i_mem_op & i_mem_cmd) | (!i_trap & mcause3_0[2]); + mcause3_0[0] <= i_pending_irq | i_e_op | (!i_trap & mcause3_0[1]); + end + if (i_mcause_en & i_cnt_done | i_trap) + mcause31 <= i_trap ? i_pending_irq : csr_in; end endmodule diff --git a/rtl/serv_mem_if.v b/rtl/serv_mem_if.v index c33e241..85a5ac8 100644 --- a/rtl/serv_mem_if.v +++ b/rtl/serv_mem_if.v @@ -59,15 +59,12 @@ module serv_mem_if if (dat_valid) signbit <= dat_cur; end - generate - if (WITH_CSR) begin - reg misalign; - always @(posedge i_clk) - misalign <= (i_lsb[0] & (i_word | i_half)) | (i_lsb[1] & i_word); - assign o_misalign = misalign & i_mem_op; - end else begin - assign o_misalign = 1'b0; - end - endgenerate + + /* + mem_misalign is checked after the init stage to decide whether to do a data + bus transaction or go to the trap state. It is only guaranteed to be correct + at this time + */ + assign o_misalign = WITH_CSR & ((i_lsb[0] & (i_word | i_half)) | (i_lsb[1] & i_word)); endmodule diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index db982dc..4bcb7e3 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -17,7 +17,7 @@ module serv_rf_if input wire i_trap, input wire i_mret, input wire i_mepc, - input wire i_mem_misalign, + input wire i_mem_op, input wire i_bufreg_q, input wire i_bad_pc, output wire o_csr_pc, @@ -59,7 +59,7 @@ module serv_rf_if (i_csr_rd & i_rd_csr_en) | (i_mem_rd); - wire mtval = i_mem_misalign ? i_bufreg_q : i_bad_pc; + wire mtval = i_mem_op ? i_bufreg_q : i_bad_pc; assign o_wdata0 = i_trap ? mtval : rd; assign o_wdata1 = i_trap ? i_mepc : i_csr; diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 6a7acab..f1b53b6 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -5,7 +5,6 @@ module serv_state input wire i_clk, input wire i_rst, input wire i_new_irq, - output wire o_trap_taken, output reg o_pending_irq, input wire i_dbus_ack, output wire o_ibus_cyc, @@ -83,7 +82,7 @@ module serv_state assign o_dbus_cyc = !o_cnt_en & init_done & i_mem_op & !i_mem_misalign; - wire trap_pending = WITH_CSR & ((o_ctrl_jump & i_ctrl_misalign) | i_mem_misalign); + wire trap_pending = WITH_CSR & ((o_ctrl_jump & i_ctrl_misalign) | (i_mem_op & i_mem_misalign)); //Prepare RF for reads when a new instruction is fetched // or when stage one caused an exception (rreq implies a write request too) @@ -174,7 +173,6 @@ module serv_state reg misalign_trap_sync; assign o_ctrl_trap = i_e_op | o_pending_irq | misalign_trap_sync; - assign o_trap_taken = i_ibus_ack & o_ctrl_trap; always @(posedge i_clk) begin if (i_ibus_ack) @@ -187,7 +185,7 @@ module serv_state if (stage_two_req) misalign_trap_sync <= trap_pending; - if (i_ibus_ack) + if (o_cnt_done) misalign_trap_sync <= 1'b0; if (i_rst) if (RESET_STRATEGY != "NONE") begin @@ -198,7 +196,6 @@ module serv_state end // always @ (posedge i_clk) end else begin - assign o_trap_taken = 0; assign o_ctrl_trap = 0; always @(*) o_pending_irq = 1'b0; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index a204d65..c1349f1 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -148,7 +148,6 @@ module serv_top wire rf_csr_out; wire new_irq; - wire trap_taken; wire pending_irq; wire [1:0] lsb; @@ -162,7 +161,6 @@ module serv_top .i_rst (i_rst), //State .i_new_irq (new_irq), - .o_trap_taken (trap_taken), .o_pending_irq (pending_irq), .i_alu_cmp (alu_cmp), .o_init (init), @@ -371,7 +369,7 @@ module serv_top .i_trap (trap), .i_mret (mret), .i_mepc (o_ibus_adr[0]), - .i_mem_misalign (mem_misalign), + .i_mem_op (mem_op), .i_bufreg_q (bufreg_q), .i_bad_pc (bad_pc), .o_csr_pc (csr_pc), @@ -434,9 +432,9 @@ module serv_top .i_cnt3 (cnt3), .i_cnt7 (cnt7), .i_cnt_done (cnt_done), - .i_mem_misalign (mem_misalign), + .i_mem_op (mem_op), .i_mtip (i_timer_irq), - .i_trap_taken (trap_taken), + .i_trap (trap), .i_pending_irq (pending_irq), .o_new_irq (new_irq), //Control From 5e4181d204f5e0f2191d50fe1eda60ebb7265b1a Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 16 Jan 2021 16:39:33 +0100 Subject: [PATCH 085/289] Optimize shift operations --- doc/index.rst | 6 +++--- doc/serv_alu_int.png | Bin 50111 -> 59723 bytes doc/serv_bufreg_int.png | Bin 24628 -> 28671 bytes rtl/serv_alu.v | 37 +++++++++++-------------------------- rtl/serv_bufreg.v | 5 +++-- rtl/serv_decode.v | 14 +++++++++++--- rtl/serv_shift.v | 30 ------------------------------ rtl/serv_state.v | 9 ++++++--- rtl/serv_top.v | 10 ++++++---- serv.core | 1 - 10 files changed, 40 insertions(+), 72 deletions(-) delete mode 100644 rtl/serv_shift.v diff --git a/doc/index.rst b/doc/index.rst index 55d79e7..31b75de 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -38,11 +38,11 @@ serv_alu .. image:: serv_alu.png -serv_alu handles alu and shift operations. The first input operand (A) comes from i_rs1 and the second operand (B) comes from i_rs2 or i_imm depending on the type of operation. The data passes through one or more of the add/sub, shift control or bool logic unit and finally ends up in o_rd to be written to the destination register. The output o_cmp is used for conditional branches to decide whether or not to take the branch. +serv_alu handles alu and shift operations. The first input operand (A) comes from i_rs1 and the second operand (B) comes from i_rs2 or i_imm depending on the type of operation. The data passes through the add/sub or bool logic unit and finally ends up in o_rd to be written to the destination register. The output o_cmp is used for conditional branches to decide whether or not to take the branch. -The add/sub unit can do additions A+B or subtractions A-B by converting it to A+BÌ…+1. Subtraction mode (i_sub = 1) is also used for the comparisions in the slt* and conditional branch instructions. Finally, it is also used to negate the B operand for left shifts by clearing the A operand (i_shift_op =1). The +1 used in subtraction mode is done by preloading the carry input with 1. Less-than comparisons are handled by converting the expression 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 literal 50111 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 diff --git a/doc/serv_bufreg_int.png b/doc/serv_bufreg_int.png index 18728a3c07b355db3d80bb71cc6759230b030c4a..82294ee2f921850079ba2982c1f60fd57222c63e 100644 GIT binary patch literal 28671 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 diff --git a/rtl/serv_alu.v b/rtl/serv_alu.v index 8861f51..b48bffc 100644 --- a/rtl/serv_alu.v +++ b/rtl/serv_alu.v @@ -3,21 +3,19 @@ module serv_alu ( input wire clk, //State + input wire i_init, input wire i_en, input wire i_cnt0, - input wire i_cnt_done, input wire i_shamt_en, output wire o_cmp, output wire o_sh_done, + output wire o_sh_done_r, //Control - input wire i_shift_op, input wire i_op_b_rs2, input wire i_sub, input wire [1:0] i_bool_op, input wire i_cmp_eq, input wire i_cmp_sig, - input wire i_sh_right, - input wire i_sh_signed, input wire [3:0] i_rd_sel, //Data input wire i_rs1, @@ -28,41 +26,26 @@ module serv_alu wire result_add; wire result_eq; - wire result_sh; reg result_lt_r; reg eq_r; - reg [4:0] shamt; - reg shamt_msb; + reg [5:0] shamt_r; wire add_cy; reg add_cy_r; wire op_b = i_op_b_rs2 ? i_rs2 : i_imm; - serv_shift shift - ( - .i_clk (clk), - .i_load (i_cnt_done), - .i_shamt (shamt), - .i_shamt_msb (shamt_msb), - .i_signbit (i_sh_signed & i_rs1), - .i_right (i_sh_right), - .o_done (o_sh_done), - .i_d (i_buf), - .o_q (result_sh)); - //Sign-extended operands wire rs1_sx = i_rs1 & i_cmp_sig; wire op_b_sx = op_b & i_cmp_sig; wire result_lt = rs1_sx + ~op_b_sx + add_cy; - wire add_a = i_rs1 & ~i_shift_op; wire add_b = op_b^i_sub; - assign {add_cy,result_add} = add_a+add_b+add_cy_r; + assign {add_cy,result_add} = i_rs1+add_b+add_cy_r; assign result_eq = !result_add & eq_r; @@ -72,11 +55,15 @@ module serv_alu wire result_bool = BOOL_LUT[{i_bool_op, i_rs1, op_b}]; assign o_rd = (i_rd_sel[0] & result_add) | - (i_rd_sel[1] & result_sh) | + (i_rd_sel[1] & i_buf) | (i_rd_sel[2] & result_lt_r & i_cnt0) | (i_rd_sel[3] & result_bool); + wire [5:0] shamt = i_init ? {1'b0,op_b,shamt_r[4:1]} : shamt_r-1; + assign o_sh_done = shamt[5]; + assign o_sh_done_r = shamt_r[5]; + always @(posedge clk) begin add_cy_r <= i_en ? add_cy : i_sub; @@ -85,10 +72,8 @@ module serv_alu end eq_r <= result_eq | ~i_en; - if (i_shamt_en) begin - shamt_msb <= add_cy; - shamt <= {result_add,shamt[4:1]}; - end + if (i_shamt_en) + shamt_r <= shamt; end endmodule diff --git a/rtl/serv_bufreg.v b/rtl/serv_bufreg.v index 999285c..7d32b42 100644 --- a/rtl/serv_bufreg.v +++ b/rtl/serv_bufreg.v @@ -11,6 +11,7 @@ module serv_bufreg input wire i_rs1_en, input wire i_imm_en, input wire i_clr_lsb, + input wire i_sh_signed, //Data input wire i_rs1, input wire i_imm, @@ -31,14 +32,14 @@ module serv_bufreg c_r <= c & i_en; if (i_en) - data <= {i_init ? q : o_q, data[31:3]}; + data <= {i_init ? q : (data[31] & i_sh_signed), data[31:3]}; if (i_init ? (i_cnt0 | i_cnt1) : i_en) o_lsb <= {i_init ? q : data[2],o_lsb[1]}; end - assign o_q = o_lsb[0]; + assign o_q = o_lsb[0] & i_en; assign o_dbus_adr = {data, 2'b00}; endmodule diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 17f341f..2318c57 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -131,10 +131,18 @@ module serv_decode assign o_e_op = opcode[4] & opcode[2] & !op21 & !(|funct3); //opcode & funct3 & imm30 - //True for sub, sll*, b*, slt* - //False for add*, sr* - assign o_alu_sub = (!funct3[2] & (funct3[0] | (opcode[3] & imm30))) | funct3[1] | opcode[4]; + /* + True for sub, b*, slt* + False for add* + op opcode f3 i30 + b* 11000 xxx x t + addi 00100 000 x f + slt* 0x100 01x x t + add 01100 000 0 f + sub 01100 000 1 t + */ + assign o_alu_sub = funct3[1] | funct3[0] | (opcode[3] & imm30) | opcode[4]; /* Bits 26, 22, 21 and 20 are enough to uniquely identify the eight supported CSR regs diff --git a/rtl/serv_shift.v b/rtl/serv_shift.v deleted file mode 100644 index 70a80db..0000000 --- a/rtl/serv_shift.v +++ /dev/null @@ -1,30 +0,0 @@ -`default_nettype none -module serv_shift - ( - input wire i_clk, - input wire i_load, - input wire [4:0] i_shamt, - input wire i_shamt_msb, - input wire i_signbit, - input wire i_right, - output wire o_done, - input wire i_d, - output wire o_q); - - reg signbit; - reg [5:0] cnt; - reg wrapped; - - always @(posedge i_clk) begin - cnt <= cnt + 6'd1; - if (i_load) begin - cnt <= 6'd0; - signbit <= i_signbit & i_right; - end - wrapped <= cnt[5] | (i_shamt_msb & !i_right); - end - - assign o_done = (cnt[4:0] == i_shamt); - assign o_q = (i_right^wrapped) ? i_d : signbit; - -endmodule diff --git a/rtl/serv_state.v b/rtl/serv_state.v index f1b53b6..2de206e 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -19,6 +19,7 @@ module serv_state input wire i_branch_op, input wire i_mem_op, input wire i_shift_op, + input wire i_sh_right, input wire i_slt_op, input wire i_e_op, input wire i_rd_op, @@ -37,6 +38,7 @@ module serv_state input wire i_ctrl_misalign, output wire o_alu_shamt_en, input wire i_alu_sh_done, + input wire i_alu_sh_done_r, output wire o_dbus_cyc, output wire [1:0] o_mem_bytecnt, input wire i_mem_misalign, @@ -67,7 +69,8 @@ module serv_state assign cnt4 = (o_cnt[4:2] == 3'd1) & o_cnt_r[0]; assign o_cnt7 = (o_cnt[4:2] == 3'd1) & o_cnt_r[3]; - assign o_alu_shamt_en = (o_cnt0to3 | cnt4) & o_init; + + assign o_alu_shamt_en = o_cnt0to3 | cnt4 | !o_init; //Take branch for jump or branch instructions (opcode == 1x0xx) if //a) It's an unconditional branch (opcode[0] == 1) @@ -89,7 +92,7 @@ module serv_state assign o_rf_rreq = i_ibus_ack | (stage_two_req & trap_pending); //Prepare RF for writes when everything is ready to enter stage two - assign o_rf_wreq = ((i_shift_op & i_alu_sh_done & init_done) | (i_mem_op & i_dbus_ack) | (stage_two_req & (i_slt_op | i_branch_op))) & !trap_pending; + assign o_rf_wreq = ((i_shift_op & (i_alu_sh_done | !i_sh_right) & init_done) | (i_mem_op & i_dbus_ack) | (stage_two_req & (i_slt_op | i_branch_op))) & !trap_pending; assign o_rf_rd_en = i_rd_op & o_cnt_en & !o_init; @@ -104,7 +107,7 @@ module serv_state shift : Shift in during phase 1. Continue shifting between phases (except for the first cycle after init). Shift out during phase 2 */ - assign o_bufreg_en = (o_cnt_en & (o_init | o_ctrl_trap | i_branch_op)) | (!stage_two_req & i_shift_op); + assign o_bufreg_en = (o_cnt_en & (o_init | o_ctrl_trap | i_branch_op)) | (i_shift_op & !stage_two_req & (i_sh_right | i_alu_sh_done_r)); assign o_ibus_cyc = ibus_cyc & !i_rst; diff --git a/rtl/serv_top.v b/rtl/serv_top.v index c1349f1..a95a8bd 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -117,6 +117,7 @@ module serv_top wire alu_sh_signed; wire alu_sh_right; wire alu_sh_done; + wire alu_sh_done_r; wire [3:0] alu_rd_sel; wire rs1; @@ -180,6 +181,7 @@ module serv_top .i_ctrl_misalign(lsb[1]), .o_alu_shamt_en (alu_shamt_en), .i_alu_sh_done (alu_sh_done), + .i_alu_sh_done_r (alu_sh_done_r), .o_mem_bytecnt (mem_bytecnt), .i_mem_misalign (mem_misalign), //Control @@ -188,6 +190,7 @@ module serv_top .i_branch_op (branch_op), .i_mem_op (mem_op), .i_shift_op (shift_op), + .i_sh_right (alu_sh_right), .i_slt_op (slt_op), .i_e_op (e_op), .i_rd_op (rd_op), @@ -284,6 +287,7 @@ module serv_top .i_init (init), .o_lsb (lsb), //Control + .i_sh_signed (alu_sh_signed), .i_rs1_en (bufreg_rs1_en), .i_imm_en (bufreg_imm_en), .i_clr_lsb (bufreg_clr_lsb), @@ -328,20 +332,18 @@ module serv_top .clk (clk), //State .i_en (cnt_en), + .i_init (init), .i_cnt0 (cnt0), - .i_cnt_done (cnt_done), .i_shamt_en (alu_shamt_en), .o_cmp (alu_cmp), .o_sh_done (alu_sh_done), + .o_sh_done_r (alu_sh_done_r), //Control - .i_shift_op (shift_op), .i_op_b_rs2 (op_b_source), .i_sub (alu_sub), .i_bool_op (alu_bool_op), .i_cmp_eq (alu_cmp_eq), .i_cmp_sig (alu_cmp_sig), - .i_sh_right (alu_sh_right), - .i_sh_signed (alu_sh_signed), .i_rd_sel (alu_rd_sel), //Data .i_rs1 (rs1), diff --git a/serv.core b/serv.core index c848468..004d843 100644 --- a/serv.core +++ b/serv.core @@ -6,7 +6,6 @@ filesets: core: files: - rtl/serv_params.vh : {is_include_file : true} - - rtl/serv_shift.v - rtl/serv_bufreg.v - rtl/serv_alu.v - rtl/serv_csr.v From e4b773c17b2367bc27c3e10fcafe0e00e62de2ff Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 18 Jan 2021 22:47:28 +0100 Subject: [PATCH 086/289] Syntax fixes --- rtl/serv_ctrl.v | 1 - rtl/serv_state.v | 2 +- rtl/serv_top.v | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/rtl/serv_ctrl.v b/rtl/serv_ctrl.v index 5a5554e..a50ece1 100644 --- a/rtl/serv_ctrl.v +++ b/rtl/serv_ctrl.v @@ -11,7 +11,6 @@ module serv_ctrl input wire i_cnt12to31, input wire i_cnt0, input wire i_cnt2, - input wire i_cnt_done, //Control input wire i_jump, input wire i_jal_or_jalr, diff --git a/rtl/serv_state.v b/rtl/serv_state.v index 2de206e..6287d8f 100644 --- a/rtl/serv_state.v +++ b/rtl/serv_state.v @@ -48,6 +48,7 @@ module serv_state wire cnt4; reg stage_two_req; + reg init_done; reg [4:2] o_cnt; reg [3:0] o_cnt_r; @@ -112,7 +113,6 @@ module serv_state assign o_ibus_cyc = ibus_cyc & !i_rst; assign o_init = two_stage_op & !o_pending_irq & !init_done; - reg init_done; always @(posedge i_clk) begin //ibus_cyc changes on three conditions. diff --git a/rtl/serv_top.v b/rtl/serv_top.v index a95a8bd..a8f4306 100644 --- a/rtl/serv_top.v +++ b/rtl/serv_top.v @@ -311,7 +311,6 @@ module serv_top .i_cnt12to31 (cnt12to31), .i_cnt0 (cnt0), .i_cnt2 (cnt2), - .i_cnt_done (cnt_done), //Control .i_jump (jump), .i_jal_or_jalr (jal_or_jalr), From e8bc87fd0ef41537dc5225de1955cee508ee53fe Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Wed, 20 Jan 2021 23:48:28 +0100 Subject: [PATCH 087/289] Add serv_rf_if documentation --- doc/index.rst | 6 +++++- doc/serv_rf_if.png | Bin 0 -> 14392 bytes doc/serv_rf_if_int.png | Bin 0 -> 47628 bytes 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 doc/serv_rf_if.png create mode 100644 doc/serv_rf_if_int.png diff --git a/doc/index.rst b/doc/index.rst index 31b75de..cf9fefc 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -140,7 +140,11 @@ When SERV is built with `WITH_CSR`, there is also logic to detect misaligned acc serv_rf_if ^^^^^^^^^^ -serv_rf_if is the gateway between the core and an RF implementation. It transforms all control signals that affect register reads or writes and exposes two read and write ports to the RF. This allows implementors to plug in an RF implementation that is best suited for the technology to be used. +.. image:: serv_rf_if.png + +serv_rf_if is the gateway between the core and an RF implementation. It transforms all control signals that affect register reads or writes and exposes two read and write ports to the RF. This allows implementors to plug in an RF implementation that is best suited for the technology to be used. The general purpose registers are allocated to address 0-31. In addition, four CSR are defined at addresses 32-35. + +.. image:: serv_rf_if_int.png serv_rf_ram ^^^^^^^^^^^ diff --git a/doc/serv_rf_if.png b/doc/serv_rf_if.png new file mode 100644 index 0000000000000000000000000000000000000000..ae54de51058378fd3340d47dc52d02f5fd68a4ca GIT binary patch literal 14392 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 r^NnA>9S;c;JJY&>j^J*f0ajKv`$9y`*@^s| zPb-5F)VR0DC>6uJu0bE~YjgW*HTYrt=LFsnExApziEj^EcRfqf@_E!(f{g^G)lLe&%I2?uSY~!Cux7(p`Np(N|Uoj>Fty z&s~^%%|ql?wVkb1Fr^^#oxCIRy+xcNbWS>qj2C~LjUIcu7@i5nO2g=jYP1 z zxB#K(c|UjmaAZU+&I3Sh{%0Bq1CN9!UP9muc zbC)N7r#AI@z5CGVy!+o8AB9D4&x|1C8WmF5t^BD06;J^wXIW)itu3MN)}0Mg?Z29V Re+2F@F|;&z3cq~qe*r+@$_fAg literal 0 HcmV?d00001 diff --git a/doc/serv_rf_if_int.png b/doc/serv_rf_if_int.png new file mode 100644 index 0000000000000000000000000000000000000000..dcfbed2fd03efb332f4a89a427a6536aafd27f13 GIT binary patch literal 47628 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 hUtkGX6PH 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 bX65|S#;g8UZi_1_qKzsiHI(ucjc)!Ithn1% literal 0 HcmV?d00001 From 8d5dd77a26ce7ea56291e6c9152aea52297d68c8 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 21 Jan 2021 13:16:48 +0100 Subject: [PATCH 088/289] Optimize csr address handling --- rtl/serv_decode.v | 35 +++++++++++++++-------------------- rtl/serv_rf_if.v | 30 ++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 26 deletions(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 2318c57..2daee16 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -147,28 +147,27 @@ module serv_decode /* Bits 26, 22, 21 and 20 are enough to uniquely identify the eight supported CSR regs mtvec, mscratch, mepc and mtval are stored externally (normally in the RF) and are - treated differently from mstatus, mie, mcause and mip which are stored in serv_csr. + treated differently from mstatus, mie and mcause which are stored in serv_csr. - The former get a 2-bit address (as found in serv_params.vh) while the latter get a + The former get a 2-bit address as seen below while the latter get a one-hot enable signal each. - Hex|2 222|Reg - adr|6 210|name - ---|-----|------- - 300|0_000|mstatus - 304|0_100|mie - 305|0_101|mtvec - 340|1_000|mscratch - 341|1_001|mepc - 342|1_010|mcause - 343|1_011|mtval - 344|1_100|mip + Hex|2 222|Reg |csr + adr|6 210|name |addr + ---|-----|--------|---- + 300|0_000|mstatus | xx + 304|0_100|mie | xx + 305|0_101|mtvec | 01 + 340|1_000|mscratch| 00 + 341|1_001|mepc | 10 + 342|1_010|mcause | xx + 343|1_011|mtval | 11 */ //true for mtvec,mscratch,mepc and mtval - //false for mstatus, mie, mcause, mip - wire csr_valid = op20 | (op26 & !op22 & !op21); + //false for mstatus, mie, mcause + wire csr_valid = op20 | (op26 & !op21); assign o_rd_csr_en = csr_op; @@ -180,11 +179,7 @@ module serv_decode assign o_csr_source = funct3[1:0]; assign o_csr_d_sel = funct3[2]; assign o_csr_imm_en = opcode[4] & opcode[2] & funct3[2]; - - assign o_csr_addr = (op26 & !op20) ? CSR_MSCRATCH : - (op26 & !op21) ? CSR_MEPC : - (op26) ? CSR_MTVAL : - CSR_MTVEC; + assign o_csr_addr = {op26 & op20, !op26 | op21}; assign o_alu_cmp_eq = funct3[2:1] == 2'b00; diff --git a/rtl/serv_rf_if.v b/rtl/serv_rf_if.v index 4bcb7e3..431bfbb 100644 --- a/rtl/serv_rf_if.v +++ b/rtl/serv_rf_if.v @@ -83,13 +83,31 @@ module serv_rf_if //0 : RS1 //1 : RS2 / CSR - assign o_rreg0 = {1'b0, i_rs1_raddr}; - assign o_rreg1 = - i_trap ? {4'b1000, CSR_MTVEC} : - i_mret ? {4'b1000, CSR_MEPC} : - i_csr_en ? {4'b1000, i_csr_addr} : - {1'b0,i_rs2_raddr}; + + /* + The address of the second read port (o_rreg1) can get assigned from four + different sources + + Normal operations : i_rs2_raddr + CSR access : i_csr_addr + trap : MTVEC + mret : MEPC + + Address 0-31 in the RF are assigned to the GPRs. After that follows the four + CSRs on addresses 32-35 + + 32 MSCRATCH + 33 MTVEC + 34 MEPC + 35 MTVAL + + The expression below is an optimized version of this logic + */ + wire sel_rs2 = !(i_trap | i_mret | i_csr_en); + assign o_rreg1 = {~sel_rs2, + i_rs2_raddr[4:2] & {3{sel_rs2}}, + {1'b0,i_trap} | {i_mret,1'b0} | ({2{i_csr_en}} & i_csr_addr) | ({2{sel_rs2}} & i_rs2_raddr[1:0])}; assign o_rs1 = i_rdata0; assign o_rs2 = i_rdata1; From 6fbdea58d66085fdc84a312009d3e1dde9861d31 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 23 Jan 2021 22:33:55 +0100 Subject: [PATCH 089/289] Optimize trap handling --- doc/serv_csr_int.png | Bin 68971 -> 72312 bytes rtl/serv_csr.v | 22 +++++++-------- rtl/serv_state.v | 62 +++++++++++++++++-------------------------- rtl/serv_top.v | 4 +-- 4 files changed, 37 insertions(+), 51 deletions(-) diff --git a/doc/serv_csr_int.png b/doc/serv_csr_int.png index c19c7a13f525f12e9806b29801894a0713d83556..5f5a0938efa899ea8c95a452ed6fc17939b96ae4 100644 GIT binary patch literal 72312 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�RO~c}bE;V7zNiZR%4x=L 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 z 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 G1pW_Zd_y4s literal 68971 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%0DoVgE6HZ8c+x4NR> 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 Date: Tue, 26 Jan 2021 20:59:49 +0100 Subject: [PATCH 090/289] Expose WITH_CSR and RESET_STRATEGY in core file --- serv.core | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/serv.core b/serv.core index 004d843..1068b78 100644 --- a/serv.core +++ b/serv.core @@ -24,7 +24,11 @@ filesets: targets: default: filesets : [core] - parameters : [RISCV_FORMAL, SERV_CLEAR_RAM] + parameters : + - "is_toplevel? (RESET_STRATEGY)" + - RISCV_FORMAL + - SERV_CLEAR_RAM + - "is_toplevel? (WITH_CSR)" toplevel : ["is_toplevel? (serv_rf_top)"] lint: @@ -36,6 +40,10 @@ targets: toplevel : serv_rf_top parameters: + RESET_STRATEGY: + datatype : str + paramtype : vlogparam + RISCV_FORMAL: datatype : bool paramtype : vlogdefine @@ -44,3 +52,6 @@ parameters: datatype : bool paramtype : vlogdefine + WITH_CSR: + datatype : int + paramtype : vlogparam From f70b79fd8f25db5eb4623127ee79baafb4aa3a58 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Mon, 1 Feb 2021 22:37:45 +0100 Subject: [PATCH 091/289] Combine lt and eq regs to cmp_r in serv_alu --- doc/serv_alu_int.png | Bin 59723 -> 56690 bytes rtl/serv_alu.v | 18 +++++++----------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/doc/serv_alu_int.png b/doc/serv_alu_int.png index d6aebbd8c42e92bfc48d885307991f5ecf828183..1d8c04b39b5dd9cecf4ad5eadb1e9be4293b7d9a 100644 GIT binary patch literal 56690 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