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