• 欢迎光临~

【P4】Verilog搭建单周期MIPS-CPU

开发技术 开发技术 2021-11-14 142次浏览

课下

Bug_Log

1.模块实例化的信号需先定义,且记得定义完备

其实testbench见过多次了,自己写的时候还想不清。

若实例化模块时使用的信号,若事先无声明,则会自动生成1bit此名称信号,自然在多位信号传输中便出错了。使用单位信号的模块到可以省略实现声明。

由于mips.v的clkreset信号,与自己写的下层模块的ClkRst信号长得挺像,以致于忘记声明,从而使下层模块接收到的时钟和复位信号均为未知高阻态。

2.assign的对象不为寄存器

细碎的语言基础啊。。从逻辑上也不可能对寄存器使用连续赋值。

语法检查不会报错,会在仿真时报错。

3.PC-IM地址问题

[31:0]] IM PC -> addr
[0] 0 (.data : 0x0000_0000)
[1] 4
[2] 8
... ...
[3071] 12284 (.data最后一个地址)
[3072] 12288 (.text : 0x0000_3000)
... ...
[4095] 16380 (此时可存入最大指令1024(=4095-3071)个)
... ...

Memory使用

  • reg[31:0] IM[0:4095]此声明下的memory从0开始;
  • $readmemh("<数据文件名>", <存储器名> [, <起始地址>, <终止地址>]); 每个被读取的数字都被存放到地址连续的存储器单元中。
    • 存储器单元的存放地址由系统任务的起始地址和结束地址说明
    • 文件中每个数据的存放地址在数据文件中说明,用@hh...h标识

4.PC地址和IM指令索引的转换遗漏

PC[31:2]才是IM的索引,写的时候忘记了。

同样在NPC的beq信号中,也忘了在尾部加2'b00

程序员灯塔
转载请注明原文链接:【P4】Verilog搭建单周期MIPS-CPU
喜欢 (0)