關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計(jì)應(yīng)用 > 基于SOPC的嵌入式高速串口設(shè)計(jì)

基于SOPC的嵌入式高速串口設(shè)計(jì)

作者: 時(shí)間:2008-04-02 來源:網(wǎng)絡(luò) 收藏
數(shù)據(jù)通信在現(xiàn)代通信系統(tǒng)和控制系統(tǒng)中應(yīng)用日益廣泛,較之傳統(tǒng)的基于RS232傳輸標(biāo)準(zhǔn),具有更高的可靠性,更強(qiáng)的兼容性,更快的傳輸速率。由于不同的串口數(shù)據(jù)通信采用的方式各不相同,有異步模式、同步模式,而且數(shù)據(jù)傳輸格式也各不相同,有的采用傳統(tǒng)SCI傳輸格式,有的采用自定義數(shù)據(jù)格式,有的采用幀長度固定方式,有的采用幀長度可變方式等,而且每一幀的數(shù)據(jù)長度可以從10bit到幾千bit,所以的設(shè)計(jì)要求不同其實(shí)現(xiàn)方案也不同。本文重點(diǎn)介紹基于(可編程系統(tǒng)芯片)的高速異步串口通信系統(tǒng)的設(shè)計(jì)方法。

  目前的處理器種類繁多。Altera 公司的Nios II處理器是用于可編程邏輯器件的可配置的軟核處理器,與Altera 的FPGA 組合,具有很高的性價(jià)比。

  總體設(shè)計(jì)及系統(tǒng)架構(gòu)

  數(shù)據(jù)通信系統(tǒng)采用雙線平衡驅(qū)動,半雙工同步傳輸或單向廣播同步傳輸,線路傳輸速率為5Mbits/s,總線連接關(guān)系如圖1所示。



  系統(tǒng)中主機(jī)模塊能調(diào)度總線上的數(shù)據(jù)幀收發(fā),保持?jǐn)?shù)據(jù)通信的實(shí)時(shí)性,數(shù)據(jù)傳輸時(shí)由主機(jī)模塊發(fā)送數(shù)據(jù)幀。數(shù)據(jù)幀若為半雙工同步傳輸幀,則數(shù)據(jù)幀只對其中一個(gè)外圍模塊有效,同時(shí)當(dāng)外圍模塊收到數(shù)據(jù)后,應(yīng)發(fā)送相應(yīng)的應(yīng)答信號;數(shù)據(jù)幀若為單向廣播同步傳輸幀,則數(shù)據(jù)發(fā)向所有外圍模塊,而不需要任何應(yīng)答信號。

  系統(tǒng)以固定的數(shù)據(jù)幀格式傳送數(shù)據(jù),不同于傳統(tǒng)的SCI格式,幀長為7字節(jié)(共56bits),由2字節(jié)引導(dǎo)序列、1字節(jié)地址,3字節(jié)數(shù)據(jù)、1字節(jié)幀結(jié)束序列組成。幀的發(fā)送順序:字節(jié)內(nèi)低位先發(fā),多字節(jié)內(nèi)低字節(jié)先發(fā)。

  無論是主機(jī)模塊還是外圍模塊均采用相同的串口通信設(shè)計(jì),串口通信設(shè)計(jì)包含兩個(gè)主要部分:通信接口部分和管理控制部分。通信接口部分主要完成數(shù)據(jù)幀結(jié)構(gòu)的封裝和解封裝,并通過幀頭的分析識別進(jìn)行時(shí)隙定位,同時(shí)能讓系統(tǒng)內(nèi)的每一終端實(shí)現(xiàn)多機(jī)共享通信資源的通信機(jī)制,該模塊由VHDL語言實(shí)現(xiàn)。管理控制部分由NiosII軟核實(shí)現(xiàn)的,為了能在串行通信方式上實(shí)現(xiàn)時(shí)分復(fù)用,進(jìn)而實(shí)現(xiàn)多設(shè)備同時(shí)通信,系統(tǒng)設(shè)計(jì)出一套完整而獨(dú)特的控制幀格式,并通過這些幀格式控制實(shí)現(xiàn)建立連接,撤銷連接和相應(yīng)管理。因此,利用NiosII的特點(diǎn),形成特殊的幀頭判決、同步時(shí)鐘提取、控制信息的判斷、收發(fā)模式變換,這些都依賴專用模塊的實(shí)施并靠高速執(zhí)行速度來適應(yīng)多終端下的高傳輸速率。

  鑒于以上系統(tǒng)架構(gòu)和設(shè)計(jì)要求,串口通信采用模塊化設(shè)計(jì)思路和方法,模塊結(jié)構(gòu)如圖2所示。

  NiosII軟核CPU開發(fā)工具 Builder提供簡潔的操作方式,可將用戶的數(shù)字電路模塊封裝成標(biāo)準(zhǔn)的NiosII軟核外設(shè)模塊,這使得NiosII軟核可以很容易地與用戶邏輯結(jié)合,構(gòu)成功能更加強(qiáng)大的SOC系統(tǒng)。在高速串口數(shù)據(jù)通信的設(shè)計(jì)中,既需要一個(gè)高速的處理器作為系統(tǒng)的控制管理核心,又有大量用戶自定義的數(shù)字電路功能模塊需要在FPGA芯片中實(shí)現(xiàn),因此,采用FPGA芯片和NiosII軟核CPU作為高速串口數(shù)據(jù)通信的硬件平臺是一個(gè)優(yōu)化的選擇。
  
  通信接口模塊設(shè)計(jì)

  通信接口模塊設(shè)計(jì)采用VHDL語言設(shè)計(jì),由兩部分組成:數(shù)據(jù)幀發(fā)送電路和數(shù)據(jù)幀接收電路。數(shù)據(jù)幀發(fā)送電路將NiosII 要發(fā)送的數(shù)據(jù)、地址按照數(shù)據(jù)幀格式進(jìn)行組幀,然后同步傳輸?shù)娇偩€上,該部分設(shè)計(jì)的關(guān)鍵是并串轉(zhuǎn)換、合并數(shù)據(jù)和同步控制,數(shù)據(jù)的發(fā)送率為5Mbits/s,而工作時(shí)鐘fclk為25MHz,對fclk進(jìn)行5分頻,得發(fā)送時(shí)鐘ftxd為5MHz。當(dāng)有數(shù)據(jù)要發(fā)送時(shí),每一個(gè)即ftxd的上升沿到來時(shí)傳送數(shù)據(jù),先發(fā)送幀頭2字節(jié)引導(dǎo)序列,即“1110011100111110”,然后發(fā)送串行數(shù)據(jù)。由于NiosII的內(nèi)部數(shù)據(jù)寬度通常是32位,故將1字節(jié)地址和3字節(jié)數(shù)據(jù)由軟件將其合并成一組32位寬度的數(shù)據(jù),合并時(shí)地址在低位,數(shù)據(jù)在高位,然后將要發(fā)送的32位數(shù)據(jù)緩存在一個(gè)32位寬度的矢量區(qū)間,引導(dǎo)序列結(jié)束后從低位到高位依次發(fā)送數(shù)據(jù),即data[0]、data[1]……data[31],最后發(fā)送結(jié)束標(biāo)志字節(jié)“1110011”,發(fā)送結(jié)束。

  接收電路的設(shè)計(jì)重點(diǎn)考慮的問題是如何準(zhǔn)確判斷到數(shù)據(jù)幀頭,然后解析地址,數(shù)據(jù)的速率為5Mbit/s,F(xiàn)PGA的工作時(shí)鐘fclk為25MHz,參考RS-232串口通信的設(shè)計(jì)思想,用高倍時(shí)鐘對接收的數(shù)據(jù)進(jìn)行采樣,即每5個(gè)fclk采樣一個(gè)bit,此處可以先設(shè)計(jì)一個(gè)5進(jìn)制計(jì)數(shù)器,每一次計(jì)數(shù),保存采集的數(shù)據(jù),在第2、3、4次采樣時(shí),若所采到的值相同,則判斷這個(gè)bit為當(dāng)前的采樣值。在判斷2字節(jié)引導(dǎo)序列時(shí)采用狀態(tài)機(jī)設(shè)計(jì)法和序列檢測器的設(shè)計(jì)思想,判斷第1個(gè)bit是否為‘0’,如果是‘0’則繼續(xù)判斷下一bit是否為‘1’,如果是‘1’則一直等待在第1狀態(tài)直到判斷到‘0’才跳轉(zhuǎn),判斷狀態(tài)機(jī)如圖3所示。

  用戶定義的Avalon總線模塊設(shè)計(jì)

  NiosII是基于RISC技術(shù)的通用處理器芯片軟內(nèi)核,它特別為可編程邏輯進(jìn)行了優(yōu)化設(shè)計(jì),也為可編程單芯片系統(tǒng)設(shè)計(jì)了一套綜合解決方案。Avalon總線是一種高效的總線結(jié)構(gòu),主要用于連接片內(nèi)處理器NiosII和各種外設(shè)IP core,以構(gòu)成可編程系統(tǒng)芯片()。數(shù)據(jù)幀發(fā)送電路和數(shù)據(jù)幀接收電路通過Avalon總線和NiosII處理器連接在一起,Avalon總線規(guī)范定義了主端口和從端口之間通過Avalon總線模塊傳輸數(shù)據(jù)所需的信號和時(shí)序。設(shè)計(jì)時(shí)通信模塊采用從端口傳輸模式,數(shù)據(jù)幀發(fā)送電路采用具有外設(shè)控制等待周期的從端口寫傳輸模式,發(fā)送電路除串行數(shù)據(jù)輸出線外,還必須提供符合Avalon總線傳輸要求的信號線,即Address、Writedata(31..0)、Write_n、Chipselect、Waitrequest,與NiosII工作同步的時(shí)鐘信號clk,當(dāng)CPU要發(fā)送數(shù)據(jù)時(shí),將Address、Write_n信號有效,同時(shí)將要發(fā)送的32位數(shù)據(jù)裝載到Writedata(31..0)上,而同步時(shí)鐘clk一直處于工作狀態(tài),當(dāng)clk上升沿判斷到以上信號有效后,Avalon總線對Address譯碼,然后置Chipselect有效,而發(fā)送電路VHDL程序設(shè)計(jì)時(shí)必須判斷Address、Chipselect是否有效,如果有效,則在下一個(gè)clk上升沿前將Waitrequest置為無效,數(shù)據(jù)傳送電路就從Avalon總線獲取Writedata數(shù)據(jù),如果Waitrequest有效,則這個(gè)總線周期就成為等待周期,其他信號以及數(shù)據(jù)信號保持不變,但外設(shè)必須保證不會使Waitrequest無限期地保持有效,這樣會使得一個(gè)從外設(shè)能夠?qū)valon總線永久“掛起”,其連接關(guān)系和時(shí)序關(guān)系如圖4所示。同理,數(shù)據(jù)接收電路采用具有外設(shè)控制等待周期的從端口讀傳輸模式,可以將串轉(zhuǎn)并后的數(shù)據(jù)送入到NiosII中進(jìn)行處理。


  
  軟件設(shè)計(jì)

  基于NiosII的C語言設(shè)計(jì),可以采用單線程模式,也可采用uc/基于NiosII的C語言設(shè)計(jì),可以采用單線程模式,也可采用uc/OSII多任務(wù)操作系統(tǒng)。這里對接收和發(fā)送的數(shù)據(jù)處理主要采用以下指令實(shí)現(xiàn),“IORD(base, 1)”讀指令,其中base就是需要讀取的外設(shè)基地址,數(shù)據(jù)接收電路作為外設(shè)在建立SOPC Builder時(shí)定義的名稱為“user_uart_rxd”,則base應(yīng)改為“user_uart_rxd_base”,而第2個(gè)參數(shù)‘1’表示其偏移地址;“IOWR(base, 1, data)”寫指令,其中base是需寫入外設(shè)基地址,數(shù)據(jù)發(fā)送電路作為外設(shè)在建立SOPC Builder時(shí)定義的名稱為“user_uart_txd”, 則base應(yīng)改為“user_uart_txd_base”,而第2個(gè)參數(shù)‘1’表示其偏移地址,第3個(gè)參數(shù)data是發(fā)送數(shù)據(jù)。

  計(jì)算機(jī)仿真波形如圖5、圖6所示。它們之間的時(shí)序關(guān)系參照本文的第二部分。

  結(jié)語

  運(yùn)用此5Mbit/s的UART進(jìn)行通信,效果十分穩(wěn)定、可靠性高,傳輸速度快,采用RS485接口模式傳輸距離遠(yuǎn),同時(shí)不易被干擾以至出現(xiàn)誤碼、丟數(shù)據(jù)、丟幀等情況。因此采用SOPC系統(tǒng)設(shè)計(jì)技術(shù)可以實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)的小型化、集成化和高可靠性,還可以減少風(fēng)險(xiǎn)、降低成本、縮短開發(fā)周期。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


關(guān)鍵詞: SOPC 嵌入式 高速串口

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉