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-gcc
和 qemu-system-riscv32
),找到对应的包名(gcc-riscv64-unknown-elf
和 qemu-system-misc
)。
在仿真时发现对某些寄存器的“第一次赋值”出现问题,如状态机的转移没有按预期执行;后续赋值均正常
如果同学接的是 clk_10M 或其它经过 pll 生成的时钟,请在仿真文件中添加延时,确保仿真的准备时间足够长,使得相应时钟信号对应的 rst (如 clk_10M 对应的是框架中的 reset_of_clk10M) 变为 1 又变为 0 后再开始仿真逻辑。这是因为 pll 生成时钟存在一定的延迟,在仿真环境下大约需要 2000 ns。
此外,建议同学看仿真波形时把真正使用的时钟和对应的 rst 信号添加到波形中,便于观察。