承接內(nèi)容一:
4.考慮是否涉及指令系統(tǒng)
本項目涉及指令系統(tǒng),上位機(jī)需要發(fā)送指令給FPGA,進(jìn)而配置溫度傳感器,配置溫度報警上限和下限值,同時可以發(fā)送指令控制數(shù)碼管顯示關(guān)閉,蜂鳴器開關(guān)。 因此,系統(tǒng)框圖中需要加入“寄存器解析模塊”,如下圖所示:
5.考慮外圍器件是否涉及寄存器配置
本項目中,DS18B20需要配置內(nèi)部寄存器,但是本項目并沒有采用MDY模板的方式(讀取配置寄存器表的方式來對DS18B20進(jìn)行配置),而是通過上位機(jī)發(fā)送配置命令,解析配置寄存器值再對DS18B20進(jìn)行配置。
6.根據(jù)實際情況,增加、補(bǔ)充或者拆分獨(dú)立對應(yīng)模塊,隨時調(diào)整
到第6步,根據(jù)數(shù)據(jù)流向,需要對模塊間的接口進(jìn)行詳細(xì)分析了,補(bǔ)充模塊或者將功能相同的模塊合并。
首先,從串口接口方向思考,
a) 接收到的數(shù)據(jù)是上位機(jī)發(fā)來的ASCII碼,為了方便FPGA對指令解析,需要將ASCII碼譯碼,轉(zhuǎn)化為對應(yīng)的十六進(jìn)制。因此需要一個ASCII碼轉(zhuǎn)8bit十六進(jìn)制模塊;
b) 接下來,需要對接收包文的包頭進(jìn)行檢測,符合正確包頭條件的包文保留,否則丟包處理。所以需要一個包頭檢測模塊,用來過濾接收到的有效包文;
c) 經(jīng)過寄存器解析模塊后,會將指令解析出來,根據(jù)指令功能要求可能分別發(fā)送給DS18B20、數(shù)碼管顯示開關(guān)控制模塊、數(shù)碼管段選位選接口模塊、蜂鳴器控制接口模塊;
d) 寄存器解析模塊發(fā)送過來的是8bit數(shù)據(jù),不能直接發(fā)送給DS18B20(18B20只接收單bit),所以在寄存器解析模塊和單總線轉(zhuǎn)換接口模塊之間需要一個8bit轉(zhuǎn)換為1bit模塊;
e) 溫度報警功能需要做判斷實時溫度是否大于上限值,是否小于下限值。所以需要一個實時溫度值比較判斷模塊;
f) 然后,從DS18B20方向思考;
g) 采集到的溫度數(shù)據(jù),通過單bit接口轉(zhuǎn)換模塊傳給FPGA的是單bit數(shù)據(jù),為了后面方便FPGA對數(shù)據(jù)進(jìn)行處理,需要將1bit轉(zhuǎn)換為8bit。所以需要一個1bit轉(zhuǎn)8bit模塊;
h) 8bit溫度數(shù)據(jù)需要經(jīng)過計算處理,因此需要一個數(shù)據(jù)處理模塊;
i) 上位機(jī)只顯示ASCII碼格式數(shù)據(jù),為實現(xiàn)溫度值在上位機(jī)上能顯示,需要將8bit溫度值轉(zhuǎn)換為ASCII碼,所以需要一個8bit十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII碼模塊;
j) 經(jīng)過數(shù)據(jù)處理后的結(jié)果是十六進(jìn)制,而數(shù)碼管顯示的是BCD碼,為了實現(xiàn)數(shù)碼管上顯示正確數(shù)據(jù),因此需要一個十六進(jìn)制轉(zhuǎn)BCD碼模塊。
完善后如下圖所示:
接下來將功能互斥、數(shù)據(jù)流向相關(guān),接口一致的模塊做合并化簡處理,如下圖所示:
7.考慮是否涉及多路進(jìn)一路出,要用FIFO
本項目數(shù)據(jù)流方面沒有涉及多路進(jìn)一路出的問題,不需要考慮此處的FIFO問題。
8.考慮是否涉及到速率匹配問題,要加上RDY信號或者FIFO
本項目涉及速率匹配問題。
首先考慮與外圍器件通信的接口上是否需要rdy信號。
與DS18B20通信是通過寄存器解析模塊解析出對DS18B20的操作指令,發(fā)送給8bit轉(zhuǎn)1bit模塊,因此需要考慮DS18B20能否時刻響應(yīng)操作指令?
這個問題在選擇上位機(jī)與FPGA的通信接口時,已經(jīng)考慮過了,串口的速率小于FPGA寫DS18B20速率的。
查閱手冊得知,寫一次1bit的數(shù)據(jù)給18B20需要63us,8bit需要63*8=504us,小于串口發(fā)送一次8bit指令給FPGA時間1000000us/9600*8=833us。
所以串口接收數(shù)據(jù)通路上不需要考慮緩存FIFO問題。
在單總線1bit接口轉(zhuǎn)換模塊中,由于寫DS18B20時序速率遠(yuǎn)小于FPGA內(nèi)部讀寫頻率,需要告知8bit轉(zhuǎn)1bit模塊每寫1bit數(shù)據(jù)要等一等,待時序滿足發(fā)送完1bit時序要求后,再發(fā)送新的1bit數(shù)據(jù)。所以在單bit接口轉(zhuǎn)換模塊與8bit轉(zhuǎn)1bit模塊間需要設(shè)rdy信號。
接下來考慮一下串口發(fā)送端。由于串口發(fā)送模塊進(jìn)行并串轉(zhuǎn)換需要時間,因此串口發(fā)送模塊需要告知上游十六制轉(zhuǎn)ASCII碼模塊等一等,因此在串口發(fā)送模塊與十六進(jìn)制轉(zhuǎn)ASCII碼模塊間需要設(shè)rdy信號。
由于串口發(fā)送模塊并串轉(zhuǎn)換需要等待,從而導(dǎo)致十六進(jìn)制轉(zhuǎn)ASCII碼模塊也需要緩存control模塊發(fā)來的數(shù)據(jù)。因此十六進(jìn)制轉(zhuǎn)ASCII碼模塊中需要引入FIFO。
最終得到的模塊圖如下所示:
到此,根據(jù)模塊劃分步驟一步步做下來,溫度檢測工程的模塊劃分雛形初步已經(jīng)完成。具體實踐中需要根據(jù)FPGA內(nèi)部信號的調(diào)整,隨時拆分或獨(dú)立來增減功能模塊。
以上就是我做模塊劃分的基本思路,大家有什么問題可以加Q群544453837進(jìn)行交流,更多FPGA相關(guān)資料可以登錄明德?lián)P論壇進(jìn)行學(xué)習(xí)討論:http://www.fpgabbs.cn/!