Skip to content

常见问题

常见问题

建议根据 右边栏 进行索引

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/ifndefendif一一对应。

测试之后报错 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 verilatorelse 之间的部分中 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.tclvivado\src\add_sources.tcl添加即可。