四川大學(xué) 田雪梅 王雅婕 高 博
高速峰值檢測(cè)模塊設(shè)計(jì)
四川大學(xué) 田雪梅 王雅婕 高 博
針對(duì)一組32行20列的640個(gè)16位有符號(hào)隨機(jī)二進(jìn)制陣列數(shù)據(jù)設(shè)計(jì)峰值檢測(cè)模塊,數(shù)據(jù)采用串行輸入,要求快速找到其中5個(gè)最大的峰值。峰值的定義是該數(shù)的絕對(duì)值大于它周?chē)?個(gè)數(shù)的絕對(duì)值。為了在最短的時(shí)間內(nèi)在該串行隨機(jī)數(shù)陣列中找到最大的5個(gè)峰值,模塊采用一次掃描方式實(shí)現(xiàn),這樣的設(shè)計(jì)符合設(shè)計(jì)要求也能夠得到最短檢測(cè)用時(shí),依據(jù)峰值定義設(shè)計(jì)掃描方式采用蛇形結(jié)構(gòu),通過(guò)把數(shù)據(jù)與前5個(gè)相關(guān)的數(shù)據(jù)比較,再與后5個(gè)相關(guān)的數(shù)據(jù)比較,接著與左邊或右邊相關(guān)數(shù)據(jù)比較,最后與之前確定的5個(gè)較大的峰值比較,來(lái)確定最新的5個(gè)較大的峰值的分步驟比較的思路。該模塊采用FPGA(Altera Cyclone ⅡEP2C35F672C6)設(shè)計(jì),利用Verilog HDL描述,整體消耗3214個(gè)邏輯單元。通過(guò)設(shè)定640個(gè)隨機(jī)二進(jìn)制數(shù),對(duì)模塊進(jìn)行功能仿真和時(shí)序仿真。時(shí)序仿真結(jié)果表明,該模塊可以工作在90Mhz時(shí)鐘下,通過(guò)一次性掃描,工作大約7.15us完成對(duì)陣列的檢測(cè),輸出5個(gè)最大的峰值的地址。
高速峰值檢測(cè);陣列;現(xiàn)場(chǎng)可編程門(mén)陣列;硬件描述語(yǔ)言
對(duì)于二維數(shù)據(jù)的峰值檢測(cè)電路,跟一維的有所不同,我們對(duì)二維數(shù)據(jù)的讀取方式不同,進(jìn)行比較的時(shí)候能達(dá)到的速度也不相同?;谒脮r(shí)長(zhǎng)考慮,我們選擇了蛇形掃描的讀數(shù)方式,以使得連續(xù)讀出的數(shù)據(jù)可以構(gòu)成一個(gè)九宮格,直接將九宮格中心的數(shù)據(jù)的絕對(duì)值與其周?chē)臄?shù)據(jù)絕對(duì)值進(jìn)行比較,就可以判斷是否為峰值,這樣可以在一次掃描完數(shù)據(jù)就比較完,用時(shí)最短。在比較的時(shí)候,我們采用了標(biāo)識(shí)位置尋址的方法,使得比較的數(shù)據(jù)更為快捷和方便的讀出和比較。得出峰值后,我們把峰值從小到大存儲(chǔ)起來(lái),新來(lái)的峰值與先存好的峰值進(jìn)行比較和替換,只存下5個(gè)最大的峰值,最后再將5個(gè)最大峰值的位置串行輸出。
需要比較的數(shù)據(jù)是存放在RAM里面的,我們通過(guò)一個(gè)掃描模塊,將RAM里面的數(shù)據(jù)按照想要的方式讀取出來(lái),然后將數(shù)據(jù)送入一個(gè)比較模塊里面進(jìn)行比較,對(duì)每個(gè)數(shù)據(jù)進(jìn)行峰值判斷,然后將是峰值的數(shù)據(jù)輸出到峰值處理模塊中,對(duì)峰值進(jìn)行存儲(chǔ),比較和替換,最后只留下5個(gè)最大的峰值,再輸入到串并轉(zhuǎn)換模塊中,將原來(lái)的并行輸出轉(zhuǎn)換成串行輸出,將5個(gè)最大峰值的位置輸出來(lái)。模塊構(gòu)建如下圖1所示。其中CLK是系統(tǒng)工作的時(shí)鐘,DATA是存入的數(shù)據(jù),RST是復(fù)位信號(hào),輸出的ADD代表五個(gè)最大峰值的地址。
圖1 峰值檢測(cè)電路設(shè)計(jì)框圖
2.1 掃描模塊
掃描模塊能按照一定的規(guī)律輸出地址,使得輸出的地址可以在RAM里面按照蛇形掃描的方式讀出數(shù)據(jù),即按照(1,1),(1,2),(1,3),(2,3),(2,2),(2,1),(3,1),(3,2),(3,3)(行,列)......這樣的方式輸出。這樣的輸出方式對(duì)之后的比較十分的有利,并且可以允許我們?cè)趻呙柰暌淮螖?shù)據(jù)就可以完成全部的比較,得出最終的結(jié)果,可以使得所用時(shí)間周期大大減少,從而使得所用時(shí)間減少。
采用蛇形掃描的方式,把每三列數(shù)據(jù)分成1個(gè)單元,最后兩列單獨(dú)成1個(gè)單元,總共分成7個(gè)單元,掃描模塊主要采用了三個(gè)計(jì)數(shù)器,counter1實(shí)現(xiàn)1-7的計(jì)數(shù),來(lái)完成7個(gè)單元的掃描,counter1在counter2計(jì)數(shù)到32且counter3計(jì)數(shù)到1的時(shí)候,進(jìn)行計(jì)數(shù)加1。counter2實(shí)現(xiàn)1-32的計(jì)數(shù),來(lái)實(shí)現(xiàn)32行的計(jì)數(shù),counter2在counter3計(jì)數(shù)到1或3的時(shí)候,進(jìn)行計(jì)數(shù)加1。counter3實(shí)現(xiàn)1-6的計(jì)數(shù),并通過(guò)一定的加減運(yùn)算,來(lái)完成蛇形掃描中相鄰兩行的計(jì)數(shù)。
圖2 蛇形掃描
2.2 RAM模塊
RAM模塊是用來(lái)存儲(chǔ)32行*20列數(shù)據(jù)的,本設(shè)計(jì)直接調(diào)用的Quartus集成的單口RAM的IP核[1],并利用mif文件對(duì)RAM存儲(chǔ)的數(shù)據(jù)進(jìn)行初始化處理,將需要比較的數(shù)據(jù)存儲(chǔ)到RAM里面,再進(jìn)行實(shí)例化,將RAM的地址端與掃描模塊輸出的地址端口進(jìn)行對(duì)應(yīng)的連接,則可以實(shí)現(xiàn)對(duì)RAM里面數(shù)據(jù)的蛇形掃描讀取。
2.3 比較模塊
比較模塊是此次設(shè)計(jì)的一個(gè)核心模塊,本設(shè)計(jì)采用蛇形掃描的讀數(shù)方式,將每3列數(shù)分成一個(gè)單元,在比較的時(shí)候,分別對(duì)左,中,右三列數(shù)據(jù)做不同的比較處理[2]。
圖3 中列數(shù)據(jù)
圖4 右列數(shù)據(jù)
圖5 左列數(shù)據(jù)
首先,對(duì)于蛇形單元中的中列數(shù)據(jù),以此數(shù)據(jù)為中心構(gòu)成的九宮格就在本單元之中,只需要將此數(shù)據(jù)的絕對(duì)值與九宮格中其它8個(gè)數(shù)的絕對(duì)值進(jìn)行比較即可,若此數(shù)據(jù)的絕對(duì)值比周?chē)?個(gè)數(shù)的絕對(duì)值大,則這個(gè)數(shù)就是一個(gè)峰值,可以直接作為此模塊的輸出。
再者對(duì)右列數(shù)據(jù)進(jìn)行處理。由于以右列數(shù)據(jù)為中心構(gòu)成的九宮格會(huì)涉及到下一個(gè)單元,所以對(duì)于右列數(shù)據(jù),先將此數(shù)據(jù)與本單元九宮格中的其他數(shù)據(jù)做一個(gè)比較,若此數(shù)的絕對(duì)值比本單元九宮格中的其它5個(gè)數(shù)的絕對(duì)值大,則這個(gè)數(shù)據(jù)有可能成為峰值,將其視為一個(gè)偽峰值,存儲(chǔ)下來(lái),以便之后進(jìn)行進(jìn)一步的判斷,并且定義一個(gè)偽峰值信號(hào)來(lái)標(biāo)識(shí)偽峰值,若右列數(shù)據(jù)是偽峰值,則偽峰值信號(hào)存1,否則存0[3]。
圖6 左,中,右各列數(shù)據(jù)的處理方法
最后對(duì)于左列數(shù)的處理,由于以左列數(shù)為中心構(gòu)成的九宮格,會(huì)涉及到上一個(gè)單元,所以對(duì)于左列數(shù)據(jù),首先將其與本單元九宮格內(nèi)的其它5個(gè)數(shù)據(jù)進(jìn)行比較,再與上一單元存儲(chǔ)下來(lái)的右列數(shù)據(jù),并且在此九宮格內(nèi)的數(shù)據(jù)進(jìn)行比較,判斷是否為峰值,若是,則作為本模塊的峰值輸出。其次,要對(duì)上一單元右列對(duì)應(yīng)行的偽峰值信號(hào)做判斷,若為1,則代表上一單元此行的右列數(shù)是一個(gè)偽峰值,要再與本單元此行,此行的上一行和此行的下一行的左列數(shù)據(jù)做進(jìn)一步的比較,判斷是否位峰值,若是,則作為此模塊的峰值輸出(如圖6所示)。
[1]秦鴻剛,劉京科,吳迪.基于FPGA的雙口RAM實(shí)現(xiàn)及應(yīng)用[J].電子設(shè)計(jì)工程,2010,18(2):72-74.
[2]康磊,張燕燕.Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)——原理、實(shí)例及仿真[M].西安:西安電子科技大學(xué)出版社,2012.
[3]王金明,楊吉斌.數(shù)字系統(tǒng)設(shè)計(jì)與verilog HD[M].北京:電子工業(yè)出版社,2002.
[4]王建民.verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2011.
[5]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程(第3版)[M].北京:北京航空航天大學(xué)出版社,2013.
[6]曹艷,王碧芳.基于DE2開(kāi)發(fā)板的圖像處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù)與信息化,2015,2:150-151.
高博【通訊作者】(1975-),男,四川成都人,副教授,博士,四川大學(xué)微電子技術(shù)省重點(diǎn)實(shí)驗(yàn)室,研究方向:集成電路芯片設(shè)計(jì)和生物醫(yī)學(xué)成像等。
本設(shè)計(jì)采用DDA圓弧插補(bǔ)算法,具有眾多的創(chuàng)新點(diǎn)和實(shí)用性,如ARM和FPGA之間采用帶有AHB總線的異步FIFO通信,大大提高了設(shè)計(jì)的可靠性和魯棒性;由PC機(jī)上的串口終端工具將輸入的數(shù)據(jù)信息傳送給ARM,操作簡(jiǎn)單,使用便捷;輸入起點(diǎn)、終點(diǎn)和半徑,可靈活的根據(jù)輸入開(kāi)關(guān)組合畫(huà)出四種不同的圓弧來(lái),可以選擇圓弧的運(yùn)行方向(順時(shí)針或逆時(shí)針),以及選擇靠經(jīng)原心還是遠(yuǎn)離原心的圓弧,功能豐富,形式多樣。在賽程的后期,我們?cè)趫A弧插補(bǔ)平臺(tái)的基礎(chǔ)上又增設(shè)了一個(gè)小項(xiàng)目,在十字滑臺(tái)下固定了四個(gè)步進(jìn)電機(jī),提線木偶在運(yùn)動(dòng)的圓弧上,通過(guò)步進(jìn)電機(jī)完成一套設(shè)定的動(dòng)作。最終本設(shè)計(jì)取得第六屆大學(xué)生集成電路設(shè)計(jì)大賽京微雅格杯二等獎(jiǎng)。
參考文獻(xiàn)
[1]王誠(chéng),吳繼華,等.Altera FPGA/CPLD設(shè)計(jì)(基礎(chǔ)篇)[M].北京:人民郵電出版社,2005.7.
[2]周保廷,王柏軍.基于FPGA的數(shù)控?cái)?shù)字積分法圓弧插補(bǔ)器的設(shè)計(jì)與實(shí)現(xiàn)[J].電氣傳動(dòng)自動(dòng)化,2005,27(5).16-18.
[3]陸俊,陳安民.基于FPGA技術(shù)的高速數(shù)控DDA插補(bǔ)器的設(shè)計(jì)與研究[J].組合機(jī)床與自動(dòng)化加工技術(shù),2010,52(10):51-53.
[4]閻金棟.EDA技術(shù)在現(xiàn)代數(shù)控插補(bǔ)系統(tǒng)中的應(yīng)用研究[D].西安:西北工業(yè)大學(xué),2004.
[5]冼進(jìn),等.Verilog HDL數(shù)字控制系統(tǒng)設(shè)計(jì)實(shí)例[M].北京:中國(guó)水利水電出版社,2007.
作者簡(jiǎn)介:
沈旭照(1994-),男,江蘇濱海人,大學(xué)本科,集美大學(xué)信息工程學(xué)院。
Design of high speed peak detection module
In order to quickly fi nd the fi ve largest peaks,de fi ned as the absolute value of the number being the greatest among the absolute value of eight numbers around it, in the 640 16-bit signed random binary number array of 32 rows and 20 columns,we design a High-speed peak detection module. One-time scan is used in fi nding the maximum of fi ve peaks in the array of random numbers to achieve time reduction of detection. Besides, we adopt a scan way of serpentine, in which the present data is compared with the fi rst fi ve related data, then the data after them, and followed by the left or right side of them, and fi nally the former fi ve peak data, to determine the latest fi ve larger peak. The module uses hardware programming language in FPGA(Altera Cyclone ⅡEP2C35F672C6)design. The module is simulated in timing and function through the 640 random binary numbers. The result of timing simulation shows that it takes about 7.15us to complete the detection of the array and output the fi ve largest peak address work by using one-time scan under a frequency of 90Mhz.
high speed peak detection;array;FPGA;Verilog HDL
田雪梅(1995-),女,漢族,四川德陽(yáng)人,大學(xué)本科,四川大學(xué)微電子技術(shù)省重點(diǎn)實(shí)驗(yàn)室,主要研究方向?yàn)榧呻娐吩O(shè)計(jì)。
王雅婕(1995-),女,陜西漢中人,大學(xué)本科,四川大學(xué)微電子技術(shù)省重點(diǎn)實(shí)驗(yàn)室,主要研究方向?yàn)榧呻娐吩O(shè)計(jì)。