《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于NiosⅡ軟核處理器的七段數(shù)碼管動(dòng)態(tài)顯示設(shè)計(jì)
基于NiosⅡ軟核處理器的七段數(shù)碼管動(dòng)態(tài)顯示設(shè)計(jì)
Altera公司
摘要: SOPC(System On Programmable Chip)技術(shù)是美國Altera公司于2000年最早提出的,,并同時(shí)推出了相應(yīng)的開發(fā)軟件Quartus II,。SOPC是基于FPGA解決方案的SOC(System On Chip),構(gòu)成SOPC的方案也有多種,。第一種是基于FPGA嵌入IP硬核的SOPC系統(tǒng),,即在FPGA中事先植入嵌入式系統(tǒng)處理器,,目前最常用的嵌入式處理器大多采用了含有ARM的32位知識(shí)產(chǎn)權(quán)處理器核的器件。第二種是基于FPGA嵌入IP軟核的SOPC系統(tǒng),目前最有代表性的軟核處理器分別是Altera公司的Nios II核,,以及Xilinx公司的MicroBlaze核,。第三種是基于HardCopy技術(shù)的SOPC系統(tǒng),HardCopy就是利用原有的FPGA開發(fā)工具,,將成功實(shí)現(xiàn)于FPGA器件上的SOPC系統(tǒng)通過特定的技術(shù)直接向ASIC轉(zhuǎn)化,。
關(guān)鍵詞: FPGA NiosⅡ SoPC 數(shù)碼管 Altera
Abstract:
Key words :

    SOPC" title="SOPC">SOPC(System On Programmable Chip)技術(shù)是美國Altera" title="Altera">Altera公司于2000年最早提出的,并同時(shí)推出了相應(yīng)的開發(fā)軟件Quartus II,。SOPC是基于FPGA解決方案的SOC(System On Chip),,構(gòu)成SOPC的方案也有多種。第一種是基于FPGA嵌入IP硬核的SOPC系統(tǒng),,即在FPGA中事先植入嵌入式系統(tǒng)處理器,,目前最常用的嵌入式處理器大多采用了含有ARM的32位知識(shí)產(chǎn)權(quán)處理器核的器件。第二種是基于FPGA嵌入IP軟核的SOPC系統(tǒng),,目前最有代表性的軟核處理器分別是Altera公司的Nios II核,,以及Xilinx公司的MicroBlaze核。第三種是基于HardCopy技術(shù)的SOPC系統(tǒng),,HardCopy就是利用原有的FPGA開發(fā)工具,,將成功實(shí)現(xiàn)于FPGA器件上的SOPC系統(tǒng)通過特定的技術(shù)直接向ASIC轉(zhuǎn)化。

1 基于Altera公司NiosⅡ" title="NiosⅡ">NiosⅡ軟核處理器的SOPC系統(tǒng)

    Altera公司Nios II軟核是目前使用最為廣泛的一種軟核處理器,。值得一提的是,,利用Matlab和Altera公司的DSP Builder,用戶可以為Nios II軟核處理器設(shè)計(jì)各類DSP硬件加速器,,并以指令的方式加入Nios II的指令集,,從而可以構(gòu)建自己的DSP處理器系統(tǒng)。

1.1 基于NiosⅡ軟核處理器的SOPC系統(tǒng)結(jié)構(gòu)

    如圖1所示的一個(gè)基本的基于NiosⅡ軟核的SOPC系統(tǒng),,除NiosⅡ核,、定時(shí)器和片上存儲(chǔ)器以外,還需要在FPGA器件中添加一些接口元件,。這些元件一方面通過片上的Avolon總線與NiosⅡ軟核相連,,另外一方面又提供了外設(shè)與NiosⅡ軟核通信的接口界面。

 

 


    Altera公司QuartusⅡ軟件中的SOPC Builder工具提供了許多常用的外設(shè)接口元件,,如UART接口元件,、PIO接口元件等,通過這些接口元件可以連接諸如RS232,、LED,、數(shù)碼管" title="數(shù)碼管">數(shù)碼管和按鍵等輸入輸出設(shè)備。在相對(duì)復(fù)雜的系統(tǒng)設(shè)計(jì)當(dāng)中,,還可以通過Avalon三態(tài)總線橋外接大容最的SRAM和FLASH,,以提供更大的程序和數(shù)據(jù)存儲(chǔ)空間,。從圖1中,還可以注意到,,通過使用系統(tǒng)提供的用戶自定制外設(shè)接口元件的功能,,用戶可以在系統(tǒng)中添加一個(gè)符合Avalon總線規(guī)范的外設(shè)接口元件,以連接用戶特定功能的外部設(shè)備,。

1.2 自定制Avalon用戶外設(shè)接口元件簡介

    對(duì)于自定制的Avalon外設(shè)接口元件按照Avalon總線操作的不同可以分為兩類:Avalon Slave外設(shè)接口元件型的自定制的Avalon Slave外設(shè)接口元件框圖,。從圖2中可以看到寄存器的定義是自定制外設(shè)接口元件很重要的一部分,必須根據(jù)設(shè)計(jì)的需要確定寄存器的個(gè)數(shù)和種類,。圖2中的Avalon Slave接口提供了自定制外設(shè)接口元件與NiosⅡ處理器之間數(shù)據(jù)交換的界面,,其接口信號(hào)類型也必須根據(jù)設(shè)計(jì)的需要合理地進(jìn)行選擇。常用的Avalon Slave接口信號(hào)類型有:clk,,chipselect,,address,write,,writedata,,byteenable,reset等,。圖2中的任務(wù)邏輯具體說明了自定制外設(shè)接口的功能,,并給出了與外設(shè)連接的接口信號(hào)。

 


    自定制Avalon Slave外設(shè)接口元件的方法:可以利用SOPC Builder提供的元件編輯器在圖形用戶界面下將用硬件描述語言(Verilog或VHDL)描述的用戶邏輯封裝成一個(gè)SOPC Builder元件,。相應(yīng)的硬件描述語言文件給出了自定制外設(shè)接口元件的內(nèi)部寄存器結(jié)構(gòu),,使用到的Avalon Slave接口信號(hào)和自定制外設(shè)接口的邏輯功能。一旦定制成功后,,用戶自定制的外設(shè)接口就可以象SOPCBuilder中其他元件一樣被調(diào)用,。

2 基于NiosⅡ軟核處理器的七段數(shù)碼管動(dòng)態(tài)顯示設(shè)計(jì)

    數(shù)字系統(tǒng)設(shè)計(jì)中,用數(shù)碼管顯示數(shù)據(jù)結(jié)果是常用的一種方法,。利用Altera的SOPC Builder工具進(jìn)行Nios Ⅱ系統(tǒng)設(shè)計(jì)時(shí),,并沒有提供專門的數(shù)碼管顯示接口元件,但可以使用PIO元件驅(qū)動(dòng)數(shù)碼管顯示,,不足之處是占用器件引腳數(shù)目過多,。本文當(dāng)中以自定制Avalon Slave外設(shè)接口元件的方式,,給出了一種基于NiosⅡ軟核的七段數(shù)碼管動(dòng)態(tài)顯示設(shè)計(jì)方案,。該設(shè)計(jì)可以用來驅(qū)動(dòng)1~8個(gè)共陰極(或共陽極)數(shù)碼管的顯示,可以根據(jù)需要選擇小數(shù)點(diǎn)顯示的位置,,每個(gè)數(shù)碼管可以顯示0~F之間的十六進(jìn)制字符,。

    圖3為自定制的數(shù)碼管動(dòng)態(tài)顯示接口元件邏輯結(jié)構(gòu)圖,其中定義了2個(gè)寄存器display_data_reg和controlreg,。display_data_reg是個(gè)一個(gè)32位二進(jìn)制的數(shù)據(jù)寄存器,,其數(shù)據(jù)每4位可以譯碼得到1個(gè)數(shù)碼管的七段顯示所需的字符碼,,因此,display_data_reg同時(shí)最多可以給出8個(gè)數(shù)碼管所需要的顯示數(shù)據(jù),。control_reg是一個(gè)8位二進(jìn)制的控制寄存器,,但只定義了0~2位和第4位的含義。0~2位的數(shù)據(jù)給出了小數(shù)點(diǎn)顯示的位置,,數(shù)值范圍在“000”~“111”之間,,對(duì)應(yīng)著8個(gè)數(shù)碼管最低位到最高位的小數(shù)點(diǎn)的位置。第4位是數(shù)碼管顯示的啟動(dòng)停止位,,當(dāng)該數(shù)據(jù)位為1時(shí),,可使自定制接口元件所驅(qū)動(dòng)的數(shù)碼管正常顯示結(jié)果;當(dāng)該數(shù)據(jù)位為0時(shí),停止顯示,,所有被驅(qū)動(dòng)的數(shù)碼管熄滅,。

    參數(shù)n定義了循環(huán)加法計(jì)數(shù)器的模數(shù),同時(shí)也決定了驅(qū)動(dòng)數(shù)碼管顯示的個(gè)數(shù),,其取值范圍在1~8之間,。clkdisplay是循環(huán)加法計(jì)數(shù)器的時(shí)鐘輸入,他決定了計(jì)數(shù)器的計(jì)數(shù)頻率,,同時(shí)也決定了數(shù)碼管顯示的動(dòng)態(tài)掃描頻率,。參數(shù)pos用于決定驅(qū)動(dòng)數(shù)碼管的類型,其值可設(shè)定為0或1,。當(dāng)其值為0時(shí),,seg_out字符碼輸出高電平有效,bit_control數(shù)碼管位選控制輸出低電平有效,,此時(shí)輸出結(jié)果用于驅(qū)動(dòng)共陰極數(shù)碼管顯示;當(dāng)pos值為1時(shí),,seg_out字符碼輸出低電平有效,bit_control數(shù)碼管位選控制輸出高電平有效,,此時(shí)輸出結(jié)果用于驅(qū)動(dòng)共陽極數(shù)碼管顯示,。

    seg_out為自定制元件的字符碼輸出,用于驅(qū)動(dòng)數(shù)碼管顯示(包括小數(shù)點(diǎn)位),。其中,,最高一位seg_out[7]用于驅(qū)動(dòng)對(duì)應(yīng)數(shù)碼管的小數(shù)點(diǎn)顯示,低7位seg_out[6..0]用于驅(qū)動(dòng)數(shù)碼管的七段寧符顯示,。圖3中數(shù)碼管七段譯碼器根據(jù)循環(huán)加法計(jì)數(shù)器的當(dāng)前狀態(tài)值,,從display_data_reg寄存器中選擇4位二進(jìn)制數(shù)據(jù)進(jìn)行譯碼。例如,,當(dāng)前驅(qū)動(dòng)的數(shù)碼管的個(gè)數(shù)為5個(gè)(即n=5),,循環(huán)加法計(jì)數(shù)器的當(dāng)前狀態(tài)值用count表示,則count在0~4范圍內(nèi)變化;若計(jì)數(shù)器的當(dāng)前狀態(tài)值count為2,,則選擇寄存器display_data_reg[11..8]的4位二進(jìn)制數(shù)據(jù)進(jìn)行譯碼,,若計(jì)數(shù)器的當(dāng)前狀態(tài)值count為3,,則選擇寄存器display_data_reg[15..12]的4位二進(jìn)制數(shù)據(jù)進(jìn)行譯碼,即總是選擇寄存器display_data_reg[(count+1)×4-1..count×4]的4位二進(jìn)制數(shù)據(jù)進(jìn)行譯碼,。寄存器control_reg的低3位指明了小數(shù)點(diǎn)顯示的位置,,如control_reg[2..0]的值為“000”,則第0位數(shù)碼管的小數(shù)點(diǎn)點(diǎn)亮,,若control_reg[2..0]的值為“010”,,則第2位數(shù)碼管的小數(shù)點(diǎn)點(diǎn)亮。因?yàn)?,循環(huán)計(jì)數(shù)器的狀態(tài)值count反應(yīng)了數(shù)碼管動(dòng)態(tài)顯示過程中當(dāng)前數(shù)碼管顯示的位皆,,因此,數(shù)碼管小數(shù)點(diǎn)譯碼器只要比較control_reg[2..0]與count的值,,若兩者相等,,seg_out[7]輸山有效值(共陰極輸出為高電平,共陽極輸出為低電平)即可驅(qū)動(dòng)對(duì)應(yīng)數(shù)碼管的小數(shù)點(diǎn)點(diǎn)亮,。

     bit_control為自定制元件的位選控制輸出,,其數(shù)據(jù)寬度為n位二進(jìn)制,與要驅(qū)動(dòng)的數(shù)碼管的個(gè)數(shù)是一致的,。上面已經(jīng)提到,,循環(huán)加法計(jì)數(shù)器的狀態(tài)值count反應(yīng)了當(dāng)前數(shù)碼管顯示的位置。因此,,只要根據(jù)count的值,,使得bit_control對(duì)應(yīng)位輸出有效值即可。例如,,n取值為5,,pos取值為0(即驅(qū)動(dòng)共陰極數(shù)碼管),若計(jì)數(shù)器的當(dāng)前狀態(tài)值count為2,,則bit_control的輸出結(jié)果為“11011”,,若count為4,則bit_control的輸出結(jié)果為“01111”,。

 


    自定制元件的設(shè)計(jì)采用的是VHDL語言,,其實(shí)體描述如下面程序所示:

 


    從上面的程序可以看到:n和pos定義成了類屬變量,當(dāng)完成接口元件的定制以后,,類屬變量在自定制元件的設(shè)置窗口中將以用戶參數(shù)的形式出現(xiàn),,如圖4所示,用戶可以設(shè)置其值,。


    實(shí)體描述當(dāng)中除定義了自定制元件與外部設(shè)備的接口信號(hào)clk_display,,seg7_out,,bit_control信號(hào)以外,,還定義了 Avalon Slave接口信號(hào),,NiosⅡ軟核通過這些信號(hào)訪問自定制元件中定義的寄存器。前面介紹的兩個(gè)寄存器display_data_reg和control_reg是在程序的結(jié)構(gòu)體說明部分定義的,,具體語句如下:

    signal display_data_reg:std_logic_vector(31downto 0);

    signal control_reg:std_logic_vector(7 downto 0);

    結(jié)構(gòu)體中還完成了所定義的兩個(gè)寄存器的數(shù)據(jù)寫入操作,。圖3中所示的模n循環(huán)加法計(jì)數(shù)器、七段譯碼器,、小數(shù)點(diǎn)譯碼器和位譯碼器也在結(jié)構(gòu)體中按上面所介紹的功能設(shè)計(jì)完成,。

3 實(shí)驗(yàn)結(jié)果

    為了驗(yàn)證用于驅(qū)動(dòng)七段數(shù)碼管動(dòng)態(tài)顯示的自定制元件功能,實(shí)驗(yàn)中使用SOPC Builder建立了一個(gè)最簡單的NiosⅡ系統(tǒng),。該NiosⅡ系統(tǒng)添加了3個(gè)元件,,名稱為cpu_0的NiosⅡ軟核處理器;名稱為seg7的自定制元件,用于完成數(shù)碼管的顯示驅(qū)動(dòng);名稱為onchip_RAM的片上隨機(jī)存儲(chǔ)器,,存放調(diào)試時(shí)的程序代碼以及用作程序運(yùn)行空間,。生成的NiosⅡ系統(tǒng)的圖形符號(hào)如圖5所示,clk是系統(tǒng)工作時(shí)鐘輸入;reset_n是系統(tǒng)復(fù)位輸入,,低電平有效;clk_display_to_the_seg7是數(shù)碼管掃描時(shí)鐘輸入,,他決定了數(shù)碼管動(dòng)態(tài)顯示的掃描速度;bit_control_from_the_seg7是位選控制輸出,決定了動(dòng)態(tài)過程中哪一個(gè)數(shù)碼進(jìn)行顯示seg7_out_from_the_seg7是數(shù)碼管顯示數(shù)據(jù)輸出,,決定了數(shù)碼管顯示的內(nèi)容,。

    新建頂層原理圖,調(diào)用該NiosⅡ系統(tǒng),,為其添加輸入輸出引腳,,并定義引腳號(hào),選擇目標(biāo)器件型號(hào)為EP1C6Q240C8,,編譯生成配置文件,,并通過下載電纜下載到目標(biāo)器件中。接下來利用NiosⅡIDE建立用戶程序,。

 


    實(shí)驗(yàn)建立NiosⅡ系統(tǒng)時(shí),,添加驅(qū)動(dòng)七段數(shù)碼管顯示的自定制元件seg7時(shí)的參數(shù)n和pos(如圖4所示)設(shè)置成了兩種測試情況,分別用來驗(yàn)證其驅(qū)動(dòng)共陰極和共陽極數(shù)碼管顯示的情況,。第一種測試情況將n設(shè)置成7,,pos設(shè)置成0,用來驅(qū)動(dòng)7個(gè)共陰極數(shù)碼管顯示,。NiosⅡIDE建立的用戶測試程序如下:

 


    程序編譯通過后,,可以在硬件中調(diào)試運(yùn)行程序。為了便于觀察測試結(jié)果,,在ModelSim中運(yùn)行仿真結(jié)果,,得到仿真波形如圖6所示。仿真分析時(shí)系統(tǒng)工作時(shí)鐘(clk)設(shè)置為了50 MHz,,數(shù)碼管動(dòng)態(tài)顯示掃描頻率(clk_display)設(shè)置為1 kHz,。圖6(a)給出了寄存器內(nèi)容的寫入過程,,3個(gè)write高電平期間完成了 3次寄存器的寫入操作。第一次write高電平將0x00寫入address為1的寄存器(即控制寄存器,,該定義是在自定制元件的硬件描述語言設(shè)計(jì)中完成的);第二次write高電平將0xAF05163寫入address為0的寄存器(即數(shù)據(jù)寄存器);第三次write高電平將0x13又寫入address為1的控制寄存器,。當(dāng)控制寄存器的內(nèi)容為0x00時(shí),數(shù)碼管是停止顯示的,,因此,,在共陰極顯示的情況下bit_control的輸出全為高電平,直到控制寄存器的內(nèi)容寫入0x13后,,bit_control才有輸出為低電平的情況(如圖6所示),。圖6(b)給出了寫入寄存器內(nèi)容以后的工作情況,當(dāng)數(shù)據(jù)寄存器寫入0xAF05163,、控制寄存器寫入0x13后,,bit_control將從1111110到0111111循環(huán)變化,同時(shí)將數(shù)碼管顯示所需要的字符碼從seg7_out輸出,。如當(dāng)bit_control為1111110時(shí),,seg7_out輸出字符碼為0x4F,對(duì)應(yīng)顯示“3”;當(dāng)bit_control為1111101時(shí),,seg7_out輸出字符碼為0x7D,,對(duì)應(yīng)顯示“6”。由于控制寄存器寫入的內(nèi)容為0x13,,即第三位數(shù)據(jù)管的小數(shù)點(diǎn)會(huì)亮起,,因此當(dāng)bit_control為1110111時(shí),,seg7_out輸出字符碼為0xED(即二進(jìn)制的“11101101”),,數(shù)碼管對(duì)應(yīng)顯示“5”,而最高一位的“1”會(huì)讓該數(shù)碼管的小數(shù)點(diǎn)點(diǎn)亮,。

    以上是第一種測試情況,。第二種測試情況是將seg7的參數(shù)n設(shè)置成5,,pos設(shè)置成1,用來驅(qū)動(dòng)5個(gè)共陽極數(shù)碼管顯示,。NiosⅡ IDE建立的用戶測試程序如下:

 


    程序編譯通過后,,同樣在Modelsim中運(yùn)行仿真結(jié)果,得到仿真波形如罔7所示,。仿真分析時(shí)系統(tǒng)工作時(shí)鐘(clk)設(shè)置為了50 MHz,,數(shù)碼管動(dòng)態(tài)顯示掃描頻率(clkdisplay)設(shè)置為1 kHz。

 


    與第一種共陰極顯示情況相比,,第二種共陽極顯示時(shí)的寄存器寫入過程是大體一樣的,。不同之處在于共陽極顯示時(shí)的bit_control和seg7_out和輸出極性正好與共陰極顯示時(shí)的相反。

    通過以上的實(shí)驗(yàn),驗(yàn)證了自定制七段數(shù)碼管動(dòng)態(tài)顯示接口元件功能的正確性,。

4 結(jié) 語

    在用Altera公司的SOPC Builder工具完成NiosⅡ軟核SOPC系統(tǒng)設(shè)計(jì)時(shí),,可以用SOPC Builder中提供的元件來構(gòu)建整個(gè)系統(tǒng)。但對(duì)于有些外部設(shè)備,,SOPC Builder并沒有提供對(duì)應(yīng)的接口元件,此時(shí),,就可以使用SOPC Build-er工具的自定制用戶元件功能來創(chuàng)建特定功能的接口元件,。在本文中,針對(duì)數(shù)碼管的顯示,,定制了一個(gè)七段數(shù)碼管動(dòng)態(tài)顯示接口元件,,可以用來驅(qū)動(dòng)1~8個(gè)共陰極(或共陽極)數(shù)碼管的顯示,可以根據(jù)需要選擇小數(shù)點(diǎn)顯示的位置,,每個(gè)數(shù)碼管可以顯示0~F之間的十六進(jìn)制字符,,并通過實(shí)驗(yàn)驗(yàn)證了其功能的正確性。

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