在【原創(chuàng)】SOPC用戶自定義指令設(shè)計之軟件篇??和【原創(chuàng)】SOPC用戶自定義指令設(shè)計之硬件篇 中分別講述了自定義指令在軟件和硬件設(shè)計中的規(guī)范,在本文中,將給出一個具體的實例,以具體說明自定義指令的強大功能。
l???????? 自定義指令添加
在當(dāng)前工程文件夾下建立ip文件夾(當(dāng)前工程目錄下的ip文件夾是SOPCBuilder的ip默認(rèn)搜索路徑之一),將自定義指令設(shè)計文件放入該ip文件夾下。
打開SOPCBuilder,添加Nios II Processor,點擊Custom Instructions,在點擊左下角的import…,彈出component editor窗口。
在component editor中選擇HDL Files標(biāo)簽,點擊Add…,選擇自定義指令設(shè)計文件目錄,添加文件。選擇Synth的復(fù)選框,因為這里不進行仿真,不選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,否則在添加指令時會將該擴展自定義可變多周期指令認(rèn)成組合邏輯指令,在SOPC generate時會出錯。
選擇Intefaces接口,點擊remove intefaces with no signal刪除多余的clock_reset接口,由于該指令只需要一個輸入變量,將Operand設(shè)置為1,該指令為可變周期指令,將clock cycles設(shè)置成0。
選擇Component Wizard標(biāo)簽,填寫如下信息,在Parameters中會顯示自定義指令中使用的參數(shù),如果勾選Editable,則可以在添加指令是設(shè)置這些參數(shù)的值。
點擊Finish…完成指令的添加,此時會在自定義指令設(shè)計文件夾下生成文件CRC_Custom_Instruction_hw.tcl,該文件包含了SOPCBuilder所需的該自定義指令的所有信息。
?
l???????? 自定義指令集成進Nios II處理器
重新打開添加的CPU,選擇Custom Instructions,此時可以看見在左邊欄中出現(xiàn)剛才添加的自定義指令CRC_Custom_Instruction。
選擇CRC_Custom_Instruction,點擊Add…,在右邊欄出現(xiàn)添加的自定義指令,雙擊name改名為CRC,clock cycles顯示為Variable,表明該指令為可變周期指令,N Port顯示為N[2:0],表明該指令為擴展指令,用3bit來指定指令執(zhí)行什么功能,Opcode Extension表明該指令所使用的指令序號(分別用二進制和十進制加以顯示),軟件調(diào)用時就是指令序號來選擇具體實現(xiàn)哪條指令,硬件篇曾提到Nios II支持256個自定義指令,這條擴展指令有8個不同功能,因此占用了0~7的序號。點擊Finish,完成指令的集成。
集成完后,在SOPCBuilder面板中單獨列出該指令,提示需要為指令指令clk,我們將其指定為與CPU相同的clk,此時指令在面板中消失,已經(jīng)集成進了CPU。
?????? 為了測試該指令,我們建立如下SOPC系統(tǒng)。
l???????? 軟件調(diào)用
建立基于上述硬件系統(tǒng)的軟件工程,在軟件中分別用自定義指令進行CRC運算以及用純軟件進行CRC運算,比較兩個所需的時間。運行結(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é)果顯示自定義指令運行速度是純軟件的65.9倍,是優(yōu)化后軟件的43.1倍,體現(xiàn)出了自定義指令明顯的優(yōu)勢。
評論
查看更多