四川大學(xué) 田雪梅 王雅婕 高 博
高速峰值檢測模塊設(shè)計
四川大學(xué) 田雪梅 王雅婕 高 博
針對一組32行20列的640個16位有符號隨機二進(jìn)制陣列數(shù)據(jù)設(shè)計峰值檢測模塊,數(shù)據(jù)采用串行輸入,要求快速找到其中5個最大的峰值。峰值的定義是該數(shù)的絕對值大于它周圍的8個數(shù)的絕對值。為了在最短的時間內(nèi)在該串行隨機數(shù)陣列中找到最大的5個峰值,模塊采用一次掃描方式實現(xiàn),這樣的設(shè)計符合設(shè)計要求也能夠得到最短檢測用時,依據(jù)峰值定義設(shè)計掃描方式采用蛇形結(jié)構(gòu),通過把數(shù)據(jù)與前5個相關(guān)的數(shù)據(jù)比較,再與后5個相關(guān)的數(shù)據(jù)比較,接著與左邊或右邊相關(guān)數(shù)據(jù)比較,最后與之前確定的5個較大的峰值比較,來確定最新的5個較大的峰值的分步驟比較的思路。該模塊采用FPGA(Altera Cyclone ⅡEP2C35F672C6)設(shè)計,利用Verilog HDL描述,整體消耗3214個邏輯單元。通過設(shè)定640個隨機二進(jìn)制數(shù),對模塊進(jìn)行功能仿真和時序仿真。時序仿真結(jié)果表明,該模塊可以工作在90Mhz時鐘下,通過一次性掃描,工作大約7.15us完成對陣列的檢測,輸出5個最大的峰值的地址。
高速峰值檢測;陣列;現(xiàn)場可編程門陣列;硬件描述語言
對于二維數(shù)據(jù)的峰值檢測電路,跟一維的有所不同,我們對二維數(shù)據(jù)的讀取方式不同,進(jìn)行比較的時候能達(dá)到的速度也不相同。基于所用時長考慮,我們選擇了蛇形掃描的讀數(shù)方式,以使得連續(xù)讀出的數(shù)據(jù)可以構(gòu)成一個九宮格,直接將九宮格中心的數(shù)據(jù)的絕對值與其周圍的數(shù)據(jù)絕對值進(jìn)行比較,就可以判斷是否為峰值,這樣可以在一次掃描完數(shù)據(jù)就比較完,用時最短。在比較的時候,我們采用了標(biāo)識位置尋址的方法,使得比較的數(shù)據(jù)更為快捷和方便的讀出和比較。得出峰值后,我們把峰值從小到大存儲起來,新來的峰值與先存好的峰值進(jìn)行比較和替換,只存下5個最大的峰值,最后再將5個最大峰值的位置串行輸出。
需要比較的數(shù)據(jù)是存放在RAM里面的,我們通過一個掃描模塊,將RAM里面的數(shù)據(jù)按照想要的方式讀取出來,然后將數(shù)據(jù)送入一個比較模塊里面進(jìn)行比較,對每個數(shù)據(jù)進(jìn)行峰值判斷,然后將是峰值的數(shù)據(jù)輸出到峰值處理模塊中,對峰值進(jìn)行存儲,比較和替換,最后只留下5個最大的峰值,再輸入到串并轉(zhuǎn)換模塊中,將原來的并行輸出轉(zhuǎn)換成串行輸出,將5個最大峰值的位置輸出來。模塊構(gòu)建如下圖1所示。其中CLK是系統(tǒng)工作的時鐘,DATA是存入的數(shù)據(jù),RST是復(fù)位信號,輸出的ADD代表五個最大峰值的地址。
圖1 峰值檢測電路設(shè)計框圖
2.1 掃描模塊
掃描模塊能按照一定的規(guī)律輸出地址,使得輸出的地址可以在RAM里面按照蛇形掃描的方式讀出數(shù)據(jù),即按照(1,1),(1,2),(1,3),(2,3),(2,2),(2,1),(3,1),(3,2),(3,3)(行,列)......這樣的方式輸出。這樣的輸出方式對之后的比較十分的有利,并且可以允許我們在掃描完一次數(shù)據(jù)就可以完成全部的比較,得出最終的結(jié)果,可以使得所用時間周期大大減少,從而使得所用時間減少。
采用蛇形掃描的方式,把每三列數(shù)據(jù)分成1個單元,最后兩列單獨成1個單元,總共分成7個單元,掃描模塊主要采用了三個計數(shù)器,counter1實現(xiàn)1-7的計數(shù),來完成7個單元的掃描,counter1在counter2計數(shù)到32且counter3計數(shù)到1的時候,進(jìn)行計數(shù)加1。counter2實現(xiàn)1-32的計數(shù),來實現(xiàn)32行的計數(shù),counter2在counter3計數(shù)到1或3的時候,進(jìn)行計數(shù)加1。counter3實現(xiàn)1-6的計數(shù),并通過一定的加減運算,來完成蛇形掃描中相鄰兩行的計數(shù)。
圖2 蛇形掃描
2.2 RAM模塊
RAM模塊是用來存儲32行*20列數(shù)據(jù)的,本設(shè)計直接調(diào)用的Quartus集成的單口RAM的IP核[1],并利用mif文件對RAM存儲的數(shù)據(jù)進(jìn)行初始化處理,將需要比較的數(shù)據(jù)存儲到RAM里面,再進(jìn)行實例化,將RAM的地址端與掃描模塊輸出的地址端口進(jìn)行對應(yīng)的連接,則可以實現(xiàn)對RAM里面數(shù)據(jù)的蛇形掃描讀取。
2.3 比較模塊
比較模塊是此次設(shè)計的一個核心模塊,本設(shè)計采用蛇形掃描的讀數(shù)方式,將每3列數(shù)分成一個單元,在比較的時候,分別對左,中,右三列數(shù)據(jù)做不同的比較處理[2]。
圖3 中列數(shù)據(jù)
圖4 右列數(shù)據(jù)
圖5 左列數(shù)據(jù)
首先,對于蛇形單元中的中列數(shù)據(jù),以此數(shù)據(jù)為中心構(gòu)成的九宮格就在本單元之中,只需要將此數(shù)據(jù)的絕對值與九宮格中其它8個數(shù)的絕對值進(jìn)行比較即可,若此數(shù)據(jù)的絕對值比周圍8個數(shù)的絕對值大,則這個數(shù)就是一個峰值,可以直接作為此模塊的輸出。
再者對右列數(shù)據(jù)進(jìn)行處理。由于以右列數(shù)據(jù)為中心構(gòu)成的九宮格會涉及到下一個單元,所以對于右列數(shù)據(jù),先將此數(shù)據(jù)與本單元九宮格中的其他數(shù)據(jù)做一個比較,若此數(shù)的絕對值比本單元九宮格中的其它5個數(shù)的絕對值大,則這個數(shù)據(jù)有可能成為峰值,將其視為一個偽峰值,存儲下來,以便之后進(jìn)行進(jìn)一步的判斷,并且定義一個偽峰值信號來標(biāo)識偽峰值,若右列數(shù)據(jù)是偽峰值,則偽峰值信號存1,否則存0[3]。
圖6 左,中,右各列數(shù)據(jù)的處理方法
最后對于左列數(shù)的處理,由于以左列數(shù)為中心構(gòu)成的九宮格,會涉及到上一個單元,所以對于左列數(shù)據(jù),首先將其與本單元九宮格內(nèi)的其它5個數(shù)據(jù)進(jìn)行比較,再與上一單元存儲下來的右列數(shù)據(jù),并且在此九宮格內(nèi)的數(shù)據(jù)進(jìn)行比較,判斷是否為峰值,若是,則作為本模塊的峰值輸出。其次,要對上一單元右列對應(yīng)行的偽峰值信號做判斷,若為1,則代表上一單元此行的右列數(shù)是一個偽峰值,要再與本單元此行,此行的上一行和此行的下一行的左列數(shù)據(jù)做進(jìn)一步的比較,判斷是否位峰值,若是,則作為此模塊的峰值輸出(如圖6所示)。
[1]秦鴻剛,劉京科,吳迪.基于FPGA的雙口RAM實現(xiàn)及應(yīng)用[J].電子設(shè)計工程,2010,18(2):72-74.
[2]康磊,張燕燕.Verilog HDL數(shù)字系統(tǒng)設(shè)計——原理、實例及仿真[M].西安:西安電子科技大學(xué)出版社,2012.
[3]王金明,楊吉斌.數(shù)字系統(tǒng)設(shè)計與verilog HD[M].北京:電子工業(yè)出版社,2002.
[4]王建民.verilog HDL數(shù)字系統(tǒng)設(shè)計[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2011.
[5]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程(第3版)[M].北京:北京航空航天大學(xué)出版社,2013.
[6]曹艷,王碧芳.基于DE2開發(fā)板的圖像處理系統(tǒng)的設(shè)計與實現(xiàn)[J].信息技術(shù)與信息化,2015,2:150-151.
高博【通訊作者】(1975-),男,四川成都人,副教授,博士,四川大學(xué)微電子技術(shù)省重點實驗室,研究方向:集成電路芯片設(shè)計和生物醫(yī)學(xué)成像等。
本設(shè)計采用DDA圓弧插補算法,具有眾多的創(chuàng)新點和實用性,如ARM和FPGA之間采用帶有AHB總線的異步FIFO通信,大大提高了設(shè)計的可靠性和魯棒性;由PC機上的串口終端工具將輸入的數(shù)據(jù)信息傳送給ARM,操作簡單,使用便捷;輸入起點、終點和半徑,可靈活的根據(jù)輸入開關(guān)組合畫出四種不同的圓弧來,可以選擇圓弧的運行方向(順時針或逆時針),以及選擇靠經(jīng)原心還是遠(yuǎn)離原心的圓弧,功能豐富,形式多樣。在賽程的后期,我們在圓弧插補平臺的基礎(chǔ)上又增設(shè)了一個小項目,在十字滑臺下固定了四個步進(jìn)電機,提線木偶在運動的圓弧上,通過步進(jìn)電機完成一套設(shè)定的動作。最終本設(shè)計取得第六屆大學(xué)生集成電路設(shè)計大賽京微雅格杯二等獎。
參考文獻(xiàn)
[1]王誠,吳繼華,等.Altera FPGA/CPLD設(shè)計(基礎(chǔ)篇)[M].北京:人民郵電出版社,2005.7.
[2]周保廷,王柏軍.基于FPGA的數(shù)控數(shù)字積分法圓弧插補器的設(shè)計與實現(xiàn)[J].電氣傳動自動化,2005,27(5).16-18.
[3]陸俊,陳安民.基于FPGA技術(shù)的高速數(shù)控DDA插補器的設(shè)計與研究[J].組合機床與自動化加工技術(shù),2010,52(10):51-53.
[4]閻金棟.EDA技術(shù)在現(xiàn)代數(shù)控插補系統(tǒng)中的應(yīng)用研究[D].西安:西北工業(yè)大學(xué),2004.
[5]冼進(jìn),等.Verilog HDL數(shù)字控制系統(tǒng)設(shè)計實例[M].北京:中國水利水電出版社,2007.
作者簡介:
沈旭照(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-),女,漢族,四川德陽人,大學(xué)本科,四川大學(xué)微電子技術(shù)省重點實驗室,主要研究方向為集成電路設(shè)計。
王雅婕(1995-),女,陜西漢中人,大學(xué)本科,四川大學(xué)微電子技術(shù)省重點實驗室,主要研究方向為集成電路設(shè)計。