很多朋友在學(xué)習(xí)FPGA的時(shí)候會(huì)發(fā)現(xiàn)模塊劃分很令人頭大,今天我就通過(guò)明德?lián)P溫度檢測(cè)工程來(lái)與大家分享一下本人的劃分思路。
明德?lián)P溫度檢測(cè)工程是基于FPGA的一個(gè)實(shí)用項(xiàng)目,可以在明德?lián)P的MP801開(kāi)發(fā)板上進(jìn)行實(shí)驗(yàn)學(xué)習(xí)。本工程功能雖小,但基本上涉及了FPGA的常見(jiàn)功能,如接口傳輸、指令解析、外設(shè)的控制等,是比較好的入門(mén)工程。
一、模塊劃分要點(diǎn)總結(jié)
1、列出項(xiàng)目的功能要求(客戶(hù)提出的產(chǎn)品功能要求)
2、畫(huà)出硬件的系統(tǒng)結(jié)構(gòu)框圖(添加外設(shè))
3、框圖中每個(gè)外圍接口都對(duì)應(yīng)有一個(gè)接口轉(zhuǎn)換模塊
接口轉(zhuǎn)換模塊的作用是將外圍器件的接口時(shí)序轉(zhuǎn)為通用的接口時(shí)序,或者將通用接口時(shí)序轉(zhuǎn)換為外圍器件接口時(shí)序,這樣使得FPGA內(nèi)部其他模塊不用再關(guān)心外圍接口的時(shí)序了。
MDY規(guī)范通用接口時(shí)序:
data以及對(duì)應(yīng)的vld,傳輸單個(gè)數(shù)據(jù)格式
MDY的包文格式,din,vld,SOP,EOP,MTY,ERR
wren,waddr,wdata;rden,raddr,rdata,rdata_vld
4、考慮是否涉及指令系統(tǒng)(操作碼+數(shù)據(jù)格式)
上位機(jī),例如PC,ARM,DSP或者其他的器件,只涉及到一個(gè)接口,但是卻有很多指令或者命令功能要發(fā)送,因此就需要一個(gè)指令系統(tǒng)。
指令系統(tǒng)一定會(huì)涉及到命令、地址和數(shù)據(jù)。這種情況,肯定會(huì)有一個(gè)“寄存器解析模塊”,根據(jù)命令、地址和數(shù)據(jù),改變相應(yīng)的寄存器的值。
5、考慮外圍器件是否涉及寄存器配置
項(xiàng)目中有某些外設(shè),上電工作前需要進(jìn)行配置才能按要求工作。因此需要對(duì)外設(shè)內(nèi)部寄存器進(jìn)行讀寫(xiě),這一流程是通過(guò)FPGA來(lái)進(jìn)行配置。
遇到這個(gè)情況,使用MDY推薦的模塊寄存器配置結(jié)構(gòu):
寄存器配置表模塊+寄存器讀寫(xiě)配置模塊+外設(shè)配置接口時(shí)序轉(zhuǎn)換模塊
6、根據(jù)實(shí)際情況,增加、補(bǔ)充或者拆分,優(yōu)化對(duì)應(yīng)模塊,隨時(shí)調(diào)整
原則:根據(jù)接口信號(hào),看模塊間是否方便對(duì)接。接口就決定了模塊功能。所以在這一層的調(diào)整,一定要清楚接口的定義。
7、考慮是否涉及多路進(jìn)一路出,要用FIFO
調(diào)度FIFO要考慮自身帶寬能否滿(mǎn)足多路一起突發(fā)發(fā)送時(shí)的數(shù)據(jù)量情況。如果帶寬不滿(mǎn)足,就要要輸出給上游模塊RDY信號(hào)。此時(shí)RDY信號(hào)有效取決于自己設(shè)置FIFO的Almost Full信號(hào)。如果帶寬滿(mǎn)足則不必設(shè)RDY信號(hào)。
8、考慮是否涉及到速率匹配問(wèn)題,要加上RDY信號(hào)或者FIFO
首先考慮與外圍器件通信的接口上是否需要rdy信號(hào)(FPGA內(nèi)部運(yùn)行頻率往往與設(shè)接口速率不一致),然后考慮FPGA內(nèi)部模塊間數(shù)據(jù)帶寬是否不一致,有等一等的情況。
二、溫度檢測(cè)案例分析
接下來(lái)根據(jù)上面的總結(jié)的要點(diǎn),通過(guò)實(shí)際項(xiàng)目案例來(lái)分析一下FPGA內(nèi)部功能模塊是怎樣劃分的。這里我們選取已經(jīng)做過(guò)的溫度檢測(cè)項(xiàng)目,接下來(lái)按照上面總結(jié)的模塊劃分步驟,一步步完成模塊初步劃分!
1.列出項(xiàng)目的功能要求
本項(xiàng)目功能要求:上位機(jī)通過(guò)發(fā)送一系列不同命令給FPGA,F(xiàn)PGA接收到指令后執(zhí)行各個(gè)指令對(duì)應(yīng)的操作。同時(shí)將DS18B20采集到的溫度值實(shí)時(shí)在數(shù)碼管上實(shí)時(shí)顯示出來(lái)并傳給上位機(jī)。要求上位機(jī)可以發(fā)送命令設(shè)置報(bào)警溫度上限和下限值。當(dāng)溫度值超過(guò)溫度上限或者下限,蜂鳴器就開(kāi)始鳴響??梢园l(fā)送命令關(guān)閉或打開(kāi)數(shù)碼管顯示。
功能分析:
上位機(jī)發(fā)送命令給FPGA(開(kāi)關(guān)數(shù)碼管顯示、開(kāi)關(guān)蜂鳴器、復(fù)位溫度傳感器、開(kāi)啟溫度轉(zhuǎn)換,讀轉(zhuǎn)換后溫度值、設(shè)置報(bào)警溫度上限下限值);
讀寫(xiě)DS18B20;
數(shù)碼管顯示;
數(shù)碼管顯示開(kāi)關(guān)控制;
計(jì)算溫度值;
將計(jì)算后的溫度值發(fā)送給上位機(jī);
設(shè)置溫度上限、下限;
蜂鳴器開(kāi)關(guān)控制。
2.畫(huà)出硬件系統(tǒng)結(jié)構(gòu)框圖
根據(jù)步驟1總結(jié)出的功能要求,找到除FPGA外需要哪些外圍器件。
外圍器件總共需要四個(gè):
PC
數(shù)碼管
溫度傳感器DS18B20
蜂鳴器
畫(huà)出系統(tǒng)框圖如下所示:

3.框圖中每個(gè)外圍接口都對(duì)應(yīng)有一個(gè)接口轉(zhuǎn)換模塊
首先要思考PC與FPGA通信需要哪種方式?
上位機(jī)PC與FPGA通信既有發(fā)送也有接收,由于PC發(fā)送命令給FPGA的速度慢于FPGA回傳溫度值給PC的速度,所以上位機(jī)PC與FPGA通信接口速度取決于FPGA回傳溫度值給PC的速度。

查閱手冊(cè)如上圖所示,得知DS18B20轉(zhuǎn)換一次采集的溫度值需要750ms。所以FPGA與上位機(jī)通信接口速率大于750ms就不會(huì)丟傳數(shù)據(jù)。因此選用串口作為上位機(jī)與FPGA的通信接口足夠滿(mǎn)足要求了。
數(shù)碼管段選位選接口模塊:完成數(shù)碼管位選和段選的輸出
DS18B20單bit轉(zhuǎn)換接口模塊:DS18B20是單總線(xiàn)協(xié)議,只支持1bit數(shù)據(jù)傳輸,所以需要將MDY規(guī)范接口轉(zhuǎn)換為1bit
蜂鳴器開(kāi)關(guān)使能接口模塊:完成蜂鳴器開(kāi)關(guān)使能

將串口接口轉(zhuǎn)換模塊功能細(xì)分為“串口接收串轉(zhuǎn)并模塊”和“串口發(fā)送并轉(zhuǎn)串模塊”,進(jìn)一步轉(zhuǎn)化為符合MDY規(guī)范的接口。如下圖所示:

4.考慮是否涉及指令系統(tǒng)
本項(xiàng)目涉及指令系統(tǒng),上位機(jī)需要發(fā)送指令給FPGA,進(jìn)而配置溫度傳感器,配置溫度報(bào)警上限和下限值,同時(shí)可以發(fā)送指令控制數(shù)碼管顯示關(guān)閉,蜂鳴器開(kāi)關(guān)。因此,系統(tǒng)框圖中需要加入“寄存器解析模塊”,如下圖所示:

5.考慮外圍器件是否涉及寄存器配置
本項(xiàng)目中,DS18B20需要配置內(nèi)部寄存器,但是本項(xiàng)目并沒(méi)有采用MDY模板的方式(讀取配置寄存器表的方式來(lái)對(duì)DS18B20進(jìn)行配置),而是通過(guò)上位機(jī)發(fā)送配置命令,解析配置寄存器值再對(duì)DS18B20進(jìn)行配置。
6.根據(jù)實(shí)際情況,增加、補(bǔ)充或者拆分獨(dú)立對(duì)應(yīng)模塊,隨時(shí)調(diào)整
到第6步,根據(jù)數(shù)據(jù)流向,需要對(duì)模塊間的接口進(jìn)行詳細(xì)分析了,補(bǔ)充模塊或者將功能相同的模塊合并。
首先,從串口接口方向思考,
接收到的數(shù)據(jù)是上位機(jī)發(fā)來(lái)的ASCII碼,為了方便FPGA對(duì)指令解析,需要將ASCII碼譯碼,轉(zhuǎn)化為對(duì)應(yīng)的十六進(jìn)制。因此需要一個(gè)ASCII碼轉(zhuǎn)8bit十六進(jìn)制模塊;
接下來(lái),需要對(duì)接收包文的包頭進(jìn)行檢測(cè),符合正確包頭條件的包文保留,否則丟包處理。所以需要一個(gè)包頭檢測(cè)模塊,用來(lái)過(guò)濾接收到的有效包文;
經(jīng)過(guò)寄存器解析模塊后,會(huì)將指令解析出來(lái),根據(jù)指令功能要求可能分別發(fā)送給DS18B20、數(shù)碼管顯示開(kāi)關(guān)控制模塊、數(shù)碼管段選位選接口模塊、蜂鳴器控制接口模塊;
寄存器解析模塊發(fā)送過(guò)來(lái)的是8bit數(shù)據(jù),不能直接發(fā)送給DS18B20(18B20只接收單bit),所以在寄存器解析模塊和單總線(xiàn)轉(zhuǎn)換接口模塊之間需要一個(gè)8bit轉(zhuǎn)換為1bit模塊;
溫度報(bào)警功能需要做判斷實(shí)時(shí)溫度是否大于上限值,是否小于下限值。所以需要一個(gè)實(shí)時(shí)溫度值比較判斷模塊;
然后,從DS18B20方向思考;
采集到的溫度數(shù)據(jù),通過(guò)單bit接口轉(zhuǎn)換模塊傳給FPGA的是單bit數(shù)據(jù),為了后面方便FPGA對(duì)數(shù)據(jù)進(jìn)行處理,需要將1bit轉(zhuǎn)換為8bit。所以需要一個(gè)1bit轉(zhuǎn)8bit模塊;
8bit溫度數(shù)據(jù)需要經(jīng)過(guò)計(jì)算處理,因此需要一個(gè)數(shù)據(jù)處理模塊;
上位機(jī)只顯示ASCII碼格式數(shù)據(jù),為實(shí)現(xiàn)溫度值在上位機(jī)上能顯示,需要將8bit溫度值轉(zhuǎn)換為ASCII碼,所以需要一個(gè)8bit十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII碼模塊;
經(jīng)過(guò)數(shù)據(jù)處理后的結(jié)果是十六進(jìn)制,而數(shù)碼管顯示的是BCD碼,為了實(shí)現(xiàn)數(shù)碼管上顯示正確數(shù)據(jù),因此需要一個(gè)十六進(jìn)制轉(zhuǎn)BCD碼模塊。
完善后如下圖所示:

接下來(lái)將功能互斥、數(shù)據(jù)流向相關(guān),接口一致的模塊做合并化簡(jiǎn)處理,如下圖所示:

7.考慮是否涉及多路進(jìn)一路出,要用FIFO
本項(xiàng)目數(shù)據(jù)流方面沒(méi)有涉及多路進(jìn)一路出的問(wèn)題,不需要考慮此處的FIFO問(wèn)題。
8.考慮是否涉及到速率匹配問(wèn)題,要加上RDY信號(hào)或者FIFO
本項(xiàng)目涉及速率匹配問(wèn)題。
首先考慮與外圍器件通信的接口上是否需要rdy信號(hào)。
與DS18B20通信是通過(guò)寄存器解析模塊解析出對(duì)DS18B20的操作指令,發(fā)送給8bit轉(zhuǎn)1bit模塊,因此需要考慮DS18B20能否時(shí)刻響應(yīng)操作指令?
這個(gè)問(wèn)題在選擇上位機(jī)與FPGA的通信接口時(shí),已經(jīng)考慮過(guò)了,串口的速率小于FPGA寫(xiě)DS18B20速率的。
查閱手冊(cè)得知,寫(xiě)一次1bit的數(shù)據(jù)給18B20需要63us,8bit需要63*8=504us,小于串口發(fā)送一次8bit指令給FPGA時(shí)間1000000us/9600*8=833us。
所以串口接收數(shù)據(jù)通路上不需要考慮緩存FIFO問(wèn)題。
在單總線(xiàn)1bit接口轉(zhuǎn)換模塊中,由于寫(xiě)DS18B20時(shí)序速率遠(yuǎn)小于FPGA內(nèi)部讀寫(xiě)頻率,需要告知8bit轉(zhuǎn)1bit模塊每寫(xiě)1bit數(shù)據(jù)要等一等,待時(shí)序滿(mǎn)足發(fā)送完1bit時(shí)序要求后,再發(fā)送新的1bit數(shù)據(jù)。所以在單bit接口轉(zhuǎn)換模塊與8bit轉(zhuǎn)1bit模塊間需要設(shè)rdy信號(hào)。
接下來(lái)考慮一下串口發(fā)送端。由于串口發(fā)送模塊進(jìn)行并串轉(zhuǎn)換需要時(shí)間,因此串口發(fā)送模塊需要告知上游十六制轉(zhuǎn)ASCII碼模塊等一等,因此在串口發(fā)送模塊與十六進(jìn)制轉(zhuǎn)ASCII碼模塊間需要設(shè)rdy信號(hào)。
由于串口發(fā)送模塊并串轉(zhuǎn)換需要等待,從而導(dǎo)致十六進(jìn)制轉(zhuǎn)ASCII碼模塊也需要緩存control模塊發(fā)來(lái)的數(shù)據(jù)。因此十六進(jìn)制轉(zhuǎn)ASCII碼模塊中需要引入FIFO。
最終得到的模塊圖如下所示:

到此,根據(jù)模塊劃分步驟一步步做下來(lái),溫度檢測(cè)工程的模塊劃分雛形初步已經(jīng)完成。具體實(shí)踐中需要根據(jù)FPGA內(nèi)部信號(hào)的調(diào)整,隨時(shí)拆分或獨(dú)立來(lái)增減功能模塊。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1660文章
22424瀏覽量
636770 -
寄存器
+關(guān)注
關(guān)注
31文章
5610瀏覽量
130054 -
接口
+關(guān)注
關(guān)注
33文章
9532瀏覽量
157117 -
溫度檢測(cè)
+關(guān)注
關(guān)注
5文章
111瀏覽量
24735
發(fā)布評(píng)論請(qǐng)先 登錄
總結(jié)學(xué)習(xí)硬件設(shè)計(jì)要點(diǎn)
穿孔機(jī)頂頭檢測(cè)儀 機(jī)器視覺(jué)深度學(xué)習(xí)
單片機(jī)C語(yǔ)言編程的心得
為進(jìn)行檢測(cè)溫度的記錄,可使用串口數(shù)據(jù)記錄模塊來(lái)實(shí)現(xiàn)
嵌入式系統(tǒng)軟件架構(gòu)通常劃分
諧波檢測(cè)設(shè)備的精度等級(jí)是如何劃分的?
藍(lán)牙協(xié)議分析儀能檢測(cè)哪些問(wèn)題?
帶功率檢測(cè)器的 5 GHz 前端模塊 skyworksinc
PCB的EMC設(shè)計(jì)(二):模塊劃分及特殊器件的布局
學(xué)電路設(shè)計(jì)分享學(xué)習(xí)心得、技術(shù)疑問(wèn)及實(shí)戰(zhàn)成果
FLIR紅外熱像儀在溫度檢測(cè)中的應(yīng)用
溫度采集模塊在線(xiàn)感知環(huán)境變化
活動(dòng)名單公布!學(xué)電路設(shè)計(jì)分享學(xué)習(xí)心得、技術(shù)疑問(wèn)及實(shí)戰(zhàn)成果,贏取專(zhuān)屬禮品!
如何操作時(shí)域網(wǎng)絡(luò)分析儀進(jìn)行故障檢測(cè)?
從設(shè)備連接到精準(zhǔn)監(jiān)控:虹科溫度采集模塊技術(shù)精講
學(xué)習(xí)心得|溫度檢測(cè)工程模塊劃分總結(jié)與案例分析
評(píng)論