
該模塊中的控制信號(hào)有ram_ce、ram_full、ram_lb、ram_oe、ram_ub、ram_we。其中ram_ce用于給SRAM芯片提供片選信號(hào),ram_full用于標(biāo)示SRAM存儲(chǔ)器中的空間,ram_oe信號(hào)用于給外部SRAM芯片輸出使能信號(hào);ram_we用于給外部SRAM芯片讀寫(xiě)控制信號(hào);外部SRAM芯片的I/O0-I/O15為16位數(shù)據(jù)線,模塊中用兩個(gè)信號(hào)ram_ub和ram_lb分別控制其高字節(jié)和低字節(jié)。
該模塊中用到的時(shí)鐘信號(hào)有兩個(gè),一個(gè)是SRAM寫(xiě)時(shí)鐘ram_wclk,一個(gè)是SRAM讀時(shí)鐘ram_rclk,這兩個(gè)時(shí)鐘均由時(shí)鐘產(chǎn)生模塊生成。因?yàn)镾RAM的寫(xiě)入數(shù)據(jù)是A/D轉(zhuǎn)換后的數(shù)據(jù),所以ram_wclk寫(xiě)時(shí)鐘應(yīng)該與AD的數(shù)據(jù)頻率一致為1kHz。從SRAM讀數(shù)據(jù)時(shí),是讀給后面的心電數(shù)據(jù)壓縮模塊處理,系統(tǒng)中的心電數(shù)據(jù)處理模塊的時(shí)鐘為50MHz,所以讀數(shù)據(jù)時(shí),采用50MHz,這樣可以最大限度地提高系統(tǒng)的實(shí)時(shí)性。
模塊中有兩個(gè)地址信號(hào): dsp_addr<17:0>和ram_addr<17:0>。dsp_addr<17:0>來(lái)自心電數(shù)據(jù)壓縮模塊,ram_addr<17:0>是用于給外部SRAM芯片地址信號(hào)。
該模塊的數(shù)據(jù)信號(hào)有三個(gè):ad_wdata<11:0>、dsp_rdata<11:0>和ram_data<11:0>。這三個(gè)數(shù)據(jù)信號(hào)分別與前面的AD轉(zhuǎn)換模塊、后面的心電數(shù)據(jù)壓縮模塊及FPGA外部的SRAM芯片連接。
2.4 心電數(shù)據(jù)的壓縮和通信
為了能實(shí)時(shí)存儲(chǔ)和傳送足夠長(zhǎng)的有用信號(hào),對(duì)采集的ECG信號(hào)必須采取一定的壓縮處理,為此該系統(tǒng)還集成了LADT數(shù)據(jù)壓縮算法模塊[3]。LADT模塊的輸入端口有三個(gè),分別為數(shù)據(jù)輸入端口dsp_data_in<11:0>、系統(tǒng)時(shí)鐘端口dsp_clk和全局停止信號(hào)rst;輸出端口有兩個(gè):數(shù)據(jù)輸出端口dsp_data_out<11:0>和送給SRAM的地址信號(hào)dsp_addr<17:0>。該模塊的頂層圖和仿真結(jié)果如圖5所示。

依據(jù)UART的通信原理在FPGA內(nèi)部設(shè)計(jì)了異步通信模塊,用于最終將實(shí)時(shí)壓縮處理后的數(shù)據(jù)上傳給上位機(jī)處理。異步通信模塊的幀格式是8位數(shù)據(jù)位,一個(gè)起止位,一個(gè)停止位。其中波特率為可調(diào),由時(shí)鐘發(fā)生模塊給予時(shí)鐘信號(hào)。
發(fā)送模塊中,din<7:0>為并行數(shù)據(jù)輸入;clk16×為時(shí)鐘信號(hào),由時(shí)鐘產(chǎn)生模塊給予,在時(shí)鐘發(fā)送模塊中該時(shí)鐘信號(hào)可調(diào);rst為復(fù)位信號(hào)(復(fù)位信號(hào)“1”);wrn為數(shù)據(jù)傳輸控制信號(hào)(信號(hào)為下降沿時(shí),讀入數(shù)據(jù));sdo為串行數(shù)據(jù)輸出。并串轉(zhuǎn)換后,在傳送之前加一位起止位、停止位后,再通過(guò)對(duì)發(fā)送模塊其他一些控制信號(hào)的編寫(xiě),就完成了整個(gè)發(fā)送模塊的設(shè)計(jì)。該模塊的頂層圖和仿真結(jié)果如圖6所示。

當(dāng)系統(tǒng)接收到上位機(jī)通過(guò)串行通信接口發(fā)送來(lái)的串行數(shù)據(jù)時(shí),要將其轉(zhuǎn)化為FPGA內(nèi)部使用的并行數(shù)據(jù),所以接收模塊的主要作用是用于串-并轉(zhuǎn)換。接收模塊中,clk16×為時(shí)鐘控制信號(hào);rst為復(fù)位信號(hào)(當(dāng)rst為“1”時(shí),所有工作信號(hào)復(fù)位);rxd為串口發(fā)送來(lái)的串行數(shù)據(jù);dout<7:0>為經(jīng)接收模塊進(jìn)行轉(zhuǎn)換后輸出的并行數(shù)據(jù);framing_error為幀錯(cuò)誤信號(hào)。程序的主體思想是:首先將接收到的串行數(shù)據(jù)逐位地放入移位寄存器rsr中,當(dāng)8位數(shù)據(jù)放滿后輸出給緩存rbr,并暫時(shí)保存在那里;當(dāng)收到發(fā)送信號(hào)時(shí)再將8位的并行信號(hào)輸出(這個(gè)過(guò)程實(shí)際上是發(fā)送模塊的逆過(guò)程,是將串行數(shù)據(jù)變?yōu)椴⑿袛?shù)據(jù),實(shí)現(xiàn)串并轉(zhuǎn)換);再通過(guò)對(duì)接收模塊其他一些控制信號(hào)的編寫(xiě),就完成了整個(gè)接收模塊的設(shè)計(jì)。該模塊的頂層圖和仿真結(jié)果如圖7所示。

一個(gè)完整的串口通信應(yīng)該有其協(xié)議,也就是說(shuō)往往是上位機(jī)應(yīng)先給下位機(jī)發(fā)送一個(gè)控制信號(hào)后,發(fā)送模塊才工作,即兩個(gè)模塊應(yīng)該協(xié)同工作,所以本文將這兩個(gè)模塊連接到了一起,并加入一些控制信號(hào),從而設(shè)計(jì)出串口通信模塊。模塊中的rxd用來(lái)接收上位機(jī)的數(shù)據(jù),并判斷數(shù)據(jù)是“AA”或者“55”,“AA”表示開(kāi)始接收數(shù)據(jù),“55”表示停止接收數(shù)據(jù)。
2.5 時(shí)鐘模塊
時(shí)鐘模塊產(chǎn)生其他所有模塊工作所需的時(shí)鐘,時(shí)鐘脈沖是控制信號(hào)以及系統(tǒng)能協(xié)調(diào)工作的基礎(chǔ)。根據(jù)前面幾個(gè)模塊的時(shí)鐘需求,設(shè)計(jì)了時(shí)鐘產(chǎn)生模塊。模塊輸入時(shí)鐘為clk,其頻率為50MHz,由外部有源晶振連接FPGA的全局時(shí)鐘管腳GCLK0提供。其余輸出時(shí)鐘為提供給幾個(gè)模塊的時(shí)鐘信號(hào),其中ad_clk是送給A/D轉(zhuǎn)換模塊的時(shí)鐘,da_clk送給D/A轉(zhuǎn)換模塊,ram_rclk和ram_wclk分別為SRAM模塊提供讀時(shí)鐘和寫(xiě)時(shí)鐘,dsp_clk為L(zhǎng)ADT模塊的工作時(shí)鐘,rxclk和txclk分別為UART模塊的接收時(shí)鐘和發(fā)送時(shí)鐘。該模塊的項(xiàng)層圖和仿真結(jié)果如圖8所示。 通過(guò)對(duì)FPGA芯片程序的下載,將6個(gè)功能模塊集成于芯片XC3S400中,該芯片內(nèi)部有40萬(wàn)門(mén),最終頂層模塊程序的資源占用情況如表1所示。從中可以看出,資源占用率很低,僅為8%,還留有大量的剩余資源,為系統(tǒng)的進(jìn)一步完善和增添其他功能模塊提供了可靠的保證,例如可以在FPGA芯片中增加心電數(shù)據(jù)分析模塊和無(wú)線通信模塊等。

本文設(shè)計(jì)了基于FPGA的集心電信號(hào)采集、存儲(chǔ)、處理和發(fā)送等功能于一體的實(shí)時(shí)心電傳感系統(tǒng)。 該系統(tǒng)在一片F(xiàn)PGA中完成了大部分實(shí)時(shí)監(jiān)護(hù)功能,并可以用修改軟件的方法來(lái)改進(jìn)或增加其功能,與現(xiàn)有的便攜式心電監(jiān)護(hù)儀相比,更具智能性。
參考文獻(xiàn)
[1] XILINX Corporation. Spartan-3 FPGA Family: Complete Data Sheet. DS099 March 4,2004
[2] 費(fèi)保蔚,莊天戈,程敬之,等.一種心電圖QRS波檢測(cè)方法. 北京生物醫(yī)學(xué)工程,1997,16(1):11-13.
[3] 韋建敏,楊永明,郭巧惠.基于FPGA的實(shí)時(shí)心電信號(hào)處理系統(tǒng)設(shè)計(jì).電子器件, 2005,28(3):581-583.





