跳转至

2023 计算机组成原理问答

监控程序和 QEMU 无法正常编译和运行

目前大部分同学遇到的问题都是本地的 6666 号端口被占用了,例如看到报错信息 Failed to find an available port: Address already in use。可以尝试 kill 掉占用 6666 端口的进程,或者改一下 cmd 脚本或者执行命令里面的端口号。如果要使用 GDB 调试,那么 QEMU 监听的 1234 端口也可能出现被占用的情况,解决方法是类似的。

在 Linux 下,可以用 lsof 工具查看有哪些进程正在占用端口:lsof -i tcp:6666 -n -P,这里 -i tcp:6666 表示只显示 TCP 6666 端口的结果,-n 表示不从 IP 地址反查域名,-P 表示不从端口号反查协议名称。

在 Linux 下运行 QEMU 的时候遇到 error while loading shared libraries: libpixman-1.so.0 错误

这是因为系统里缺少 libpixman 的动态库,如果使用 Ubuntu/Debian,可以用 apt 安装缺失的文件:

sudo apt install libpixman-1-0

提示:以后如果遇到类似问题,以 Debian 为例,可以访问 Debian Packages,在 Search the contents of packages 一栏输入你要找的文件名,例如 libpixman-1.so.0,点击 Search,就可以看到 libpixman-1-0 包提供了这个文件。

在 Linux 下运行 riscv64-unknown-elf-gcc 时报错 ELF: not found 以及 Syntax error: ")" unexpected

这可能是因为下载的工具链使用的是 amd64/x86_64 指令集,而你正在运行使用其他指令集(如 aarch64)的 Linux,此时 Linux 就无法执行 amd64/x86_64 指令集的 ELF,尝试用 shell 去运行,然后就出现了上面的错误。如果使用 Ubuntu/Debian,可以用 apt 安装并使用发行版自带的工具链:

sudo apt install gcc-riscv64-unknown-elf qemu-system-misc

提示:你试试用上面的方法,尝试一下能否从要执行的命令名称(riscv64-unknown-elf-gccqemu-system-riscv32),找到对应的包名(gcc-riscv64-unknown-elfqemu-system-misc)。

在仿真时发现对某些寄存器的“第一次赋值”出现问题,如状态机的转移没有按预期执行;后续赋值均正常

如果同学接的是 clk_10M 或其它经过 pll 生成的时钟,请在仿真文件中添加延时,确保仿真的准备时间足够长,使得相应时钟信号对应的 rst (如 clk_10M 对应的是框架中的 reset_of_clk10M) 变为 1 又变为 0 后再开始仿真逻辑。这是因为 pll 生成时钟存在一定的延迟,在仿真环境下大约需要 2000 ns。

此外,建议同学看仿真波形时把真正使用的时钟和对应的 rst 信号添加到波形中,便于观察/


最后更新: 2023年10月18日
作者:Jiajie Chen (72.73%), cuibst (9.09%), Shaofeng Ding (18.18%)