From 25fa6fa83ba8aa9ac025f8edcb26f72aed8cc9dc Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sat, 2 Jan 2021 00:02:23 +0100 Subject: [PATCH] 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),