《硬件地址識別管理》由會員分享,可在線閱讀,更多相關《硬件地址識別管理(4頁珍藏版)》請在裝配圖網上搜索。
1、硬件地址識別管理
摘要:在通信和控制系統(tǒng)中,常使用異步串行通信控制器(UART)實現系統(tǒng)輔助信息的傳輸。為實現多點通信,通常用軟件識別發(fā)往本站點或其它站點的數據,這會加大CPU的開銷。介紹了一種基于FPGA的UARTIP,由硬件實現多點通信時的數據過濾功能,降低了CPU的負擔,提高了系統(tǒng)性能。
關鍵詞:UART多點通信FPGA知識產權
在通信和控制系統(tǒng)中,常使用異步串行通信實現多塊單板之間的輔助通信,各個單板通過總線方式連接。為了實現點對點通信,需要由軟件定義一套較復雜的通信協議,過濾往來的數據,消耗了CPU較多的時間。89C51單片機有一種九位通信方式,采用一位地址位來實現通信對象的選
2、擇,只對發(fā)往本地址的地址發(fā)生中斷進而接收數據。通用的UART芯片如16C550和89C51等構成總線式的通信系統(tǒng)時,需要由CPU通過軟件處理接收到的地址和產生九位的數據。本文介紹的UART采用VerilogHDL硬件描述語言設計,可以用FPGA實現,可應用于SoC設計中。其主要特性如下:
全硬件地址識別,過濾數據不需要CPU的介入;支持一個特殊地址,可用于監(jiān)聽和廣播。
支持查詢和中斷兩種工作方式,中斷可編程。
接收和發(fā)送通路分別有128ByteFIFO,每個接收字節(jié)附帶狀態(tài)信息。
設計采用VerilogHDL語言,全同步接口,可移植性好。
支持自環(huán)測試功能。
波特率可以編程,支持八
3、位或者九位兩種數據格式。
設計的UART的九位串行數據格式如圖1所示。在空閑狀態(tài),數據線處于高電平狀態(tài)??偩€由高到低跳變,寬度為一個波特率時間的負脈沖為開始位,然后是8bit的數據位。數據位后面是lbit的地址信息位。如果此位是1,表示發(fā)送的字節(jié)是地址信息;如果此位是0,傳輸的是正常數據信息。地址指示位后是串行數據的停止位。
1UART設計
UART采用模塊化、層次化的設計思想,全部設計都采用VerilogHDL實現,其組成框圖如圖2所示。整個UARTIP由串行數據發(fā)送模塊、串行數據接收模塊、接收地址識別模塊、接收和發(fā)送HIFO、總線接口邏輯、寄存器和控制邏輯構成。串行發(fā)送模塊和接收完成
4、并/串及串/并的轉換,接收地址的識別由接收地址識別模塊完成。發(fā)送和接收HIFO用于緩存發(fā)送和接收的數據??偩€接口邏輯用于連接UARTIP內部總線和HOST接口。寄存器和控制邏輯實現UARTIP內部所有數據的收發(fā)、控制和狀態(tài)寄存器、內部中斷的控制及波特率信號的產生。以下詳細說明主要部分的設計原理。
1.1串行數據發(fā)送模塊
串行數據發(fā)送模塊將數據或地址碼由并行轉換為串行,并從串行總線輸出。設計采用有限狀態(tài)機實現,分為空閑、取數、發(fā)送三個狀態(tài)。其狀態(tài)遷移如圖3所示。各個狀態(tài)說明如下:
空閑狀態(tài):狀態(tài)機不斷檢測發(fā)送使能位、UART使能位和發(fā)送FIFO空/滿標志位,如果使能位為高、UART使能打開
5、且FIFO空標志位為低,串行發(fā)送進入取數狀態(tài)。
取數狀態(tài):在此狀態(tài),分兩個周期從發(fā)送FIFO中取出待發(fā)送的數據或者地址,然后進入發(fā)送狀態(tài)。
發(fā)送狀態(tài):在此狀態(tài),狀態(tài)機按照九位串行數據的格式依次發(fā)送開始位、數據位、地址指示位。待停止位發(fā)送完畢后,返回空閑狀態(tài)。一個字節(jié)的數據發(fā)送完畢后,進行下一個字節(jié)數據的發(fā)送流程。
1.2串行數據接收模塊
串行數據接收模塊用于檢測串行數據的開始位,將串行總線上的串行數據轉換成并行數據并輸出。接收邏輯也采用有限狀態(tài)機實現,分為空閑狀態(tài)、尋找開始位、接收數據和保存數據四個狀態(tài)。其狀態(tài)遷移圖如圖4所示。各個狀態(tài)說明如下:
空閑狀態(tài):在此狀態(tài),不斷檢測接收使能
6、、UART使能和串行輸入信號的狀態(tài)。如果串行輸入信號出現由高到低的電平變化且UART使能和接收使能都為高,則將采樣計數器復位,并進入尋找開始位狀態(tài)。
尋找開始位:在此狀態(tài),狀態(tài)機等待半個波特率的時間,然后重新檢測串行輸入的電平。如果為低,則判斷收到的開始位有效,進入接收數據狀態(tài);否則認為數據總線上出現干擾,開始位無效,重新返回空閑狀態(tài)。
接收數據:在此狀態(tài),依次接收串行數據線上的數據位、地址指示位和停止位,結束后進入保存數據狀態(tài)。
保存數據:此狀態(tài)將收到的串行數據以并行方式從接口的并行總線輸出,然后返回空閑狀態(tài),準備進行下一個字節(jié)數據的搜索和接收。
為提高對串行輸入上突發(fā)干擾的抵抗能力
7、,對于接收數據,在脈沖的中間位置連續(xù)采樣三次,較多的電平作為接收的有效數據。所有接收數據的采樣頻率為接收波特率的16倍。
1.3硬件地址識別模塊
硬件地址識別模塊用于從接收到的數據中判斷出地址和數據,在地址識別功能打開時,選擇數據通過或者丟棄;而該功能關閉時,所有數據都會通過。地址識別模塊是一個有兩個狀態(tài)的有限狀態(tài)機,分為地址和數據兩個狀態(tài)。其狀態(tài)遷移圖如圖5所示。狀態(tài)說明如下:
地址狀態(tài):在此狀態(tài)時,判斷接收到的數據以及地址識別使能位。如果地址識別功能沒有打開,對于接收的任何地址,都進入數據狀態(tài)。如果地址識別功能打開,則將收到的地址和本地地址比較,如果相等,則保存此地址,進入數據狀態(tài);
8、否則繼續(xù)在此狀態(tài)接收數據和地址,將收到的數據忽略。
數據狀態(tài):將接收到的數據輸出,直到收到地址位時,返回地址狀態(tài),處理地址。
為實現監(jiān)聽和廣播功能,將地址255作為特殊地址,它可以和任何地址匹配。若本站的地址為255,此站點可以接收任何地址的數據,此功能可以用于監(jiān)聽總線上的數據;若發(fā)送數據的目的地址為255,則任何站點都會接收到此數據,此功能可以用于發(fā)送廣播數據。
1.4FIFO設計
FIFO由控制邏輯和雙口RAM組成,控制邏輯用來實現將一個雙口RAM轉換成兩個FIFO的功能,這兩個FIFO分別用于發(fā)送和接收數據緩存;中斷控制用于在中斷工作方式時管理UART內部的中斷狀態(tài)和控制信息。
9、
為減少所需塊RAM的數量,接收和發(fā)送FIFO使用同一個塊RAM實現,使用仲裁機制保證兩個FIFO的四個端口,在同一時刻最多只有兩個操作,不影響對FIFO的讀寫。
1.5總線接口
UART采用同步接口,所有信號都在系統(tǒng)時鐘的上升沿采樣,設備的握手用一位應答信號完成。
數據總線寬度采用8+2的方式。和16位或者32位寬度的數據總線連接時,可以一次讀取接收數據的數據和地址指示位,減少總線操作次數;若和8位系統(tǒng)連接,可以只連接低8位數據線,接收數據的地址信息可以通過內部的狀態(tài)寄存器讀取。
1.6寄存器和控制邏輯
寄存器部分實現UART內部所有數據的收發(fā)、控制和狀態(tài)寄存,用于設置UART的數
10、據格式、收發(fā)波特率、FIFO控制、本地地址、地址識別、中斷控制和狀態(tài)寄存,實現對UART工作的控制。
控制邏輯產生所需的所有波特率信號及對應的上升和下降沿指示信號,并根據實際工作所選擇的波特率輸出與系統(tǒng)時鐘同步的對應信號。波特率產生邏輯的組成框圖如圖6所示。
2功能和時序仿真
首先結合功能仿真設計系統(tǒng)的仿真平臺。仿真平臺如圖7所示。系統(tǒng)仿真平臺和仿真激勵采用VerilogHDL語言設計,可同時用于功能仿真和時序仿真,不能用于二者的綜合。寄存器級模型為用于UARTIP設計的RTL描述,全部采用可以綜合的VerilogHDL語句編寫。仿真使用的軟件為ModelSim。
功能仿真包括以下幾個
11、方面:
(1)基本模塊連線時序的仿真。首先用描述方式設計UART的接口模型,利用仿真激勵進行簡單的讀寫操作,設計出仿真激勵信號和系統(tǒng)仿真平臺。然后結合仿真激勵信號逐步完成UART的各個子模塊的設計。仿真時,需要逐步觀察UART接口信號的波形、UART內部模塊的接口信號波形、各種狀態(tài)機的狀態(tài)遷移和數據指針的值以及狀態(tài)位的值,逐步完成寄存器傳輸級的UART設計。
(2)UART的工作仿真。完成RTL的寄存器傳輸級模型后,根據系統(tǒng)軟件工作的模式,用HDL設計出數據收發(fā)的仿真激勵,打開自環(huán)功能,進行數據的發(fā)送和接收。仿真可以分為仿真查詢和中斷兩種工作方式。對于中斷工作方式,需要用HDL語言模擬軟件
12、的中斷機制,
進行中斷工作方式的仿真。最后打開地址識別功能,發(fā)送不同目的地址的數據,觀察UART的硬件地址識別情況。
完成功能仿真后,將設計進行布局布線,生成Ver-ilogHDL形式的時序仿真模型和標準時延文件,利用與功能仿真相同的仿真平臺進行時序仿真。時序仿真只需要仿真工作方式。功能仿真和時序仿真使用相同的仿真平臺和激勵向量,這樣便于比較二者的差異,發(fā)現設計代碼存在的問題。
3綜合和測試結果
本設計用Synplicity公司的SynplifyPro作為綜合工具,用XilinxISE5.2作為布局布線工具,采用器件為XC2S100IIE-7。綜合結果顯示,該UARTIP占用資源情況為
13、:SLICE275個、內部塊RAM1個、I/O24個,HOST總線可以達到的頻率為73.2MHz。
測試程序參考仿真激勵的生成,用C語言在vxWorks操作系統(tǒng)下設計。測試所用方法和工作仿真完全相同,只是仿真激勵對應測試程序,而RTL模型對應實際的FP-GA器件。
多點測試使用了五塊單板,采用半雙工總線方式,定義簡單的數據包格式,用于檢測數據錯誤并返回數據。數據包的格式為地址開頭,后面是最大255Byte的數據;數據部分包括發(fā)送方的地址、數據校驗和及包的長度。另外,還定義簡單的驅動程序格式,完成基本數據的收發(fā)和控制,然后在上層加載多點通信協議。其中的一塊加載主設備程序,其它單板加載從設備程
14、序。主設備周期性地向其它從設備發(fā)送測試數據,并在規(guī)定的時間內等待接收目標單板的數據。從設備軟件只接收發(fā)給本單板的數據,如果校驗正確,將收到的數據發(fā)給主設備;如果有錯誤,則不進行任何操作。主設備若在規(guī)定時間內無法接收從設備的數據或者接收數據錯誤,則判斷通信異常,進行下一個設備的測試。
測試時,數據包長為240Byte,波特率為115200。常溫和高低溫環(huán)境下的測試結果表明,UARTIP工作穩(wěn)定可靠,達到了設計要求。
本UARTIP全部采用VerilogHDL設計,可以在采用FPGA實現的通訊和控制系統(tǒng)中作為系統(tǒng)多點通訊控制器,也可以用于片上系統(tǒng)(SoC)的設計。用于多點通信時,可以有效降低CPU的額外負擔,提高CPU系統(tǒng)的利用率。由于采用語言描述,移植性強,可以用于不同廠家、不同型號的FPGA芯片中,提高了系統(tǒng)的設計速度和效率。