-
LSU里遇到的处理lsu_op解码的问题
lsu_op需要解码,需要分清是load还是store指令,分别是byte word 还是dword等等。 发出读和写请求都是在_e阶段,但如果是写操作,数据和地址发出去后,等结果就行了。 而读请求需要在_e发出请求,如果地址正确的话会在同cycle里马上会得到个data_addr_ok。 而数据要在后面n个周期才会回来。 这个阶段都叫做_m,但具体几个cycle,不能确定,因为会遇到cache miss。 读数据回来后,需要根据lsu_op找出这个读指令是读byte还是word等。 而lsu_op实际上是lsu_op_e,这时候已经没有了,必须用dff保存一份。 所以这里我用带enable的dff,在lsu_op传进来的时候就存起来,用valid做en。 70 // lsu_op needs dff, the following combinational logic is only used when data_data_ok is signaled at _m 71 wire [`LSOC1K_LSU_CODE_BIT-1:0] lsu_op_m; 72 73 dffe_s #(`LSOC1K_LSU_CODE_BIT) lsu_op_e2m_reg ( 74 .din (lsu_op), 75 .en (valid), 76 .clk (clk), 77 .q...
-
加test case
先复制份代码。 u@unamed:~/prjs/cpu7/software/func/$ cp -r func_uty0/ func_uty1_ld 代码不在这里编译。 现在configure.sh里加上func/func_uty1_ld func/func_advance) RUN_FUNC=y mkdir -p ./obj/func mkdir -p ./log/func ;; func/func_uty0) RUN_FUNC=y mkdir -p ./obj/func mkdir -p ./log/func ;; func/func_uty1_ld) RUN_FUNC=y mkdir -p ./obj/func mkdir -p ./log/func ;; my_program) RUN_FUNC=n RUN_C=y mkdir -p ./obj/ mkdir -p ./log/ ;; 然后在run_func里编译。 u@unamed:~/prjs/cpu7/sims/verilator/run_func$ ./configure.sh -run func/func_uty1_ld...
-
Chiplab LSU
Chiplab的lsu要简单些,因为用的是memory interface,不需要处理dcache,也不需要通过AXI控制内存,因为这些都包装在别的模块。 module lsu_s1( input clk, input resetn, input valid, input [`LSOC1K_LSU_CODE_BIT-1:0]lsu_op, input [`GRLEN-1:0] base, input [`GRLEN-1:0] offset, input [`GRLEN-1:0] wdata, input tlb_req, input data_exception, input [`GRLEN-1:0]data_badvaddr, input tlb_finish, //memory interface output data_req, output [`GRLEN-1:0] data_addr, output data_wr, `ifdef LA64 output [ 7:0] data_wstrb, `elsif LA32 output [ 3:0] data_wstrb,...