首页 > 其他分享 >学习心得 | 温度检测工程模块划分总结与案例分析

学习心得 | 温度检测工程模块划分总结与案例分析

时间:2022-12-02 15:34:42浏览次数:36  
标签:FPGA 寄存器 学习心得 接口 发送 案例 模块 串口

很多朋友在学习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要考虑自身带宽能否满足多路一起突发发送时的数据量情况。如果带宽不满足,就要要输出给上游模块RDY信号。此时RDY信号有效取决于自己设置FIFO的Almost Full信号。如果带宽满足则不必设RDY信号。

8、考虑是否涉及到速率匹配问题,要加上RDY信号或者FIFO

首先考虑与外围器件通信的接口上是否需要rdy信号(FPGA内部运行频率往往与设接口速率不一致),然后考虑FPGA内部模块间数据带宽是否不一致,有等一等的情况。

二、温度检测案例分析

接下来根据上面的总结的要点,通过实际项目案例来分析一下FPGA内部功能模块是怎样划分的。这里我们选取已经做过的温度检测项目,接下来按照上面总结的模块划分步骤,一步步完成模块初步划分!

1.列出项目的功能要求

    本项目功能要求:上位机通过发送一系列不同命令给FPGA,FPGA接收到指令后执行各个指令对应的操作。同时将DS18B20采集到的温度值实时在数码管上实时显示出来并传给上位机。要求上位机可以发送命令设置报警温度上限和下限值。当温度值超过温度上限或者下限,蜂鸣器就开始鸣响。可以发送命令关闭或打开数码管显示。

学习心得 | 温度检测工程模块划分总结与案例分析_串口

 画出系统框图如下所示:

学习心得 | 温度检测工程模块划分总结与案例分析_上位机_02

3.框图中每个外围接口都对应有一个接口转换模块

首先要思考PC与FPGA通信需要哪种方式?

上位机PC与FPGA通信既有发送也有接收,由于PC发送命令给FPGA的速度慢于FPGA回传温度值给PC的速度,所以上位机PC与FPGA通信接口速度取决于FPGA回传温度值给PC的速度。

学习心得 | 温度检测工程模块划分总结与案例分析_上位机_03

查阅手册如上图所示,得知DS18B20转换一次采集的温度值需要750ms。所以FPGA与上位机通信接口速率大于750ms就不会丢传数据。因此选用串口作为上位机与FPGA的通信接口足够满足要求了。

学习心得 | 温度检测工程模块划分总结与案例分析_串口_04

学习心得 | 温度检测工程模块划分总结与案例分析_串口_05

本项目涉及指令系统,上位机需要发送指令给FPGA,进而配置温度传感器,配置温度报警上限和下限值,同时可以发送指令控制数码管显示关闭,蜂鸣器开关。因此,系统框图中需要加入“寄存器解析模块”,如下图所示:

学习心得 | 温度检测工程模块划分总结与案例分析_上位机_06

本项目中,DS18B20需要配置内部寄存器,但是本项目并没有采用MDY模板的方式(读取配置寄存器表的方式来对DS18B20进行配置),而是通过上位机发送配置命令,解析配置寄存器值再对DS18B20进行配置。

6.根据实际情况,增加、补充或者拆分独立对应模块,随时调整

到第6步,根据数据流向,需要对模块间的接口进行详细分析了,补充模块或者将功能相同的模块合并。

首先,从串口接口方向思考,

学习心得 | 温度检测工程模块划分总结与案例分析_上位机_07

完善后如下图所示:

学习心得 | 温度检测工程模块划分总结与案例分析_串口_08

接下来将功能互斥、数据流向相关,接口一致的模块做合并化简处理,如下图所示:

学习心得 | 温度检测工程模块划分总结与案例分析_上位机_09

本项目数据流方面没有涉及多路进一路出的问题,不需要考虑此处的FIFO问题。


8.考虑是否涉及到速率匹配问题,要加上RDY信号或者FIFO

本项目涉及速率匹配问题。

首先考虑与外围器件通信的接口上是否需要rdy信号。

与DS18B20通信是通过寄存器解析模块解析出对DS18B20的操作指令,发送给8bit转1bit模块,因此需要考虑DS18B20能否时刻响应操作指令?

这个问题在选择上位机与FPGA的通信接口时,已经考虑过了,串口的速率小于FPGA写DS18B20速率的。

查阅手册得知,写一次1bit的数据给18B20需要63us,8bit需要63*8=504us,小于串口发送一次8bit指令给FPGA时间1000000us/9600*8=833us。

所以串口接收数据通路上不需要考虑缓存FIFO问题。

在单总线1bit接口转换模块中,由于写DS18B20时序速率远小于FPGA内部读写频率,需要告知8bit转1bit模块每写1bit数据要等一等,待时序满足发送完1bit时序要求后,再发送新的1bit数据。所以在单bit接口转换模块与8bit转1bit模块间需要设rdy信号。

接下来考虑一下串口发送端。由于串口发送模块进行并串转换需要时间,因此串口发送模块需要告知上游十六制转ASCII码模块等一等,因此在串口发送模块与十六进制转ASCII码模块间需要设rdy信号。

由于串口发送模块并串转换需要等待,从而导致十六进制转ASCII码模块也需要缓存control模块发来的数据。因此十六进制转ASCII码模块中需要引入FIFO。

最终得到的模块图如下所示:

学习心得 | 温度检测工程模块划分总结与案例分析_串口_10

到此,根据模块划分步骤一步步做下来,温度检测工程的模块划分雏形初步已经完成。具体实践中需要根据FPGA内部信号的调整,随时拆分或独立来增减功能模块。

以上就是我做模块划分的基本思路,大家有什么问题可以评论区留言。

学习心得 | 温度检测工程模块划分总结与案例分析_上位机_11

标签:FPGA,寄存器,学习心得,接口,发送,案例,模块,串口
From: https://blog.51cto.com/u_14636286/5907073

相关文章