01-移植AZPR SoC到Xilinx Artix7 FPGA
说明
vivado 版本:Vivado 2018.3
参考书:CPU自制入门
Xilinx暑期FPGA学校学习 - 复杂IP/系统设计
任务:在Artix-7上移植实现AZPR SoC
下载源码:https://github.com/jonsonxp/sea_azpr 此源码由《CPU自制入门》译者赵谦上传并翻译,里面含有源码和移植到SEA的工程。
新建项目
新建vivado工程,将文件hw中的rtl_original文件夹拷贝一份导入到自己的工程中,再将constraint里的约束文件也拷贝导入。刚开始的顶层文件是testbench,将它移到仿真文件夹下,最后如下图,综合。
综合会有两个错误,主要是由于源码版本太低了,因此需要修改。
修改文件
找到rtl_sea中的这个文件覆盖报错的文件。
因为这个文件的接口改变了,因此需要对上层的调用进行修改,也可以用sea文件夹中的文件替代,再综合。
仿真
它是一个processor,只有硬件是不能仿真的,还需要给它配上软件才能仿真。打开sw文件夹中的azprasm文件夹,azprasm是一个汇编器,第二个py脚本主要把汇编器生成的文本文件转换成可以导入xilinx的Rom对它进行初始化的文件。demo文件在sea-LED中。可以在不同的使用场合下切换程序便于观测,点击run.bat执行脚本,得到test_binary.dat。
对rom进行初始化,添加一个initial的代码段,将dat文件加到项目里来,为了每次修改时直接能让它作用在工程中,就不拷贝到工程中。
开始Behavioral Simulation,验证结果,说明硬件代码的功能和软件的汇编程序都正常运行。
综合实现生成比特流
修改约束文件的管脚映射和时钟配置。
然后屏蔽掉uart,输入输出端口修改。
综合+实现
如果timing不收敛,可以点这个查看原因,具体拉开看详情的path。
在原本的设计当中,使用了两个时钟,通过一个主时钟生成了0相位和180°反相位的时钟,这样可以减少Memory访问时序的冗余。原本是10ns的时钟,Timing自动判断到变成了5ns,5ns就很难让时序收敛(我的板子主时钟本来就是20ns的周期,因此不会存在这个问题)。
如果存在这个问题,要么就是把反相时钟换成普通的时钟,要么就在约束文件中把时钟降低,修改成20ns的周期进行工作。
修改汇编程序,让他切换到板子工作的程序,重新生成,这样下载进板子现象比较明显。修改完后重新综合实现以下,再生成比特流文件。
总结
设计移植时的相关流程总结