NIOS II Step y Step1---NIOS II自定義指令_第1頁
NIOS II Step y Step1---NIOS II自定義指令_第2頁
NIOS II Step y Step1---NIOS II自定義指令_第3頁
NIOS II Step y Step1---NIOS II自定義指令_第4頁
NIOS II Step y Step1---NIOS II自定義指令_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

NIOS II Step By Step(1)-NIOS II自定義指令NIOS II Step By Step(1)-NIOS II自定義指令可編程軟核處理器最大的特點是靈活,靈活到我們可以方便的增加指令,這在其他SOC系統(tǒng)中做不到的,增加用戶指令可以把我們系統(tǒng)中用軟件處理時耗費時間多的關(guān)鍵算法用硬邏輯電路來實現(xiàn),大大提高系統(tǒng)的效率,更突出的一點是:我們通過下面的逐步操作會認識到,這是一個聽起來高深,其實比較容易實現(xiàn)的功能(我們站在EDA工具這個巨人肩上,風光無限?。海ㄟ^這一文檔的介紹可以增強我們掌握NIOS II所有的技術(shù)手段的信心,這也是我把NIOS II 用戶指令放在最前面的用意。7 q$ 1 Q! i/ aFPGA設(shè)計網(wǎng)論壇 用戶指令就是我們讓NIOS II軟核完成的一個功能,這個功能由電路模塊來實現(xiàn),這個電路模塊是用HDL語言描述的。它被連接到NIOS II軟核的算術(shù)邏輯部件上,下面就是示意圖: c_i_1.jpg (22.21 KB)2008-1-6 15:21 用戶指令分多種,有組合邏輯指令、多周期指令、擴展指令等等,學明白一個,也就舉一反三了, Altera提供了用戶模塊HDL的模板,通過裁減就可以適應(yīng)多種指令類型了。下面就是這個模版的Verilog形式,很簡單吧,我想看到這里很多人會說:oh,thats easy。模塊里面的內(nèi)容不要我說了,也說不盡,是你智慧表演的舞臺了,八仙過海,各顯神通的機會來了:)7 l4 O- 5 / * P: V! n( d3 O P) A/Verilog Custom Instruction Template% p, N) W: - 5 r. t; * l Cmodule _module_name(FPGA設(shè)計網(wǎng)論壇9 v / N7 _% g/ M7 M) clk, / CPUs master-input clk 0 s m* b& w8 f# - S$ Yreset, / CPUs master asynchronous reset . x- R3 q7 s5 ! j J( Y6 Z( z Qclk_en, / Clock-qualifier R: 7 _s$ ( M0 X( start, / True when this instr. issues 7 h1 K0 P: i u# s8 zFPGA設(shè)計網(wǎng)論壇done, / True when instr. completes % q0 F2 & J. Z7 Ldataa, / operand A # G& W* K( J( x- D. datab, / operand B - X0 u- W3 O) dbn, / N-field selector FPGA設(shè)計網(wǎng)論壇, D1 u8 , K& vm ka, / operand A selector m! l! M6 _: F# n Fb, / operand b selector 6 Q. G6 |# qz& p i/ Vc, / result destination selector J X* N4 ) L& Y, G y# t7 % readra, / register file index % J8 c3 b% C; m0 n2 d. x3 ?readrb, / register file index 2 b% ) % e L2 cwriterc,/ register file index 0 u9 U9 B8 R# I/ eresult / result / b5 e m/ 4 g& J- c+ a$ N1 H7 A: Q 1 E);+ N# ; d; c; h1 D6 Minput clk; M1 O, a* j! W W, | input reset;6 X6 - % G0 X4 M0 I9 1 Sinput clk_en;4 t# fy! / fdinput start; f9 k: CI- a% w* a* N) Winput readra;/ M: o* h3 ?9 h# O) d0 input readrb;/ ?9 w+ U( o1 B+ input writerc; V! n7 t) T- s9 Cinput 7:0 n;% _7 |$ 9 b6 Winput 4:0 a;1 U 5 l; M# $ yinput 4:0 b; X( _2 z) u+ U3 r4 sFPGA設(shè)計網(wǎng)論壇input 4:0 c; B7 q9 Q6 e1 |4 l6 n+ I4 b9 minput 31:0dataa;- v: H; g1 B# h$ L: g. u* Qinput 31:0datab;# y0 | q N* E9 S: d2 o3 Coutput31:0result;& j2 k0 t; D) j koutput done;FPGA設(shè)計網(wǎng)論壇4 j% l3 e- o9 l * K$ FPGA設(shè)計網(wǎng)論壇8 a6 D9 f7 l* h8 ) : |/ Port Declaration& ; w; z& U9 A/ c/ Wire Declaration6 j& 5 P3 C: O) F& k1 D4 H/ Integer Declaration) G. j% J. M. uL& E7 / Concurrent AssignmentFPGA設(shè)計網(wǎng)論壇 a8 ?, + k: I4 U/ Always Construct, R9 u9 I8 B8 g# m+ u! QendmoduleFPGA設(shè)計網(wǎng)論壇$ w5 U! N+ 0面兩張圖和表可以幫助我們更深入的理解和總結(jié):- ; m- N: b9 c_i_2.jpg (25.96 KB)2008-1-6 15:21c_i_3.jpg (78.43 KB)2008-1-6 15:21; P8 V+ 7 G% n2 o萬事開頭難,那我們就挑個軟的捏,來做一條組合邏輯指令吧,下面就是模塊示意圖:FPGA設(shè)計網(wǎng)論壇# X7 % M這個模塊只有兩個輸入,A,B,都是32BIT的,輸出也是32BIT的。你可以讓他們是C=A+B,也可以C=A+1。我們給出一個HDL范例:2 z% C+ w# X* O- R& t& /Verilog Custom Instruction Template/ S1 Z B. c6 N1 u Lmodule test_custom_instruction(FPGA設(shè)計網(wǎng)論壇 n( F/ ?1 S0 m5 Ndataa, / operand A / w! Tf# k8 h* c kdatab, / operand B FPGA設(shè)計網(wǎng)論壇! y% / H# D) Dresult / result $ R8 k: h- Hx7 _. pFPGA設(shè)計網(wǎng)論壇);1 g7 Z( q% 6 C% A, linput 31:0dataa;5 j& T N q) i1 C* v D8 ?: Uinput 31:0datab;2 q, U$ w) N: Y6 b! boutput31:0result;: l% 5 M: i/ - ?8 ?FPGA設(shè)計網(wǎng)論壇5 P2 1 l0 V% # m; _assign result=dataa+1;) v; s$ |/ I, N- XV( : L9 R, C z3 d1 K4 X, c- t endmodule+ K2 O# e3 p* / v% e上面的模塊實現(xiàn)A+1,很簡單。其他指令類型也就是增加了PORT口,里面處理更復雜一點。下面是多周期指令的塊圖:4 o* A% n7 C2 O: E c_i_5.jpg (14.97 KB)2008-1-6 15:21 有了以上概念,和HDL模塊的準備,我們可以進入實際操作了,打開QUARTUS II,建一個工程,再進入SOPC BUILDER,建好相關(guān)的SOPC 環(huán)境,下圖是FreeDev2.1 EP1C12+100M開發(fā)板的一個配置! d! l9 , T c_i_6.jpg (143.94 KB)2008-1-6 15:21 X- m) f* & z: n9 p/ % Q雙擊CPU項就進入CPU配置,設(shè)置用戶指令我們要選最后一個表單(Custom Instructions TAB)。見下圖- O, u+ s8 Z6 C* WFPGA設(shè)計網(wǎng)論壇c_i_7.jpg (36.71 KB)2008-1-6 15:210 $ Q. P2 Z8 i1 I& 4 6 YC在該表單中我們點擊IMPORT,來加入我們的HDL模塊,見下圖:c_i_8.jpg (43.42 KB)2008-1-6 15:211 db2 K1 P7 I在IMPORT操作窗口上,點擊ADD增加用戶指令模塊,點擊read port list from files顯示模塊PORT。$ 最后點擊Add to System完成用戶指令的添加。在SOPC BUILDER 中生成系統(tǒng),并在QUARTUS II中重新編譯整個工程,并program編程開發(fā)板器件,這樣硬件部分就完成了。下面我們就可以在NIOS II IDE中來編程使用我們的指令了。: 5 W- t; H5 d& b由于我們在SOPC BUILDER 中增加了用戶指令,SOPC BUILDER 生成的PTF文件中包含了相關(guān)信息,我們在NIOS II IDE 中增加新軟件工程項目編譯時,系統(tǒng)根據(jù)SOPC BUILDER生成的PTF文件生成了硬件系統(tǒng)描述的system.h。在該頭文件中系統(tǒng)已經(jīng)為用戶指令生成了相關(guān)的宏,我們以上定制的用戶指令在system.h中相關(guān)部分如下:/*- + z1 M6 N* k7 G! O: S! D+ o* custom instruction macroswww.fpga-desi*/#define ALT_CI_TEST_CUSTOM_INSTRUCTION_N 0x000000005 y2 l/ q- k1 p# . R#defineALT_CI_TEST_CUSTOM_INSTRUCTION(A,B) _builtin_custom_inii(ALT_CI_TEST_CUSTOM_INSTRUCTION_N,(A),(B), d%1 8 f8 S6 B4 F# G8 t. k注意_builtin_custom_inii是Altera 移植GCC后的built_in Function。5 |6 7 X/ K2 B/ C# v最后,我們創(chuàng)建一個Hello World工程,稍微改動一下: O U, % J0 g# b! b#include 1 i3 t6 V$ p4 j l( #include + f9 e, d9 D( 3 x4 G! B5 ?+ b! E# Amint main()& I4 F4 T3 A% M! Y* 4 Dint a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論