本文为明德扬原创文章,转载请注明出处!
很多朋友在学习FPGA的时候会发现模块划分很令人头大,今天我就通过明德扬温度检测工程来与大家分享一下本人的划分思路。
明德扬温度检测工程是基于FPGA的一个实用项目,可以在明德扬的MP801开发板上进行实验学习。本工程功能虽小,但基本上涉及了FPGA的常见功能,如接口传输、指令解析、外设的控制等,是比较好的入门工程。
一、模块划分要点总结
1、列出项目的功能要求(客户提出的产品功能要求)
2、画出硬件的系统结构框图(添加外设)
3、框图中每个外围接口都对应有一个接口转换模块
接口转换模块的作用是将外围器件的接口时序转为通用的接口时序,或者将通用接口时序转换为外围器件接口时序,这样使得FPGA内部其他模块不用再关心外围接口的时序了。
MDY规范通用接口时序:
data以及对应的vld,传输单个数据格式
MDY的包文格式,din,vld,SOP,EOP,MTY,ERR
wren,waddr,wdata;rden,raddr,rdata,rdata_vld
4、考虑是否涉及指令系统(操作码+数据格式)
上位机,例如PC,ARM,DSP或者其他的器件,只涉及到一个接口,但是却有很多指令或者命令功能要发送,因此就需要一个指令系统。
指令系统一定会涉及到命令、地址和数据。这种情况,肯定会有一个“寄存器解析模块”,根据命令、地址和数据,改变相应的寄存器的值。
5、考虑外围器件是否涉及寄存器配置
项目中有某些外设,上电工作前需要进行配置才能按要求工作。因此需要对外设内部寄存器进行读写,这一流程是通过FPGA来进行配置。
遇到这个情况,使用MDY推荐的模块寄存器配置结构:
寄存器配置表模块+寄存器读写配置模块+外设配置接口时序转换模块
6、根据实际情况,增加、补充或者拆分,优化对应模块,随时调整
原则:根据接口信号,看模块间是否方便对接。接口就决定了模块功能。所以在这一层的调整,一定要清楚接口的定义。
7、考虑是否涉及多路进一路出,要用FIFO
调度FIFO要考虑自身带宽能否满足多路一起突发发送时的数据量情况。如果带宽不满足,就要要输出给上游模块