首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM的CRC算法和基于FPGA的算法性能比较(3)

基于ARM的CRC算法和基于FPGA的算法性能比较(3)

3.  基于FPGACRC算法实现(PL端)




题目要求使用GP,HP,ACP总线完成数据帧的传输,如何完成数据帧的传输并界定帧的起始和截止是任务的重点。由于数据帧的长度并不大,也没有高速传输的要求,因此采用了最常用的GP总线。




实现方案:本人选择通过GP总线对自定义外设myip_crc_0中的4个控制/数据寄存器reg0~3进行读写,来完成数据帧的传输以及结果的返回功能。其中reg0为控制寄存器,包含标记帧起始的SOP和帧截止的EOP信号;reg1为数据寄存器,用于接收对端发送的32bit数据帧;reg2reg3用于存储CRC校验的结果和消耗的时间。在一次帧传输开始后,所有接收的32bit数据会被自动存入FIFO中,当EOP信号有效时开始对FIFO内的全部数据进行连续的CRC校验并进行计时,校验完成后将结果存储到寄存器中并返回给PS端。




设计细节:生成带有AXI从接口的自定义IP核是本题目设计中的一个重点,需要选择好对应参数,并同时生成驱动以备软件使用:








建立好新的IP后需要在AddressEditor中为其分配地址空间








然后进入IP Packager中对其进行各项配置








并且每次修改后记得进入“Reviewand Package”中点击”Re-package IP”进行保存。





IP核生成之后,下一步需要对AXI从接口模块源文件“myip_crc_v1_0_S00_AXI.v”进行部分修改并在其中例化自定义功能模块。该源文件包含AXI Slave接口中每个输入输出信号的含义注释以及AXI协议功能实现部分的代码注释,方便设计人员进行阅读和修改。




myip_crc_v1_0_S00_AXI.v中除了例化自定义的模块外,对协议本身部分的代码也进行了少许修改,使寄存器reg0~reg3可以同时被PL端进行赋值,并且控制向reg1写入的数据自动写入FIFO中。当接收到EOP信号后,启动CRC运算,连续读取FIFO中的数据包并进行校验,直到FIFO读空后完成本次校验并将结果写入寄存器reg2reg3中返回。

继承事业,薪火相传
返回列表