SOPC在數(shù)據(jù)發(fā)生系統(tǒng)中的應(yīng)用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
PSoC是針對(duì)嵌入式控制設(shè)計(jì)的高度可配置片上系統(tǒng)架構(gòu),可提供基于閃存、與現(xiàn)場(chǎng)可編程專用集成電路(ASIC)等效的電路,而無需提前期(LeadTime)或一次性非重復(fù)費(fèi)用(NRE)。PSoC集成了通過一個(gè)片上微控制器進(jìn)行控制的可配置模擬和數(shù)字電路,提供強(qiáng)大的設(shè)計(jì)修改功能,并大幅減少元件數(shù)量。PSoC包括最大32Kb的閃存、2Kb的SRAM、一個(gè)帶有32位累加器的8x8乘法器、電源和睡眠監(jiān)控電路,及硬件I2C通信。PSoC資源配置靈活,可在各階段進(jìn)行基于固件的改動(dòng)。PSoC可動(dòng)態(tài)重配置,能隨意在運(yùn)行過程中改變內(nèi)部資源形式,用較少的元件完成更多功能。
現(xiàn)以數(shù)據(jù)發(fā)生系統(tǒng)為例,介紹采用SOPC技術(shù),以硬件描述語言為主要手段,產(chǎn)生偽隨機(jī)序列的設(shè)計(jì)方案。研究了偽隨機(jī)序列的產(chǎn)生,兩片SRAM乒乓結(jié)構(gòu)存儲(chǔ)以及通過PCI9054芯片與PC機(jī)之間數(shù)據(jù)傳遞等模塊的硬件實(shí)現(xiàn)問題。
1 基本原理和系統(tǒng)的整體結(jié)構(gòu)
本系統(tǒng)的主要模塊框圖如圖1所示,SOPC系統(tǒng)采用Altera的CycloneⅡ系列的芯片。系統(tǒng)包括NiosⅡ軟核處理器,擴(kuò)展的程序存儲(chǔ)器FLASH,數(shù)據(jù)存儲(chǔ)器SRAM,以及用戶自定義邏輯如PCI9054接口邏輯模塊、數(shù)據(jù)產(chǎn)生模塊、乒乓結(jié)構(gòu)模塊等,并通過Avalon總線連接起來。數(shù)據(jù)產(chǎn)生模塊產(chǎn)生偽隨機(jī)序列,該數(shù)據(jù)存儲(chǔ)到兩片片外擴(kuò)展的SRAM中,PCI9054接口邏輯將數(shù)據(jù)從SRAM中讀出后通過PCI9054接口芯片傳輸?shù)絇C機(jī)中,其中SRAM中數(shù)據(jù)的寫入和讀出是通過乒乓結(jié)構(gòu)模塊控制的。
SRAM是英文StaticRAM的縮寫,它是一種具有靜止存取功能的內(nèi)存,不需要刷新電路即能保存它內(nèi)部存儲(chǔ)的數(shù)據(jù)。此外SRAM還是自行車品牌。SRAM不需要刷新電路即能保存它內(nèi)部存儲(chǔ)的數(shù)據(jù)。而DRAM(DynamicRandomAccessMemory)每隔一段時(shí)間,要刷新充電一次,否則內(nèi)部的數(shù)據(jù)即會(huì)消失,因此SRAM具有較高的性能,但是SRAM也有它的缺點(diǎn),即它的集成度較低,相同容量的DRAM內(nèi)存可以設(shè)計(jì)為較小的體積,但是SRAM卻需要很大的體積,且功耗較大。所以在主板上SRAM存儲(chǔ)器要占用一部分面積。
由于PCI總線協(xié)議比較復(fù)雜,該系統(tǒng)采用PCI接口專用芯片PCI9054,用于PCI總線的控制。為了實(shí)現(xiàn)數(shù)據(jù)的高速傳輸,采用了DMA傳輸模式。在該模式中,PCI9054既是PCI總線的控制器又是本地總線的控制器,所以其與FPGA之間的接口邏輯模塊設(shè)置為AvaIon主外設(shè),控制SRAM的讀操作。
FPGA的片上資源很寶貴,所以數(shù)據(jù)的存儲(chǔ)采用了片外擴(kuò)展SRAM.由于數(shù)據(jù)為16 b,而且為實(shí)現(xiàn)數(shù)據(jù)的高速傳輸,采用了兩片256K x 16 b的SRAM(IDT71V416)構(gòu)成乒乓結(jié)構(gòu),以用作系統(tǒng)的數(shù)據(jù)存儲(chǔ)器。為保證整個(gè)系統(tǒng)高速運(yùn)行以及以后升級(jí)的需要,選用了存取時(shí)間為10 ns的IDT71V416.
FPGA(Field-ProgrammableGateArray),即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。系統(tǒng)設(shè)計(jì)師可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來,就好像一個(gè)電路試驗(yàn)板被放在了一個(gè)芯片里。一個(gè)出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計(jì)者而改變,所以FPGA可以完成所需要的邏輯功能。
2 系統(tǒng)主要硬件設(shè)計(jì)
2.1 數(shù)據(jù)產(chǎn)生模塊
VHDL語言是一種用于電路設(shè)計(jì)的高級(jí)語言。它在80年代的后期出現(xiàn)。最初是由美國(guó)國(guó)防部開發(fā)出來供美軍用來提高設(shè)計(jì)的可靠性和縮減開發(fā)周期的一種使用范圍較小的設(shè)計(jì)語言 .VHDL翻譯成中文就是超高速集成電路硬件描述語言,主要是應(yīng)用在數(shù)字電路的設(shè)計(jì)中。目前,它在中國(guó)的應(yīng)用多數(shù)是用在FPGA/CPLD/EPLD的設(shè)計(jì)中。當(dāng)然在一些實(shí)力較為雄厚的單位,它也被用來設(shè)計(jì)ASIC
該模塊的邏輯功能由VHDL語言設(shè)計(jì)實(shí)現(xiàn),可以通過修改該模塊的設(shè)計(jì)產(chǎn)生所需要的數(shù)據(jù),本系統(tǒng)產(chǎn)生的數(shù)據(jù)為偽隨機(jī)序列。模塊的邏輯功能是:先產(chǎn)生8 b的偽隨機(jī)數(shù),再將所產(chǎn)生的數(shù)據(jù)通過D觸發(fā)器組合成16 b的數(shù)據(jù)。該系統(tǒng)采用了非線性反饋的移位寄存器,即全狀態(tài)移位計(jì)數(shù)器來產(chǎn)生所需要的偽隨機(jī)數(shù)。這種計(jì)數(shù)器利用了移位寄存器的所有狀態(tài),能夠自啟動(dòng),不需要額外輸入。這種偽隨機(jī)序列發(fā)生器,可大大簡(jiǎn)化結(jié)構(gòu),提高可靠性,易于實(shí)現(xiàn)。
全狀態(tài)移位計(jì)數(shù)器的狀態(tài)變化規(guī)律有兩個(gè)特點(diǎn):狀態(tài)的最高位由反饋函數(shù)確定;余下的各位由原態(tài)移位得到。該系統(tǒng)采用的反饋函數(shù)為:
式中:Qi(i=1,…,8)為電路的現(xiàn)態(tài)。
2.2 乒乓結(jié)構(gòu)模塊
2.2.1 乒乓結(jié)構(gòu)的硬件實(shí)現(xiàn)
為了提高系統(tǒng)的傳輸速率,兩片SRAM構(gòu)成了乒乓緩存結(jié)構(gòu),即在一片執(zhí)行寫操作的同時(shí),另一片在執(zhí)行讀操作。乒乓結(jié)構(gòu)模塊的原理如圖2所示,P1口與數(shù)據(jù)產(chǎn)生模塊相連接,僅具有寫入功能,P2口設(shè)計(jì)為Avalon從端口,與Avalon總線相連僅具有讀出功能。
對(duì)于數(shù)據(jù)產(chǎn)生模塊而言,由于僅具有并行數(shù)據(jù)的輸出,沒有地址和控制信號(hào)端口,故它無法直接對(duì)SRAM進(jìn)行寫操作,因而要求乒乓結(jié)構(gòu)模塊有地址產(chǎn)生功能。P1口的CLK作為計(jì)數(shù)器的脈沖源,計(jì)數(shù)器的輸出作為SRAM的地址。DBl連接數(shù)據(jù)產(chǎn)生模塊的輸出端。CBl為控制信號(hào),因?yàn)镻1口只有寫入功能,所以其we_n恒接低,oe_n恒接高。
P2口為只有讀出功能的Avalon從端口,所以AB2為從端口的地址線address;DB2為數(shù)據(jù)線readdata;CB2中的we_n為讀信號(hào)線read,oe_n恒接低。由于兩片SRAM始終處于工作狀態(tài),所以相應(yīng)的片選信號(hào)chip_select_n恒接低。
兩片SRAM在P1口和P2口之間的切換的控制信號(hào)即chipselect,由計(jì)數(shù)器產(chǎn)生。當(dāng)計(jì)數(shù)值小于262 144時(shí),chipselect接低,SR1與P1口相接,SR2與P2口相接;當(dāng)計(jì)數(shù)值在262 144~524 288之間時(shí),chipselecl接高,SR1與P2口相接,SR2與P1口相接。當(dāng)計(jì)數(shù)值到達(dá)524 288時(shí),計(jì)數(shù)器清零。
2.2.2 Avalon從外設(shè)的端口信號(hào)設(shè)計(jì)
Nios系統(tǒng)的所有外設(shè)都是通過Avalon總線與NiosCPU相接的,Avalon總線是一種協(xié)議較為簡(jiǎn)單的片內(nèi)總線,Nios通過Avalon總線與外界進(jìn)行數(shù)據(jù)交換??煞譃閮深悾篠lave和Master.slave是一個(gè)從控接口,而master是一個(gè)主控接口。slave和master主要的區(qū)別是對(duì)于Avalon總線控制權(quán)的把握。master接口具有相接的Avalon總線控制權(quán),而slave接口是被動(dòng)的。常見的Avalon的傳輸結(jié)構(gòu)有:Avalon總線從讀(slaveread),Avalon總線帶一個(gè)延遲狀態(tài)從讀,Avalon總線從寫(slavewrite),Avalon總線帶一個(gè)延遲狀態(tài)從寫。
系統(tǒng)中,數(shù)據(jù)產(chǎn)生模塊與乒乓結(jié)構(gòu)模塊結(jié)合為一個(gè)模塊,通過P2口掛在Avalon總線上。該模塊的信號(hào)列表如圖3所示。其中,avalon_slave_O接口類型的信號(hào)與Avalon總線相連接,而conduit_end接口類型的信號(hào)與SRAM相連接。圖3中的Avalon從端口即為P2口,采用了流水線讀傳輸?shù)哪J?,這種模式能在前一次傳輸返回readdata前開始一次新的傳輸,增加了帶寬。
2.2.3 動(dòng)態(tài)地址對(duì)齊及其時(shí)許設(shè)計(jì)
Avalon總線模塊能夠適應(yīng)主從外設(shè)的不同寬度和不匹配的數(shù)據(jù)寬度。當(dāng)系統(tǒng)中村子不匹配的存儲(chǔ)口時(shí),要考慮地址對(duì)齊問題。對(duì)于存儲(chǔ)器類型的外設(shè),采用動(dòng)態(tài)地址對(duì)齊方式。IDT71V416型SRAM是靜態(tài)RAM,屬于存儲(chǔ)器型外設(shè),所以該Aalon從端口采用動(dòng)態(tài)地址對(duì)齊方式,如圖4所示。選用動(dòng)態(tài)地址對(duì)齊方式,使得主端口能連續(xù)地對(duì)從外設(shè)進(jìn)行讀寫,并使系統(tǒng)將外設(shè)認(rèn)作存儲(chǔ)器型外設(shè)。
根據(jù)IDT71V416型SRAM手冊(cè)中讀寫時(shí)序的各時(shí)間參數(shù)值設(shè)定set up,read wait,write wait及holdtime的時(shí)間均為10 ns,使該端口既符合Avalon總線讀寫時(shí)序的要求,又符合IDT71V416型SRAM的讀寫時(shí)序的要求,如圖5所示。
數(shù)據(jù)產(chǎn)生,乒乓結(jié)構(gòu)和兩片SRAM三部分的組合在ModelSim中的仿真結(jié)果如圖6所示。avalon_ad-dress_b不變時(shí)是在執(zhí)行第一次寫操作,此時(shí)沒有數(shù)據(jù)讀出,所以avalon_readdata_b值為高阻;avalon_ad-dress_b開始變化時(shí),表示一片SRAM已經(jīng)寫滿,正在執(zhí)行該片的讀操作,而另一片在執(zhí)行寫操作,avalon_readdata_b為系統(tǒng)生成的數(shù)據(jù)。
2.3 PCI9054接口邏輯模塊
PCI(PeripheralComponentInterconnect)一種由英特爾(Intel)公司1991年推出的用于定義局部總線的標(biāo)準(zhǔn)。此標(biāo)準(zhǔn)允許在計(jì)算機(jī)內(nèi)安裝多達(dá)10個(gè)遵從PCI標(biāo)準(zhǔn)的擴(kuò)展卡。最早提出的PCI總線工作在33MHz頻率之下,傳輸帶寬達(dá)到133MB/s(33MHz*32bit/s),基本上滿足了當(dāng)時(shí)處理器的發(fā)展需要。隨著對(duì)更高性能的要求,后來又提出把PCI總線的頻率提升到66MHz,傳輸帶寬能達(dá)到266MB/s.
PCI總線作為PC機(jī)與外部設(shè)備之間重要的連接總線,具有數(shù)據(jù)傳輸穩(wěn)定靈活,傳輸速度快,即插即用和良好的擴(kuò)展性等特點(diǎn),被廣泛地用在各種與PC機(jī)互聯(lián)的設(shè)備中。該系統(tǒng)采用的PCI9054芯片口可以將復(fù)雜的PCI總線接口轉(zhuǎn)換為相對(duì)簡(jiǎn)單的用戶接口,大大縮短了設(shè)計(jì)周期。
2.3.1 本地總線狀態(tài)機(jī)設(shè)計(jì)
由于PCI9054的DMA傳輸方式只適宜于做單次傳輸,故該系統(tǒng)采用了DMA結(jié)合中斷的方式傳輸數(shù)據(jù)。由于數(shù)據(jù)的存儲(chǔ)采用了乒乓結(jié)構(gòu),可以在一片SRAM執(zhí)行DMA傳輸?shù)耐瑫r(shí)執(zhí)行另一片寫操作,這樣不會(huì)造成數(shù)據(jù)丟失,狀態(tài)也比較容易控制。
系統(tǒng)復(fù)位后,數(shù)據(jù)產(chǎn)生模塊開始產(chǎn)生偽隨機(jī)序列,產(chǎn)生的數(shù)據(jù)直接存入SRAM中。此時(shí),計(jì)數(shù)器同步計(jì)數(shù),當(dāng)計(jì)數(shù)值每一次達(dá)到262 144時(shí),也就是一片SRAM已經(jīng)存滿時(shí),SOPC系統(tǒng)就會(huì)觸發(fā)PCI9054中斷請(qǐng)求信號(hào)LINT#,CPU響應(yīng)中斷,發(fā)出讀命令、要讀取的字節(jié)數(shù)、地址信號(hào)等。PCI9054:先通過LHOLD申請(qǐng)本地總線的控制權(quán),SOPC系統(tǒng)通過LHOLDA響應(yīng),使PCI9054.獲得本地總線的控制權(quán)。PCI9054將PCI地址空間映射到本地地址空間,接著啟動(dòng)本地總線的DMA傳輸。
該系統(tǒng)采用VHDL語言,實(shí)現(xiàn)了DMA讀傳輸本地端的時(shí)序控制狀態(tài)機(jī)設(shè)計(jì)。狀態(tài)0為空閑狀態(tài)(i-dle),若LHOLD信號(hào)被置1,則轉(zhuǎn)到狀態(tài)1,否則留在狀態(tài)0.狀態(tài)1為總線保持狀態(tài)(hold),在此狀態(tài)下應(yīng)將LHOLDA信號(hào)置l.如果信號(hào)ADs為O且LW_R為0,則轉(zhuǎn)到狀態(tài)2.狀態(tài)2為DMA讀狀態(tài)(DMA_read),在此狀態(tài)下應(yīng)將READY信號(hào)和模塊內(nèi)部信號(hào)avaIon_read置l,從而使AvaIon主端口的master_read置1,表示Avalon主外設(shè)發(fā)起讀傳輸。如果BLAST為1,則表明此次DMA讀取還沒有完成,繼續(xù)留在狀態(tài)2;如果BLAsT為0,則表明此次DMA讀取完成,轉(zhuǎn)到狀態(tài)3.狀態(tài)3為DMA讀操作完成狀態(tài)(end cycle),當(dāng)LHOLD被置0時(shí),表示PCI9054不再請(qǐng)求本地總線,則轉(zhuǎn)到狀態(tài)0;當(dāng)BLAST為0且LHOLD為1時(shí),則表明PCI9054還要進(jìn)行DMA讀操作,則轉(zhuǎn)到狀態(tài)1繼續(xù)。其中的DMA讀操作的時(shí)序邏輯的ModelSim仿真結(jié)果如圖7所示。
2.3.2 Avalon主外設(shè)的端口信號(hào)設(shè)計(jì)
該系統(tǒng)中,PCI9054控制數(shù)據(jù)從本地總線上讀出,先到PCI9054的FIFO中,再將FIFO中的數(shù)據(jù)傳輸?shù)絇CI總線上。因此SOPC系統(tǒng)中的PCI9054接口邏輯模塊為Avalon主外設(shè),主端口通過address,read,wait-request等信號(hào)發(fā)起Avalon總線上的讀操作,從而控制Avalon從外設(shè)即乒乓結(jié)構(gòu)模塊的讀操作。
由于本系統(tǒng)定制的從外設(shè)采用了流水線讀的傳輸模式,為了使端口傳輸模式匹配,主外設(shè)也采用流水線讀的傳輸模式。流水線主端口一個(gè)必須的信號(hào)為readdatavalid,Avalon交換結(jié)構(gòu)向主端口發(fā)出readdat-avalid,以表示readdata信號(hào)正在提供有效的數(shù)據(jù)。
本系統(tǒng)定制的Avalon主外設(shè)構(gòu)成模塊主要由5部分構(gòu)成,其中Read Master Logic提供了符合Aval-on接口規(guī)范的主端口信號(hào);Control Logic是ReadMaster Logic與PCI9054 Local Bus Logic控制信號(hào)和狀態(tài)信號(hào)轉(zhuǎn)換的橋梁;FIFO是數(shù)據(jù)由Read MasterLogic向PCI9054傳輸?shù)木彌_區(qū)。這三部分通過主端口流水線讀傳輸時(shí)序邏輯聯(lián)系在一起,提供了Avalon主外設(shè)的主端口接口界面。PCI9054 Local Bus Logic即VHDL語言設(shè)計(jì)的本地總線狀態(tài)機(jī),它將PCI9054本地端的信號(hào)通過狀態(tài)機(jī)邏輯轉(zhuǎn)換為與Control Logic和FIFO相對(duì)應(yīng)的信號(hào);Clock/Reset提供了主外設(shè)的clk和reset信號(hào)。
利用SOPC Builder中的new cormponent edit設(shè)計(jì)PCI9054接口邏輯模塊的接口。在new component ed-it的signal中設(shè)置模塊的各信號(hào)線以及相應(yīng)的總線型號(hào)類型;在interface中設(shè)置各信號(hào)線對(duì)應(yīng)的端口類型及其相應(yīng)的參數(shù)。圖8為Avalon主端口的參數(shù)設(shè)置。
2.4 系統(tǒng)中各中斷的實(shí)現(xiàn)
在SOPC系統(tǒng)中,當(dāng)沒有進(jìn)行傳輸時(shí),Avalon交換結(jié)構(gòu)忽略來自主端口所有與傳輸相關(guān)的輸出信號(hào),并且主端口也忽略來自Avalon交換結(jié)構(gòu)所有與傳輸相關(guān)的輸入信號(hào)。但是Avalon總線接口提供控制信號(hào)來實(shí)現(xiàn)中斷請(qǐng)求等功能,這些信號(hào)不直接與數(shù)據(jù)傳輸相關(guān)。Avalon中斷請(qǐng)求信號(hào)允許從端口發(fā)出一個(gè)IRQ,表明它需要主外設(shè)來服務(wù)。系統(tǒng)中,PCI9054采用了DMA加中斷的方式來傳輸數(shù)據(jù),而且DMA傳輸中的主控制器PCI9054芯片也要通過中斷信號(hào)LINT#來觸發(fā),所以中斷的實(shí)現(xiàn)是本系統(tǒng)功能實(shí)現(xiàn)的關(guān)鍵。
系統(tǒng)從端口的中斷原理在于系統(tǒng)復(fù)位之后,數(shù)據(jù)產(chǎn)生模塊開始自動(dòng)產(chǎn)生偽隨機(jī)序列,并自動(dòng)將數(shù)據(jù)存入SRAM中,當(dāng)一片SRAM存滿之后,從端口的irq信號(hào)被設(shè)置。這個(gè)irq信號(hào)的時(shí)序必須與相關(guān)時(shí)鐘的上升沿同步,其相關(guān)地址端口的名字必須是本模塊中Aval-on從端口的名字。系統(tǒng)中從端口中斷的具體設(shè)置如圖9所示。
系統(tǒng)主端口的中斷原理:在于主端口的irq檢測(cè)到從端口有中斷發(fā)出,通過置為有效來響應(yīng)這個(gè)中斷,并同時(shí)用該信號(hào)觸發(fā)PCI9054的LINT#信號(hào)。PCI9054獲得本地總線的控制權(quán),并啟動(dòng)DMA傳輸,向SOPC:系統(tǒng)中的主外設(shè)即PCI9054接口邏輯模塊發(fā)送地址和傳輸?shù)淖止?jié)長(zhǎng)度,開始DMA傳輸。當(dāng)字節(jié)長(zhǎng)度減為O,另一片SRAM存滿時(shí),再次觸發(fā)PCI9054的LINT#信號(hào),使得PCI9054啟動(dòng)下一次DMA傳輸。主端口中斷的設(shè)置如圖10所示。
3 結(jié) 語
圖10 主端口中斷設(shè)置詳細(xì)介紹了基于SOPC設(shè)計(jì)的數(shù)據(jù)發(fā)生系統(tǒng)中PCI接口的開發(fā)過程。對(duì)其中的關(guān)鍵技術(shù),如設(shè)計(jì)添加在SOPC系統(tǒng)中的用戶自定義主外設(shè)和從外設(shè);PCI9054本地總線狀態(tài)機(jī)的設(shè)計(jì),乒乓結(jié)構(gòu)的存儲(chǔ)模塊的設(shè)計(jì),以及系統(tǒng)中各中斷的實(shí)現(xiàn)等主要部分做了分析和研究,給出了基于SOPC的硬件實(shí)現(xiàn)方案。系統(tǒng)的主要部分由VHDL語言設(shè)計(jì)實(shí)現(xiàn),有利于參數(shù)修改和系統(tǒng)升級(jí)。
QICK