四川大學 田雪梅 王雅婕 高 博
高速峰值檢測模塊設計
四川大學 田雪梅 王雅婕 高 博
針對一組32行20列的640個16位有符號隨機二進制陣列數據設計峰值檢測模塊,數據采用串行輸入,要求快速找到其中5個最大的峰值。峰值的定義是該數的絕對值大于它周圍的8個數的絕對值。為了在最短的時間內在該串行隨機數陣列中找到最大的5個峰值,模塊采用一次掃描方式實現,這樣的設計符合設計要求也能夠得到最短檢測用時,依據峰值定義設計掃描方式采用蛇形結構,通過把數據與前5個相關的數據比較,再與后5個相關的數據比較,接著與左邊或右邊相關數據比較,最后與之前確定的5個較大的峰值比較,來確定最新的5個較大的峰值的分步驟比較的思路。該模塊采用FPGA(Altera Cyclone ⅡEP2C35F672C6)設計,利用Verilog HDL描述,整體消耗3214個邏輯單元。通過設定640個隨機二進制數,對模塊進行功能仿真和時序仿真。時序仿真結果表明,該模塊可以工作在90Mhz時鐘下,通過一次性掃描,工作大約7.15us完成對陣列的檢測,輸出5個最大的峰值的地址。
高速峰值檢測;陣列;現場可編程門陣列;硬件描述語言
對于二維數據的峰值檢測電路,跟一維的有所不同,我們對二維數據的讀取方式不同,進行比較的時候能達到的速度也不相同?;谒脮r長考慮,我們選擇了蛇形掃描的讀數方式,以使得連續讀出的數據可以構成一個九宮格,直接將九宮格中心的數據的絕對值與其周圍的數據絕對值進行比較,就可以判斷是否為峰值,這樣可以在一次掃描完數據就比較完,用時最短。在比較的時候,我們采用了標識位置尋址的方法,使得比較的數據更為快捷和方便的讀出和比較。得出峰值后,我們把峰值從小到大存儲起來,新來的峰值與先存好的峰值進行比較和替換,只存下5個最大的峰值,最后再將5個最大峰值的位置串行輸出。
需要比較的數據是存放在RAM里面的,我們通過一個掃描模塊,將RAM里面的數據按照想要的方式讀取出來,然后將數據送入一個比較模塊里面進行比較,對每個數據進行峰值判斷,然后將是峰值的數據輸出到峰值處理模塊中,對峰值進行存儲,比較和替換,最后只留下5個最大的峰值,再輸入到串并轉換模塊中,將原來的并行輸出轉換成串行輸出,將5個最大峰值的位置輸出來。模塊構建如下圖1所示。其中CLK是系統工作的時鐘,DATA是存入的數據,RST是復位信號,輸出的ADD代表五個最大峰值的地址。

圖1 峰值檢測電路設計框圖
2.1 掃描模塊
掃描模塊能按照一定的規律輸出地址,使得輸出的地址可以在RAM里面按照蛇形掃描的方式讀出數據,即按照(1,1),(1,2),(1,3),(2,3),(2,2),(2,1),(3,1),(3,2),(3,3)(行,列)......這樣的方式輸出。這樣的輸出方式對之后的比較十分的有利,并且可以允許我們在掃描完一次數據就可以完成全部的比較,得出最終的結果,可以使得所用時間周期大大減少,從而使得所用時間減少。
采用蛇形掃描的方式,把每三列數據分成1個單元,最后兩列單獨成1個單元,總共分成7個單元,掃描模塊主要采用了三個計數器,counter1實現1-7的計數,來完成7個單元的掃描,counter1在counter2計數到32且counter3計數到1的時候,進行計數加1。counter2實現1-32的計數,來實現32行的計數,counter2在counter3計數到1或3的時候,進行計數加1。counter3實現1-6的計數,并通過一定的加減運算,來完成蛇形掃描中相鄰兩行的計數。

圖2 蛇形掃描
2.2 RAM模塊
RAM模塊是用來存儲32行*20列數據的,本設計直接調用的Quartus集成的單口RAM的IP核[1],并利用mif文件對RAM存儲的數據進行初始化處理,將需要比較的數據存儲到RAM里面,再進行實例化,將RAM的地址端與掃描模塊輸出的地址端口進行對應的連接,則可以實現對RAM里面數據的蛇形掃描讀取。
2.3 比較模塊
比較模塊是此次設計的一個核心模塊,本設計采用蛇形掃描的讀數方式,將每3列數分成一個單元,在比較的時候,分別對左,中,右三列數據做不同的比較處理[2]。

圖3 中列數據

圖4 右列數據

圖5 左列數據
首先,對于蛇形單元中的中列數據,以此數據為中心構成的九宮格就在本單元之中,只需要將此數據的絕對值與九宮格中其它8個數的絕對值進行比較即可,若此數據的絕對值比周圍8個數的絕對值大,則這個數就是一個峰值,可以直接作為此模塊的輸出。
再者對右列數據進行處理。由于以右列數據為中心構成的九宮格會涉及到下一個單元,所以對于右列數據,先將此數據與本單元九宮格中的其他數據做一個比較,若此數的絕對值比本單元九宮格中的其它5個數的絕對值大,則這個數據有可能成為峰值,將其視為一個偽峰值,存儲下來,以便之后進行進一步的判斷,并且定義一個偽峰值信號來標識偽峰值,若右列數據是偽峰值,則偽峰值信號存1,否則存0[3]。

圖6 左,中,右各列數據的處理方法
最后對于左列數的處理,由于以左列數為中心構成的九宮格,會涉及到上一個單元,所以對于左列數據,首先將其與本單元九宮格內的其它5個數據進行比較,再與上一單元存儲下來的右列數據,并且在此九宮格內的數據進行比較,判斷是否為峰值,若是,則作為本模塊的峰值輸出。其次,要對上一單元右列對應行的偽峰值信號做判斷,若為1,則代表上一單元此行的右列數是一個偽峰值,要再與本單元此行,此行的上一行和此行的下一行的左列數據做進一步的比較,判斷是否位峰值,若是,則作為此模塊的峰值輸出(如圖6所示)。
[1]秦鴻剛,劉京科,吳迪.基于FPGA的雙口RAM實現及應用[J].電子設計工程,2010,18(2):72-74.
[2]康磊,張燕燕.Verilog HDL數字系統設計——原理、實例及仿真[M].西安:西安電子科技大學出版社,2012.
[3]王金明,楊吉斌.數字系統設計與verilog HD[M].北京:電子工業出版社,2002.
[4]王建民.verilog HDL數字系統設計[M].哈爾濱:哈爾濱工業大學出版社,2011.
[5]夏宇聞.Verilog數字系統設計教程(第3版)[M].北京:北京航空航天大學出版社,2013.
[6]曹艷,王碧芳.基于DE2開發板的圖像處理系統的設計與實現[J].信息技術與信息化,2015,2:150-151.
高博【通訊作者】(1975-),男,四川成都人,副教授,博士,四川大學微電子技術省重點實驗室,研究方向:集成電路芯片設計和生物醫學成像等。

本設計采用DDA圓弧插補算法,具有眾多的創新點和實用性,如ARM和FPGA之間采用帶有AHB總線的異步FIFO通信,大大提高了設計的可靠性和魯棒性;由PC機上的串口終端工具將輸入的數據信息傳送給ARM,操作簡單,使用便捷;輸入起點、終點和半徑,可靈活的根據輸入開關組合畫出四種不同的圓弧來,可以選擇圓弧的運行方向(順時針或逆時針),以及選擇靠經原心還是遠離原心的圓弧,功能豐富,形式多樣。在賽程的后期,我們在圓弧插補平臺的基礎上又增設了一個小項目,在十字滑臺下固定了四個步進電機,提線木偶在運動的圓弧上,通過步進電機完成一套設定的動作。最終本設計取得第六屆大學生集成電路設計大賽京微雅格杯二等獎。
參考文獻
[1]王誠,吳繼華,等.Altera FPGA/CPLD設計(基礎篇)[M].北京:人民郵電出版社,2005.7.
[2]周保廷,王柏軍.基于FPGA的數控數字積分法圓弧插補器的設計與實現[J].電氣傳動自動化,2005,27(5).16-18.
[3]陸俊,陳安民.基于FPGA技術的高速數控DDA插補器的設計與研究[J].組合機床與自動化加工技術,2010,52(10):51-53.
[4]閻金棟.EDA技術在現代數控插補系統中的應用研究[D].西安:西北工業大學,2004.
[5]冼進,等.Verilog HDL數字控制系統設計實例[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-),女,陜西漢中人,大學本科,四川大學微電子技術省重點實驗室,主要研究方向為集成電路設計。