-
LSU读到数据,回写regfile时wen怎么办?
lsu需要回写regfile,把数据传回ecl(以后改byp),然后给到ecl_irf_rd_data_w,但这时候有个问题,wen已经不在了。 wen一开始在ecl里维护,从ifu_exu_rf_wen_d一直到最后的wen_w,给出ecl_irf_wen_w。 277 wire [4:0] wen_d; 278 wire [4:0] wen_e; 279 wire [4:0] wen_m; 280 wire [4:0] wen_w; 281 282 assign wen_d = ifu_exu_rf_wen_d & ifu_exu_valid_d; 283 284 dff_s #(1) wen_e_reg ( 285 .din (wen_d), 286 .clk (clk), 287 .q (wen_e), 288 .se(), .si(), .so()); 289 290 dff_s #(1) wen_m_reg...
-
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...