From ca1a07f684ca633601201ee5708f8f78a48339d9 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Tue, 29 Dec 2020 23:35:17 +0100 Subject: [PATCH] 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 (