Difftest的实现


Difftest的实现 封装Spike模拟器 使用python的pexpect库封装spike,spike输出日志转为各个寄存器的值,并存入csv表格,这样就获得了difftest的标准模版。 以下是加法器测试的部分寄存器日志。 与Verilator联合 一开始想实时运行spike和Verilato

Verilator的教程


写在前面 verilator作为一款轻量级开源仿真器,免费的前提下有较高性能,其次一生一芯要求使用它,所以不得不学。 总体来说就是套模板,按照手册的要求设置观察信号。需要注意的是顶层信号可以直接捕捉,但次级模块内的信号需要使用vpi进行捕捉。这是由于verilator将Verilog翻译成C++的时

直观理解SRT除法


直观理解SRT除法 恢复余数除法:商选择{1,0},每次迭代需要试减。 不恢复余数除法:商选择{1,-1},每次迭代直接比较余数是否大于0,最后需要商转译。 基2SRT除法:商选择{1,0,-1},通过使余数一直保持在特定区间,使商为0快速计算,如下图所示。 高基SRT除法:如基2SRT,商选择{2

Booth乘法器


快速理解Booth乘法器 串行乘法器 回忆竖式乘法,首先每一位与另一个数相乘,再将所得的积全部相加。在二进制中,相乘结果甚至只有它本身和0! 也就是只需要一个选择器和一个加法器就能实现串行乘法器,代价是很长的计算周期。 Booth编码 核心思想:乘法计算中如果出现0则他的部分积为0,如上图右侧PP1

快速理解超前进位加法器


快速理解超前进位加法器 写在前面 为了方便理解,本文会出现算式,但难度约等于1+1=2。详细推导请移步参考文献👍 2'bxxx表示:2位宽的2进制数xxx 最简单的加法器😎 最简单的加法器即半加器,他的输入输出可表示如下 A+B=2'bS 例如:1+1=2'b10 两个半加器组合形成全加器,即将

CPU简介


CPU简介 写在前面 该CPU诞生自一名打完电赛没事干的大三学生(9月~次年2月底)。由于没有队友加上课业繁忙,代码和屎山没有区别,目前也不打算整理,写文章仅做思路分享和记录。 原本打算参加一生一芯,但是需要定期检查进度太麻烦。不过一生一芯的教程写得挺详细,前60%的时间都是跟着一生一芯的教程走。除