常见问题
常见问题¶
建议根据 右边栏 进行索引
0 环境配置¶
下载verilator时,make -j12
后死机¶
可以使用make -j4
或者直接make
,如果使用的是虚拟机,建议更新vmware至16.0版本
1 流水线相关¶
Decode 和 Writeback 冲突¶
采用转发或阻塞来解决。不允许使用下降沿!
2 Verilator仿真¶
mepc / invalid paddr 0x23333000¶
按照实验测试中的 接入Verilator仿真 部分接入skip
流水线的 Commit Instr Valid¶
单周期里,每个周期能执行指令,所以 .valid(~reset)
就可以;流水线里则不是这样,需要在 dataF, dataD, ...
里加一个 valid 信号:
assign dataF.valid = '1;
if (reset | flush) dataD <= '0;
ld 指令地址正确,但数据错误,¶
可能是之前的 sd 指令没有给 strobe 正确赋值。
读 | 写 | 其它指令 | |
---|---|---|---|
valid | '1 |
'1 |
'0 |
strobe | '0 |
'1' |
'0 |
1秒以上不退出¶
可以采取这种调试方法,遇到未知的指令,所有控制信号取0
always_ff @(posedge clk) begin
$display("%x", ireq.addr);
end
Warning-UNOPTFLAT ....Signal unoptimizable¶
verilator判断出现了组合逻辑环,主要的可能是因为verilator把dreq等 struct
视为一个整体来赋值,进而优化性能,而因此结构体内部元素的赋值在 verilator 看来可能会相互干扰,请先按照它给出的提示信息排查,也可以参考去年的文档https://fducslg.github.io/ICS-2021Spring-FDU/misc/unopt.html
报错 module decls within module decls¶
语法错误,少了endmodule
测试的代码在哪里看?¶
测试的代码文件在ready-to-run
下,对应的.s文件有执行的指令,其中地址部分是文件内偏移量,需要加上0x8000_0000
才是执行时的地址
/usr/bin/sh: time: command not found
¶
查看提示信息中是否包含mingw/mingw32
等字样,如果有的话表明这个是在windows下面直接make
了,请换到linux环境下再make
make test
后出现了ifdef not terminated at EOF?¶
查看写的每一个sv
文件,确保其中的 ifdef/ifndef
和 endif
一一对应。
测试之后报错 No instruction commits for 5000 cycles of core 0. Please check the first instruction.
¶
请先确保写回阶段的接口与difftest的测试框架相连并且所有的 sv 文件都已保存,然后运行 make clean
后再make
对应的测试
未找到头文件No such file or directory
比如 SDL2¶
这是因为difftest
依赖一些库,可以尝试sudo apt install libsdl2-dev zlib1g-dev
,若还是不行,可以尝试用 apt search SDL2
查找可能需要的库文件,然后进行安装。
Can't find definition of ***
¶
确保所在文件在 ifdef verilator
和 else
之间的部分中 include了模块所在的文件,并且引用的路径是正确的;同时正确例化模块
module_name variable_name( //建议module_name 和 variable_name一致
.clk(clk), ....
);
spike-dasm: command not found
¶
没有影响,可以不管
3 Vivado¶
请确保用
vivado.2018.3
仿真没有波形¶
Tools->Settings->Simulation->Simulation->log_all_signals 设置为1,重启 Vivado。
两个仿真通过,上板无现象¶
Generate Bitstream -> Open Implemented Design -> Check Timing
,解决所有 No clock 信号。
怎么在vivado中添加源文件?¶
运行tools选项下的Run Tcl script
,运行 vsrc\add_sources.tcl
和vivado\src\add_sources.tcl
添加即可。