新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 零基礎(chǔ)學(xué)FPGA (十九) 探秘SOPC

零基礎(chǔ)學(xué)FPGA (十九) 探秘SOPC

—— 零基礎(chǔ)學(xué)FPGA (二十一) 探秘SOPC
作者: 時間:2015-05-24 來源:網(wǎng)絡(luò) 收藏

  今天是來北京的第8天了,想想過的蠻快的,在這8天里呢,由于這邊正在開的課程,自己對這方面之前只是了解過,知道有這回事,但是從來沒有接觸過,正好有這個機會讓我蹭了幾天的課,算是對這東西有了深入的了解吧。課程講的很快,短短4天的功夫就從入門講到了我認為比較難懂的方面,不過還好,經(jīng)過我這幾天的消化,之前也有點基礎(chǔ),理解一下還是沒什么問題的,只不過讓我去操作一個有點難度的外設(shè)的話,我估計還得下點功夫了~

本文引用地址:http://2s4d.com/article/274620.htm

  講的郝老師跟我住一個屋,郝老師人很不錯,也很年輕,也是個90后,這幾天跟著郝老師學(xué)到了不少東西,不僅僅是SOPC方面的,更多還有對工程師這個行業(yè),對這個社會的一些新的認識。

  由于我也是剛接觸SOPC,不能像大神們講的那么井井有條,思路嚴謹,我只是把我最近幾天學(xué)到的東西跟大家分享一下,也作為自己的一份筆記。再下面的幾篇文章中,我都會給大家發(fā)一些SOPC的筆記,從基本的概念,到基本硬件系統(tǒng)的搭建,一些常用IP核的應(yīng)用,像什么PIO核,UART核,USB,EPCS控制器,SDRAM控制器等,還有后面的自定義外設(shè)等,估計用四五篇文章的長度來講這部分吧。

  學(xué)這一部分知識要軟硬結(jié)合,硬件相信大家都沒問題了,軟件呢需要用到C語言的知識,由于我之前很久沒用C語言了,如果大家對C語言還不是很熟的話,建議大家回去補一下C語言的課,雖然我們是搞硬件的,但是越到后面,軟硬就不分了~

  第一篇文章我就先來說說我理解中的SOPC,再教大家手把手搭建一個硬件平臺,這個硬件平臺搭建好了,我們以后的軟件就全部是基于這個平臺的編程了。

  一、我理解中的SOPC

  SOPC呢,也就是所謂的可編程片上系統(tǒng),通常一個系統(tǒng)所包含的,什么CPU,存儲器,DSP和一些IO外設(shè)等都放在FPGA的周圍,這樣大大增加的系統(tǒng)的面積從而增加了系統(tǒng)的成本,SOPC技術(shù)呢就是把CPU,DSP,定時器,IO模塊都放到FPGA里面,通過Quartus II提供的SOPC builder這個工具,在里面嵌入NIOS II處理器和一些常用的IP 核,NIOS II處理器作為主機,其他外設(shè)作為從機,主機和從機之間通過AVALON MM總線進行通信與訪問,每一個外設(shè)都有一個地址,NIOS II處理器可以通過這條總線對外設(shè)進行操作,但是每次只能訪問一個外設(shè),系統(tǒng)硬件搭建好了之后,通過Quartus II對其進行綜合,布局布線,時序約束等硬件系統(tǒng)搭建工作,然后我們用C語言通過NIOS II eclipse 這個工具來給我們的硬件系統(tǒng)編程,并進行運行調(diào)試,最后將我們設(shè)計好的硬件與軟件文件燒入FPGA的配置芯片或者FILASH中,通過相應(yīng)的總線來控制相應(yīng)的外設(shè)。下面是我畫的一個關(guān)系圖

  

360桌面截圖20150126172651.jpg

 

  下面我們就通過一個具體的實例來理解這個過程

  二 、硬件系統(tǒng)搭建

  

360桌面截圖20150126174352.jpg

 

  上面這個圖就是我們要搭建的硬件系統(tǒng),硬件系統(tǒng)的搭建需要用到Quartus II軟件 和它提供的SOPC builder 工具,一步步來,Quartus II建立工程就不說了,建立工程之后,tool ——sopc builder,按照上面的框圖一個個添加我們需要的IP

  首先我喜歡添加時鐘,即PLL,直接在左上方的搜索框里輸入PLL雙擊即可,至于PLL的配置方法我就不說了,相信大家都已經(jīng)很熟了,由于我們的輸入時鐘是50M,我們需要的內(nèi)部時鐘主要用來控制各種IP,用50M的c0時鐘,但是我們系統(tǒng)設(shè)計SDRAM,我們需要100M的c1時鐘來控制SDRAM控制器,即SDRAM接口,同樣還需要一個時鐘輸出到FPGA芯片外部來控制SDRAM芯片,我們用C2時鐘,C2時鐘跟C1時鐘同頻不同相,根據(jù)經(jīng)驗值,這個相位偏移我們選-75deg,頻率100M

  

360桌面截圖20150126180311.jpg

 

  接著添加定時器,在搜索框輸入timer 配置定時單位,位寬,這里我們設(shè)置為1ms,32位,在硬件選項對話框里一般選擇 full—featured,當(dāng)然也可以手動配置一些參數(shù)選custom

  

360桌面截圖20150126180844.jpg

 

  然后我們可以配置SDRAM,即我們的內(nèi)存,SDRAM的配置參數(shù)是按照我們板子上芯片的具體參數(shù)配置的,由于系統(tǒng)提供的SDRAM芯片跟我們不匹配,所以我們用custom手動配置

  

360桌面截圖20150126181757.jpg

 

  之后可以配置EPCS控制器啊,JTAG控制器,UART,PIO,sysid等相應(yīng)IP

  EPCS控制器是我們要控制控制片外的EPCS芯片用到的一個IP核,由于我們的CPU每次運行起來都是從內(nèi)存,即SDRAM中讀取數(shù)據(jù)的,而我們要做的就是將FPGA的硬件配置文件和我們的軟件配置文件燒入到EPCS芯片中,這樣CPU運行的時候就需要從EPCS芯片中將數(shù)據(jù)搬運到SDRAM中運行,從而提高運行速度,EPCS芯片控制器不需要配置,直接添加即可。

  JTAG控制器是我們調(diào)試用的,包括我們將軟件代碼下載的時候,在窗口返回的一些數(shù)據(jù)就是通過JTAG口傳回的,這個IP也不需要配置,直接添加即可

  UART控制器即串口,為我們以后做串口調(diào)試實驗做好硬件基礎(chǔ),這里大家可以手動配置波特率,和相應(yīng)數(shù)據(jù)位

  sysID說白了就是我們這個系統(tǒng)的標號,跟身份證差不多意思,即一個系統(tǒng)對應(yīng)一個標號,標號我們可以隨便取

  PIO外設(shè)即我們的IO口,分為輸入輸出,我們可以手動配置他們的輸入輸出,位寬等參數(shù),輸出沒什么說的,說一下輸入,輸入我們主要是按鍵輸入,我的開發(fā)板上是4位按鍵,所以位寬設(shè)為4,由于是按鍵輸入,所以我們要檢測的是按鍵的下降沿,而且是沿中斷而不是電平中斷,這里我們需要手動改一下。PIO外設(shè)我們可以隨便加,包括什么數(shù)碼管,蜂鳴器,鍵盤,led等

  

360桌面截圖20150126183138.jpg

 

  最后我們添加CPU,即我們的NIOS II 處理器,NIOS II處理器分為三種模式,即經(jīng)濟型,穩(wěn)定型和快速型,當(dāng)然越高端的類型所占的邏輯資源就越多,我們做一些小實驗用經(jīng)濟型或者穩(wěn)定型就夠了

  

360桌面截圖20150126183705.jpg

 

  還有一點要注意,配置參數(shù)中的兩個選項,Reset Vector——復(fù)位向量

  Exception Vector——執(zhí)行向量,我們分別選EPCS和SDRAM,即我們復(fù)位的時候,CPU從EPCS中將數(shù)據(jù)搬入SDRAM中重新執(zhí)行,不復(fù)位的過程中,CPU從SDRAM中執(zhí)行(這個地方可能理解的不對,望大神指點)

  全部配置完成之后,我們需要對每一個IP核改下名字,右鍵,rename改成我們習(xí)慣的名字,不改的話后面總是跟著一些后綴。其實配置完成之后,系統(tǒng)就自動將這些模塊連接好了,我們需要做的就是改一下時鐘,讓內(nèi)部處理SDRAM控制器模塊的其他IP用PLL模塊輸出的c0時鐘,SDRAM控制器用c1時鐘

  

360桌面截圖20150126184833.jpg

 

  接下來我們需要系統(tǒng)自動分配基地址和中斷號,其實細心的朋友可能發(fā)現(xiàn),在右面IRQ一欄下有些中斷號是重復(fù)的,所以我們要系統(tǒng)重新分配一下中斷優(yōu)先級。點system——Assign base address 和 Assign interrupt numbers 即可,最后點下面的generate生成我們的系統(tǒng)即可

  這樣我們在sopc builder里的工作就完成了,硬件一旦生成,就不要輕易改了,剩下的事就是我們要在軟件里折騰。

  其實還可以這么理解,我們剛剛生成的系統(tǒng)就相當(dāng)于一個集合了各種IP的模塊,我們直接拿來調(diào)用即可。打開文件目錄下后綴名為.inst的文件,就例化了我們剛才生成的系統(tǒng),我們在quartus II頂層文件中調(diào)用這個系統(tǒng),生成頂層模塊,配置好管腳,這樣我們的硬件部分才算是真的完成了

  

360桌面截圖20150126190012.jpg

 

  三、軟件部分

  硬件搞好了就要做軟件,養(yǎng)成一個好的習(xí)慣,在工程目錄中建立一個文件夾,專門放軟件部分的文件

  做軟件,無非就是訪問我們硬件系統(tǒng)中的寄存器,用C語言來控制,這里我們先簡單做一個控制PIO核的小工程,通過控制PIO核來控制LED

  軟件方面的工程建立我不想多說,只想跟大家談一下學(xué)習(xí)方法,當(dāng)我們拿到一個外設(shè),肯定要首先看一下他的datasheet,看他的寄存器映射圖,拿PIO這個核來說,我們可以從網(wǎng)上下載n2cpu_nii5v3這個文件,里面詳細介紹了各種IP核的資料

  

360桌面截圖20150126191207.jpg

 

  看datasheet 一般先看他的overview嘛,英文功底還是有的

  然后我們需要看他的軟件文件software files,即控制這個IP核需要的頭文件,這里是altera_avalon_pio_regs.h

  

360桌面截圖20150126191752.jpg

 

  然后就是看寄存器視圖了,寄存器視圖告訴了我們?nèi)绾尉唧w操縱這個IP以及相應(yīng)位的介紹

  

360桌面截圖20150126192040.jpg

 

  例如,第一個寄存器是數(shù)據(jù)寄存器,可以用來讀寫數(shù)據(jù),只要我們知道這個PIO核的基址,再知道它的寄存器偏移我們就可以往數(shù)據(jù)寄存器里讀寫數(shù)據(jù)了,至于基址是多少,我們在定義硬件系統(tǒng)的時候系統(tǒng)已經(jīng)自動生成,我們到時候只要調(diào)用就好了

  再例如第二個寄存器是向量寄存器,即控制IO口的數(shù)據(jù)流方向,第三個寄存器是中斷寄存器等等

  代碼部分我們來看一下

  

360桌面截圖20150126192708.jpg

 

  首先是初始化,我們調(diào)用函數(shù)找到我們PIO核的基址,并給我們的pio口賦初值0,至于PIO核的基址在頭文件system.h中有定義

  system .h中定義了我們硬件系統(tǒng)中所有IP的相關(guān)參數(shù),我們可以直接拿來調(diào)用

  

360桌面截圖20150126193006.jpg

 

  初始化之后呢就進入while循環(huán),循環(huán)移位就是我們所說的流水燈了。由于工程比較簡單,按理說還需要調(diào)試,這里我們就不調(diào)試了,下板即可,先將我們的硬件下到板子了,即我們的SOF文件,然后再下我們的軟件,右鍵我們的工程名,run as——NIOS II hardware

  

360桌面截圖20150126194656.jpg

 

  這篇文章主要是講了硬件系統(tǒng)的搭建,其實硬件系統(tǒng)一搭建起來,我們以后的工程都可以用這個硬件系統(tǒng),其實我自己也感覺這種用文字描述的方式來教大家做確實是不好理解,有些東西也不好用文字描述,上傳的圖片也是有限的,所以我中間也省了不少的步驟,包括一些常見錯誤的處理方法,工程文件的導(dǎo)入等,這些希望大家自己找資料了解,具體細節(jié)如果用文字描述起來更是繁瑣,能看視頻教學(xué)最好了。

  下面的文章我們主要是在軟件上折騰,包括定時器中斷的使用啊,串口收發(fā)代碼的講解啊,還有自定義外設(shè)AD,DA芯片的控制啊,這些我們后續(xù)再談吧~寫了也不少了,暫時收工吧。

fpga相關(guān)文章:fpga是什么


可控硅相關(guān)文章:可控硅工作原理


c語言相關(guān)文章:c語言教程


蜂鳴器相關(guān)文章:蜂鳴器原理


關(guān)鍵詞: FPGA SOPC

評論


相關(guān)推薦

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

關(guān)閉