《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于Nios的通用編譯碼器的設(shè)計
基于Nios的通用編譯碼器的設(shè)計
聶 偉,, 楊曉青
摘要: 提出了一種基于Nios的通用編譯碼器的設(shè)計,,利用嵌入在FPGA中的Nios處理器,對多種編譯碼模塊進行控制。詳細(xì)論述了主要模塊的設(shè)計和實現(xiàn)方案及整個系統(tǒng)的啟動機制,。該編譯碼器在通信原理教學(xué)實驗系統(tǒng)中運行良好,,體現(xiàn)了它的穩(wěn)定性及可擴展性,。
關(guān)鍵詞: NiosⅡ 編譯碼器 Altera
Abstract:
Key words :

  摘 要: 提出了一種基于Nios的通用編譯碼器" title="編譯碼器">編譯碼器的設(shè)計,,利用嵌入在FPGA中的Nios處理器,,對多種編譯碼模塊進行控制,。詳細(xì)論述了主要模塊的設(shè)計和實現(xiàn)方案及整個系統(tǒng)的啟動機制。該編譯碼器在通信原理教學(xué)實驗系統(tǒng)中運行良好,,體現(xiàn)了它的穩(wěn)定性及可擴展性,。
  關(guān)鍵詞: Nios 位同步 幀同步


  altera" title="altera">altera.com/">Altera公司的Nios是基于RISC技術(shù)的通用嵌入式處理器芯片軟核,它特別為可編程邏輯進行了優(yōu)化設(shè)計,,也為可編程單芯片系統(tǒng)(SOPC)設(shè)計了一套綜合解決方案,。Nios采用改進的哈佛存儲器結(jié)構(gòu),CPU帶有分離的數(shù)據(jù)和程序存儲器總線控制,,并具備高速緩存,、中斷處理功能。與其他傳統(tǒng)的CPU相比,,Nios指令系統(tǒng)可通過自定義指令和標(biāo)準(zhǔn)CPU選項,,利用硬件來明顯提高系統(tǒng)性能,而這一措施的實現(xiàn)對PLD中處理器軟核非常有利,。Nios開發(fā)者可以在速度和面積間選擇,,增加了SOPC設(shè)計的靈活性。
  基于Nios設(shè)計的這一款通用編譯碼器,,是將多種編譯碼模塊和微處理器控制部分集成到單片F(xiàn)PGA內(nèi)部,,大大減少了處理器外圍擴展電路數(shù)目、提高了系統(tǒng)集成度,、降低了外圍電路布局走線的復(fù)雜度,、提高了系統(tǒng)的抗干擾能力。由于FPGA的可編程性,,使系統(tǒng)的擴展和升級更加容易,,通過設(shè)置不同的技術(shù)指標(biāo),可以應(yīng)用到多種通信系統(tǒng)中,。
1 總體設(shè)計方案
  通用編譯碼器總體方案框圖如圖1所示,。它由信息源、編碼器模塊,、信道仿真模塊,、同步提取模塊、譯碼器模塊,、存儲器模塊,、LCD和鍵盤模塊組成,整個系統(tǒng)在嵌入式處理器軟核的控制下完成對各種外設(shè)的操作,包括設(shè)置編譯碼類型和信碼速率,、LCD顯示等。


  該編譯碼器可以完成卷積碼,、CRC碼,、RS碼等多種編譯碼方案。整個系統(tǒng)可工作在兩種模式下:(1)調(diào)試模式,。這種模式主要應(yīng)用于系統(tǒng)調(diào)試及實驗操作,。在該模式下,信息源為其他模塊提供信碼,,以便調(diào)試同步提取模塊,、編譯碼模塊以及系統(tǒng)連接;信道仿真模塊處于正常工作狀態(tài)時,,可向傳輸碼元中加入干擾,,以檢驗譯碼器是否正常工作。(2)應(yīng)用模式,。這種模式主要應(yīng)用于實際系統(tǒng),。在該模式下,信息源模塊只是把用戶提供的信碼傳輸給編碼器,,而信道仿真模塊并不工作,,編碼模塊及譯碼模塊互不連接,編碼后碼元在特定的信道中傳輸,,然后再回到譯碼器,。
  設(shè)計過程中使用的軟件平臺主要有Quartus Ⅱ、SOPC Builder和Nios IDE,。其中,,Quartus Ⅱ主要用于整個系統(tǒng)的構(gòu)建、編譯,、綜合,、適配、時序分析和下載,。整個SOPC系統(tǒng)設(shè)計完成后,,在Quartus Ⅱ下進行管腳分配和編譯,并生成pof或sof文件下載到專用配置器件或FPGA中,;SOPC Builder用于Nios微處理器和外圍模塊的集成設(shè)計,,Nios微處理器系統(tǒng)設(shè)計完成后,通過“System Generation”產(chǎn)生可用于Quartus Ⅱ綜合的VHDL描述,,同時生成Symbol文件供調(diào)用,;Nios IDE用于Nios處理器的軟件開發(fā)、調(diào)試和下載。
2 硬件實現(xiàn)
  硬件主要包括定制合適的CPU和外設(shè),、編譯碼模塊,、同步提取模塊、鍵盤顯示,、存儲器模塊,。
2.1 位同步提取模塊設(shè)計
  在數(shù)字通信中,位同步是最基本的同步,。它的基本含義是接收端和發(fā)送端時鐘信號必須同頻同相,,這樣接收端才能正確接收和判決發(fā)送端送來的每一個碼元。實現(xiàn)位同步的方法可分為外同步法和自同步法,。目前,,在數(shù)字通信系統(tǒng)中,常常采用數(shù)字鎖相法提取位同步[1],,它屬于自同步法,。
  位同步提取原理圖如圖2所示。它由晶振,、分頻器,、相位比較器和控制器組成。其中控制器包括圖中所示的扣除門,、附加門和或門,。若接收碼元的速率為F(波特),則要求位同步脈沖的重復(fù)速率也為F,。這時,,晶振的振蕩頻率應(yīng)設(shè)在NF(赫),由晶振輸出經(jīng)整形得到重復(fù)頻率為NF的窄脈沖,,經(jīng)扣除門,、或門并N次分頻后,就可得到頻率為F的信號,。如果此信號不能準(zhǔn)確反映接收碼元的頻率和相位,,就要根據(jù)相位比較器輸出的誤差信號,通過控制器對分頻器進行調(diào)整,。接收碼元的相位可以從基帶信號的過零點提取,,將每個碼元的寬度分為兩個區(qū):前半碼元稱為滯后區(qū)。若位同步脈沖波形落入此區(qū),,分頻器輸出脈沖,,使‘與門’B有輸出,經(jīng)過單穩(wěn)2產(chǎn)生一滯后脈沖,。后半碼元稱為超前區(qū),,若位同步脈沖落入此區(qū),分頻器的另一端使‘與門’A有輸出,經(jīng)過單穩(wěn)1產(chǎn)生一超前脈沖,。這樣無論位同步脈沖超前或滯后,,都會分別送出超前或滯后脈沖對加于分頻器的脈沖進行扣除或附加,達(dá)到相位調(diào)整的目的,。


  圖2中的單穩(wěn)3是為了保證‘與門’A先有輸出,,以防位同步輸出的脈沖與接收碼元的相位相差180°。對位同步提取電路進行時序仿真,,得到的仿真波形如圖3所示。圖3中,,codein為輸入碼流,,weifen為提取出的碼元起始相位,weitongbu為位同步信號輸出,。
2.2 幀同步提取模塊設(shè)計
  數(shù)字通信時,,一般總是以一定數(shù)目的碼元組成一個“句”進行傳輸。在本設(shè)計中,,為了方便部分編碼方法的實現(xiàn),,采用了加幀頭的方法。因此在解碼端,,相應(yīng)設(shè)計了幀同步信號的提取模塊,。實現(xiàn)幀同步的基本方法是在發(fā)送端預(yù)先規(guī)定的時隙插入一組特殊碼形的幀同步碼組,在接收端有幀同步檢測電路檢測該碼組以保證收發(fā)幀同步,。
  本方案中幀同步碼為7位巴克碼,,即1110010,集中插入到每幀的第2~8個碼元位置上,,其原理框圖如圖4所示,。本模塊可分為信號源、巴克碼識別器和同步保護三部分,。每幀的具體結(jié)構(gòu)可以通過鍵盤設(shè)置,,此處以每幀24位為例,其中后16位為信息碼元,,則設(shè)置分頻器1為24分頻,,分頻器2設(shè)為3分頻。巴克碼識別器由圖5所示的電路來實現(xiàn),。在移位時鐘信號的作用下,,當(dāng)7位巴克碼全部移進移位寄存器時,圖5中的D0~D6全部為1,。L0~L2端為門限控制端,,其中L1和L2段已設(shè)置為1,而L0由同步保護端控制,只有當(dāng)D0~D6中1的個數(shù)不小于門限值時,,qout端才輸出一脈沖,,表示一幀的開始。

 


  圖5中,,同步保護的作用是減少假同步和漏同步,。當(dāng)無基帶信號輸入或有基帶信號輸出但識別器無輸出時,‘與門’1關(guān)閉,,‘與門’2打開,,單穩(wěn)輸出信號通過‘與門’2輸入到分頻器2,分頻器2的輸出信號使RS置0,,從而關(guān)閉‘與門’3,,同步器無輸出信號;此時Q的反向端高電平把判決門限的電平置為7,,打開‘與門’1,,同步器處于捕捉狀態(tài),只要識別器輸出一個信號,,‘與門’4就可以輸出一個置0脈沖使分頻器1置0,。這樣分頻器1就可以輸出與識別器同頻同相的信號。識別器輸出信號通過‘與門’1后使?fàn)顟B(tài)觸發(fā)器置1,,從而打開‘與門’3,,輸出幀同步信號,同時使判決門限降為6,,關(guān)閉‘或門’,,使同步器進入維持狀態(tài)。在維持狀態(tài)下,,因為判決門限較低,,故識別器的漏識別概率減小,假識別概率增加,,但假識別信號與單穩(wěn)輸出信號不同步,,故‘與門’1與‘與門’4不輸出假識別信號,‘與門’3輸出的仍是正確的幀同步信號,。在維持狀態(tài)下,,也可能出現(xiàn)漏識別,但由于漏識別概率比較小,,只要識別器不連續(xù)出現(xiàn)三次漏識別,,則分頻器2就不輸出一個脈沖信號,維持態(tài)不變,;若超過三次,,則維持態(tài)變?yōu)椴蹲綉B(tài),,重新捕獲幀同步碼。若首次捕獲的是信息數(shù)據(jù)中與幀同步碼完全相同的碼元序列,,則系統(tǒng)將進入錯誤的同步維持狀態(tài),。如果連續(xù)傳輸以一幀為周期的信號,此狀態(tài)將維持下去,。但在實際傳輸中,,連續(xù)幾幀都輸出假識別信號的概率極小,所以這種錯誤的同步維持狀態(tài)存在的時間很短,。
2.3 編譯碼模塊設(shè)計
  限于篇幅,,本文只簡單介紹漢明碼與卷積編碼模塊的實現(xiàn)。它們已很好地應(yīng)用在本實驗室的通信系統(tǒng)實驗箱中,。
2.3.1 漢明碼編譯碼模塊
  以(7,,4)漢明碼為例,校正子與錯碼位置的對應(yīng)關(guān)系如表1所示[2],。


  監(jiān)督位計算如下:
  
  4位碼元相應(yīng)進入編碼器,首先進行串并變換,,然后進行漢明編碼,,最后進行并串變換。主要代碼如下:
  if(clk1‘event and clk1=‘0’) then
  if (en=‘0’ and counter1=0) then
  tempt(6 downto 3)〈=datain(3 downto 0);
  tempt(2) 〈= (datain(3) XOR datain(2))
  XOR datain(1);
  tempt(1) 〈= (datain(3) XOR datain(2))
  XOR datain(0);
  tempt(0) 〈= (datain(3) XOR datain(1))
  XOR datain(0);
  end if;
  end if;
  在此模塊中要設(shè)定輸入時鐘和輸出時鐘的周期為7比4的關(guān)系,,具體周期大小與碼元速率對應(yīng),。對于譯碼模塊,原理相同,,在此不再贅述,。漢明碼編譯碼模塊的仿真波形如圖6所示。圖中,,outp1為編碼輸出,,outp2為譯碼輸出,仿真結(jié)果與理論計算值相同,。

 


2.3.2 卷積碼編譯碼模塊
  以(2,,1,6)卷積編譯碼器為例,,選擇生成矩陣為G(D)=(1,,1+D2+D5+D6)的卷積碼。這種卷積碼不僅是系統(tǒng)碼,,而且是自正交碼,。假設(shè)輸入信息序列M=(1111),即M(D)=1+D+D2+D3,,則編碼器的輸出C(D)=M(D)×G(D),,即編碼器輸出序列為11111010010000000001,。解碼采用大數(shù)邏輯譯碼方法,可以糾正連續(xù)14個信息碼元中的2個隨機錯誤,。對于存在突發(fā)干擾的信道,,采用這種方法可獲得非常大的編碼增益。譯碼中完成糾錯的代碼如下:
  summ:process(s)
  begin
  if s(6)=‘1’ then c6〈=1;else c6〈=0;end if;
  if s(5)=‘1’ then c5〈=1;else c5〈=0;end if;
  if s(2)=‘1’ then c2〈=1;else c2〈=0;end if;
  if s(0)=‘1’ then c0〈=1;else c0〈=0;end if;
  end process;
  sum〈=c0+c2+c5+c6;
  men:process(sum)
  begin
  if sum>=3 then temp〈=‘1’;else temp〈=‘0’;
  end if;
  end process;
  卷積碼模塊仿真波形如圖7所示,。圖中,,encode為編碼輸出,decode為解碼輸出,。由圖可見,,結(jié)果與理論計算相同。其中,,編碼輸出速率為信息碼速率的兩倍,。
2.4 Nios微處理器模塊
  Nios CPU核有Nios-16和Nios-32兩種結(jié)構(gòu),這里選用Nios-32處理器,,它的預(yù)配置有標(biāo)準(zhǔn)型,、最小型、全功能,、標(biāo)準(zhǔn)調(diào)試功能以及自定制,。在此選用標(biāo)準(zhǔn)調(diào)試功能,在標(biāo)準(zhǔn)模式下增加了用于JTAG在線調(diào)試的OCI模塊,,可以通過JTAG進行Nios調(diào)試[3];還定義了一個ROM 和RAM 模塊,其數(shù)據(jù)寬度均為32 位,大小均為2KB,。ROM 用來存儲GERMS Monitor程序,以便進行軟件調(diào)試, RAM作為程序運行空間和變量空間,。UART 為通用串行通信IP ,用來外接RS232,,用于系統(tǒng)的調(diào)試和通信。Avalon交換結(jié)構(gòu)總線用來連接外部的Flash,、SRAM以及用戶自定制邏輯,。Avalon需要極小的FPGA資源,提供完全的同步操作,。該模塊還定義了一個4×4的鍵盤,,用來選擇編譯碼方式、信息速率以及工作模式等,。
  在SOPC Builder中添加相應(yīng)模塊,,生成Nios微處理器及部分外設(shè)。在Quartus Ⅱ環(huán)境下采用模塊化方法將SOPC Builder下定制的Nios CPU軟核和用VHDL語言描述的硬件模塊加以整合,。通過圖形化建模實現(xiàn)端口和信號流的匹配,。
3 軟件實現(xiàn)
  軟件實現(xiàn)包括系統(tǒng)的初始化,對RAM,、ROM進行操作,,讀鍵盤和LCD顯示等,,主要由Nios SDK shell來完成,通過串行通信口測試Nios的控制程序,,控制程序用C語言來實現(xiàn),。
  Nios開發(fā)套件提供了將程序代碼存儲在Flash存儲器的功能,GERMS監(jiān)控程序在CPU啟動后自動執(zhí)行程序代碼,。將代碼存儲在片外存儲器有兩種方法[4],,本文采用的方法是使用軟件程序srec2flash將.srec格式的可執(zhí)行程序代碼轉(zhuǎn)換為可以寫入Nios系統(tǒng)Flash存儲器的.flash文件,在完成該操作的同時,,srec2flash在.Flash文件的開始添加了一段代碼,,用于將應(yīng)用代碼從Flash復(fù)制到RAM中并運行。軟核啟動機制如圖8所示,。系統(tǒng)上電后,,串行配置器件EPCS4配置FPGA;配置完畢后復(fù)位Nios并運行片上ROM中的BootLoader,;選擇運行模式,;在調(diào)試模式下,BootLoader啟動GERM監(jiān)控程序,,為開發(fā)者提供對系統(tǒng)進行開發(fā)調(diào)試的條件,。在控制模式下,BootLoader將Flash存儲的主程序裝載到RAM中,,指針指向程序開始地址,開始運行主程序,;初始化,,并配置系統(tǒng)。


  所選用Altera公司Cyclone系列的EP1C12Q240C8為核心的芯片,,它內(nèi)部包含12 060個基本邏輯單元和52個M4K RAM blocks,,總共可以提供239 616bit的RAM資源,滿足了系統(tǒng)的需求,。
  本文利用可編程邏輯的靈活性和Nios的強大處理能力,,將多種編譯碼模塊和微處理器模塊集成到一片F(xiàn)PGA內(nèi)部,方便地實現(xiàn)了通用編譯碼器的設(shè)計,。由于采用了VHDL語言,,使系統(tǒng)具有可移植性和可擴展性。該設(shè)計已通過實際運行且效果良好,。
參考文獻(xiàn)
1 王 志,,石江洪,周劍揚等.同步數(shù)字復(fù)接的設(shè)計及其FPGA實現(xiàn)[J].電子技術(shù)應(yīng)用,2005;(4):77~80
2 樊昌信,,張甫翊.徐炳祥等.通信原理[M].北京:國防工業(yè)出版社,,2001:288
3 潘 松,黃繼業(yè),,曾 毓.SOPC技術(shù)實用教程[M].北京:清華大學(xué)出版社,2005
4 柳一村.基于Nios的SOPC系統(tǒng)設(shè)計以及程序引導(dǎo)[J]. 電子技術(shù),,2005,;32(6):70~72

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。