u@home:~$

  • irf的read port是该在上升沿读出数据吗,需要ren吗?

    // register file for MIPS 32 module reg_file( input clk, // input rst, input [ 4:0] waddr1, input [ 4:0] raddr0_0, input [ 4:0] raddr0_1, input wen1, input [`GRLEN-1:0] wdata1, output [`GRLEN-1:0] rdata0_0, output [`GRLEN-1:0] rdata0_1, input [ 4:0] waddr2, input [ 4:0] raddr1_0, input [ 4:0] raddr1_1, input wen2,...

  • 单发射就不需要issue stage了吧

    过段时间就全忘啊。。 verilator模拟的时候出一大堆Read Miss Addr0,这个是正常的,不知道刚开始怎么着就读到地址0了。 新加模块什么的,重新编译要先make clean,现在没时间改进makefile。 要是make clean_all,一定记得在run_func,也就是make的目录下makdir log,创建log文件夹,要不后面不编译了。 verilator要用的内存文件最后在./tmp/ram.dat Makefile里有这句,不过tmp目录运行完就删除了。 cat ./tmp/rom.vlog > ./tmp/ram.dat; 确认有ram.dat,verilator就能读内存了。刚开始被一堆的Read Miss Addr0给整不会了,以为是内存文件没生成出来。 而且后来读内存的时候,是从1c000000开始读的,但读出来的是0,开始也是以为内存文件的事。 cpu7模块里本来想完全从头写,先只放cpu7_ifu和cpu7_exu,可发现没有tlb和csr模块控制cache,读内存会出问题。 本打算借着这个机会把cache看看,结果先试了把csr和tlb_wrapper加了回来,结果指令取值正常了。 那就先这样吧,一个inst_req要6个还是7个周期才读成功,inst_addr_ok和inst_valid同时返回,还没有看是因为什么。 先在cpu7_ifu里有cpu7_ifu_fdp和cpu7_ifu_dec,取值,解码。 obj/main.elf: file format elf32-loongarch obj/main.elf Disassembly of section .text: 1c000000 <_start>: kernel_entry(): 1c000000: 0280058c addi.w $r12,$r12,1(0x1) 1c000004: 0280098c addi.w $r12,$r12,2(0x2) 1c000008: 02800d8c addi.w $r12,$r12,3(0x3) 1c00000c: 0280118c addi.w...

  • 流水线stall的设计

    两种方式选一: chiplab的,上一级等下一级,一级一级串起来,一但后面的比如ex2卡住了,前面流水线全部停下。 我自己cpu6的,if阶段有个stallF信号,后面阶段如果要stall,就去signal这个stallF,然后流水线里就产生泡泡。这样需要各级都很清楚哪里要stall,哪里要flush。 先在看来流水线控制我已经知道了3种方式。 chilap的,一级链一级,后面的不完成,前面的进不去。 我自己的,控制if,刷后面的id,ex,让流水线里产生泡泡。 OpenSPARC T1,stall 各级NIR,同时有很多个信号随着这条stall后重复的指令通过整个流水线,但在读写reg的时候都不给en,所以这条指令是没任何效果的。 如果要用OpenSPARC的方式,rf要支持,虽说rf都有wen,但我要用chiplab的rf,这个没有ren。 如果要刷流水线寄存器,那么所有的dff都还要有rst。 还没有看chiplab里面怎样刷流水线,比如branch以后已经进到流水线里的指令。OpenSPARC怎么做的更是还没看明白。 todo 先看下opensparc是怎么做的。 来自ifu外部的stallreq,一个是来自lsu,是某个队列快满了就告诉ifu不要再取值往后面执行了。另一个是来自ffu,浮点运算单元。 lsu/rtl/lsu_qctl2.v // Determine whether cfq has crossed high-water mark. IFU must switchout all threads // for every cycle that this is valid. // Need to change wptr size once new cfq array description incorporated. //...