在【原創(chuàng)】SOPC用戶自定義指令設(shè)計(jì)之軟件篇??和【原創(chuàng)】SOPC用戶自定義指令設(shè)計(jì)之硬件篇 中分別講述了自定義指令在軟件和硬件設(shè)計(jì)中的規(guī)范,在本文中,將給出一個(gè)具體的實(shí)例,以具體說(shuō)明自定義指令的強(qiáng)大功能。
l???????? 自定義指令添加
在當(dāng)前工程文件夾下建立ip文件夾(當(dāng)前工程目錄下的ip文件夾是SOPCBuilder的ip默認(rèn)搜索路徑之一),將自定義指令設(shè)計(jì)文件放入該ip文件夾下。
打開(kāi)SOPCBuilder,添加Nios II Processor,點(diǎn)擊Custom Instructions,在點(diǎn)擊左下角的import…,彈出component editor窗口。
在component editor中選擇HDL Files標(biāo)簽,點(diǎn)擊Add…,選擇自定義指令設(shè)計(jì)文件目錄,添加文件。選擇Synth的復(fù)選框,因?yàn)檫@里不進(jìn)行仿真,不選Sim下面的復(fù)選框,選擇CRC_Custom_Instruction.v為頂層文件。
選擇Signals標(biāo)簽,將所有接口指定為nios_custom_instruction_slave_0接口,在默認(rèn)情況下,clk和reset為clock_reset接口,必須將其改為nios_custom_instruction_slave_0,否則在添加指令時(shí)會(huì)將該擴(kuò)展自定義可變多周期指令認(rèn)成組合邏輯指令,在SOPC generate時(shí)會(huì)出錯(cuò)。
選擇Intefaces接口,點(diǎn)擊remove intefaces with no signal刪除多余的clock_reset接口,由于該指令只需要一個(gè)輸入變量,將Operand設(shè)置為1,該指令為可變周期指令,將clock cycles設(shè)置成0。
選擇Component Wizard標(biāo)簽,填寫(xiě)如下信息,在Parameters中會(huì)顯示自定義指令中使用的參數(shù),如果勾選Editable,則可以在添加指令是設(shè)置這些參數(shù)的值。
點(diǎn)擊Finish…完成指令的添加,此時(shí)會(huì)在自定義指令設(shè)計(jì)文件夾下生成文件CRC_Custom_Instruction_hw.tcl,該文件包含了SOPCBuilder所需的該自定義指令的所有信息。
?
l???????? 自定義指令集成進(jìn)Nios II處理器
重新打開(kāi)添加的CPU,選擇Custom Instructions,此時(shí)可以看見(jiàn)在左邊欄中出現(xiàn)剛才添加的自定義指令CRC_Custom_Instruction。
選擇CRC_Custom_Instruction,點(diǎn)擊Add…,在右邊欄出現(xiàn)添加的自定義指令,雙擊name改名為CRC,clock cycles顯示為Variable,表明該指令為可變周期指令,N Port顯示為N[2:0],表明該指令為擴(kuò)展指令,用3bit來(lái)指定指令執(zhí)行什么功能,Opcode Extension表明該指令所使用的指令序號(hào)(分別用二進(jìn)制和十進(jìn)制加以顯示),軟件調(diào)用時(shí)就是指令序號(hào)來(lái)選擇具體實(shí)現(xiàn)哪條指令,硬件篇曾提到Nios II支持256個(gè)自定義指令,這條擴(kuò)展指令有8個(gè)不同功能,因此占用了0~7的序號(hào)。點(diǎn)擊Finish,完成指令的集成。
集成完后,在SOPCBuilder面板中單獨(dú)列出該指令,提示需要為指令指令clk,我們將其指定為與CPU相同的clk,此時(shí)指令在面板中消失,已經(jīng)集成進(jìn)了CPU。
?????? 為了測(cè)試該指令,我們建立如下SOPC系統(tǒng)。
l???????? 軟件調(diào)用
建立基于上述硬件系統(tǒng)的軟件工程,在軟件中分別用自定義指令進(jìn)行CRC運(yùn)算以及用純軟件進(jìn)行CRC運(yùn)算,比較兩個(gè)所需的時(shí)間。運(yùn)行結(jié)果如下:
+-----------------------------------------------------------+
| Comparison between software and custom instruction CRC32? |
+-----------------------------------------------------------+
?
?
System specification
--------------------
System clock speed = 50.0 MHz
Number of buffer locations = 8
Size of each buffer = 256 bytes
?
?
Initializing all of the buffers with pseudo-random data
-------------------------------------------------------
Initialization completed
?
?
Running the software CRC
------------------------
Completed
?
?
Running the optimized software CRC
----------------------------------
Completed
?
?
Running the custom instruction CRC
----------------------------------
Completed
?
?
Validating the CRC results from all implementations
----------------------------------------------------
All CRC implementations produced the same results
?
?
Processing time for each implementation
---------------------------------------
Software CRC = 22.93 ms
Optimized software CRC = 15.01 ms
Custom instruction CRC = 0.35 ms
?
?
Processing throughput for each implementation
---------------------------------------------
Software CRC = 0.71 Mbps
Optimized software CRC = 1.09 Mbps
Custom instruction CRC = 47.09 Mbps
?
?
Speedup ratio
-------------
Custom instruction CRC vs software CRC = 65.9
Custom instruction CRC vs optimized software CRC = 43.1
Optimized software CRC vs software CRC= 1.5
?
結(jié)果顯示自定義指令運(yùn)行速度是純軟件的65.9倍,是優(yōu)化后軟件的43.1倍,體現(xiàn)出了自定義指令明顯的優(yōu)勢(shì)。
評(píng)論
查看更多