第四章 模擬與驗證
本章敘述 Pipelined MIPS CPU 指令模擬測試與平台規劃和系統測試。
測試流程為:先將 Pipelined MIPS CPU 設計完畢後,利用 Xilinx ISE 設計 軟體與模擬工具 Model Sim 進行 Synthesize、Implement Design、Simulate,
驗證其功能是否正確。最後再進行 Implementation,最後下載至 FPGA 實 驗平台,透過實驗平台周邊 I/O 裝置與測試程式,對整個 Pipelined MIPS CPU 系統執行完整測試。測試流程如圖 4-1。
圖 4-1 系統測試流程
第一節 實驗平台規劃
本研究所使用的 FPGA 實驗平台,主要以 FPGA 晶片板搭配 Xilinx Virtex XCV800 之 FPGA 晶片為核心搭配 I/O 模組。以下將實驗平台分為 六大單元來說明,如圖 4-2、圖 4-3 所示:
一、FPGA 晶片板(FPGA Board):Xilinx Virtex XCV800 晶片,是一顆 HQ 包裝 240 pin 的 FPGA,利用轉接板的連接讓設計者能將 FPGA 的接腳連接到外部 I/O 模組。
二、電源電路(Power Circuit):提供全部電路使用之電源。整個 FPGA 實驗平台共需要二種直流電源的供應,分別為一般 IC 所需的 3.3V
TestPrg
.coe Xilinx ISE Core Generator
Instruction Memory Xilinx ISE 7.1i
FPGA Board JTAG Port
直流電源,和 FPGA 晶片所需的 2.5V 直流電源。
三、傳輸埠(Print Port):提供由 PC 之印表機 Print Port 下載「FPGA 組 成資料」,規劃 FPGA 晶片的途徑。只需將此 FPGA 實驗平台插 上印表機排線,即可進行下載。
四、 JTAG 埠:提供由 PC 之印表機 Print Port 下載至晶片上,透過 JTAG 電路可搭配 Xilinx ChipScope 做邏輯分析。
五、輸入元件群:包含 1 組 4x4 掃描式鍵盤、3 組 8 位元之指撥開關 以及 4 個按壓開關。
六、輸出元件群:包含 1 個 16 x 2 的文字型 LCD、6 組七段顯示器、
4 組 10 位元之 LED。
圖 4-2 FPGA 實驗平台元件位置圖
Power Circuit
800K Gate counts
FPGA
PrintPort
Text LCD Module
Seven Segment
LED Bar
Dip Switches 4X4 Key Pad Push Buttoms
JTAGPort
LED Bar LED Bar LED Bar
圖 4-3 FPGA 實驗平台實體
第二節 Pipelined MIPS CPU 指令模擬測試
在 電 腦 上 完 成 測 試 程 式 的 十 六 進 制 碼 輸 入 , 並 建 另 存 新 檔 TestPrg.coe,開啟 Xilinx ISE Core Generator,將 TestPrg.coe 載入 Pipelined MPS CPU 的 Instruction Memory 中,使用 Model Sim 進行 Synthesiz、
Implement 和 Simulate。
壹、R-Type 指令模擬測試
一、R-Type 指令測試如表 4-1 所示。
(一)Memory Address 000~004:LW 指令功能測試,從 Pipelined MIPS CPU 內的 Instruction Memory 中擷取資料,儲存於指定暫存器。
(二)Memory Address 005~008:算術運算指令的測試。
(三)Memory Address 009:SW 指令功能測試,將指令的暫存器內容 存到特定記憶體位址。
(四)Memory Address 010~013:移位運算指令的測試。
(五)Memory Address 014~017:無符號的算術邏輯指令測試。
表 4-1 R-Type 指令測試程式
INSTRUCTION SEGMENT Program Memory
Address
Machine
Code Function LW $2,128($0) 000 8C020080 $2 = 81
LW $3,129($0) 001 8C030081 $3 = 82 LW $4,130($0) 002 8C040082 $4 = 83 LW $5,131($0) 003 8C050083 $5 = 84 LW $6,132($0) 004 8C060084 $6 = 85 SUB $5,$2,$3 005 00622822 $5 = 1 ADD $4,$2,$4 006 00822020 $4 = 104 AND $3,$4,$0 007 00801824 $3 = 0
OR $5,$2,$4 008 00442825 $5 = 185 SW $6,132($0) 009 AC060083 MEM[84] = 85 SLL $7,$2,5 010 00023940 $7 = 1020 SLL $9,$8,3 011 000848C0 $9 = 0 SRL $10,$4,2 012 00045082 $10 = 41 SRA $11,$2,3 013 000258C3 $11 = 10 ADDU $12,$2,$4 014 00446021 $12 = 185
SUB $9,$6,$2 015 00C24823 $9 = 4 XOR $14,$5,$7 016 00A77026 $14 = 11A5 NOR $15,$2,$8 017 00487827 $15= FFFFFF7E
DATA SEGMENT Memory
Address Data 128 00000081 129 00000082 130 00000083 131 00000084 132 00000085 二、軟體模擬結果:如圖 4-4、圖 4-5 所示。
圖 4-4 R-Type 指令模擬結果(1)
圖 4-5 R-Type 指令模擬結果(2)
貮、I-Type 指令模擬測試
一、I-Type 指令測試如表 4-2 所示。
(一)Memory Address 000~003:LW 指令,從 Instruction Memory 中 擷取資料,並儲存於指定暫存器。
(二)Memory Address 004~0013:立即值運算指令測試,分別以 Unsigned 與 Signed 立即值運算做測試。
表 4-2 I-Type 指令測試程式
INSTRUCTION SEGMENT Program Memory
Address
Machine
Code Function LW $17,16($0) 000 8E11000A $17 = B LW $18,17($0) 001 8E12000B $18 = C LW $19,18($0) 002 8E13000C $19 = D LW $20,19($0) 003 8E14000D $20 = E LW $21,20($0) 004 8E15000E $21 = F ADDI $19,$18,1 005 22530001 $19 = D ADDIU $20,$18,1 006 26540001 $20 = D ANDI $21,$17,x00f0 007 323500F0 $21 = 0 ORI $22,$17,x00fo 008 363600F0 $22 = FB XORI $23,$17,x00f0 009 3A3700F0 $23 = FB
DATA SEGMENT Memory
Address Data 16 0000000B 17 0000000C 18 0000000D 19 0000000E 20 0000000F 二、軟體模擬結果:如圖 4-6、圖 4-7。
圖 4-6 I-Type 指令模擬結果(1)
圖 4-7 I-Type 指令模擬結果(2)
參、B-Type 和 J-Type 指令模擬測試
一、BEQ 指令測試如表 4-3 所示。
(一)Memory Address 000~005:LW 指令,從 Instruction Memory 中 擷取資料,並儲存於指定暫存器。
(二)Memory Address 006:BEQ 指令測試。
(三)Memory Address 007~013:算術邏輯運運指令。
表 4-3 BEQ 指令測試程式
INSTRUCTION SEGMENT Program Memory
Address Machine Code Function LW $2,9($0) 000 8C020009 $2 = A LW $3,9($0) 001 8C030009 $3 = A LW $4,A($0) 002 8C04000A $4 = B LW $5,B($0) 003 8C05000B $5 = C LW $6,C($0) 004 8C06000C $6 = D LW $7,D($0) 005 8C07000D $7 = E BEQ $2, $3, 1 006 10430001
jmp 11 if $2=$3
ADD $8, $2, $3 007 00434020 SUB $9, $2, $3 008 00434822 AND $a, $2, $3 009 00435024 XOR $2, $3, $4 010 00641026
OR $3, $4, $5 011 00A61825 $3 = D AND $5, $6, $7 012 00C72824 $5 = C SUB $6, $7, $a 013 00EA3022 $6 = 4
DATA SEGMENT Memory
Address Data 009 0000000A 010 0000000B 011 0000000C 012 0000000D 013 0000000E
二、軟體模擬結果:如圖 4-8 所示。
圖 4-8 BEQ 指令模擬結果
三、BNE 指令測試如表 4-4 所示。
(一)Memory Address 000~005:LW 指令,從 Instruction Memory 中 擷取資料,並儲存於指定暫存器。
(二)Memory Address 006:BEQ 指令測試。
(三)Memory Address 007~013:算術邏輯運運指令。
表 4-4 BNE 指令測試程式
INSTRUCTION SEGMENT Program Memory
Address Machine Code Function
LW $2,8($0) 000 8C020008 $2 = 9
LW $3,9($0) 001 8C030009 $3 = A
LW $4,A($0) 002 8C04000A $4 = B
LW $5,B($0) 003 8C05000B $5 = C
LW $6,C($0) 004 8C06000C $6 = D
BEQ $2, $3, 1 006 14430001
jmp 11 if $2=/$3
LW $7,D($0) 007 8C07000D $6 = E
ADD $8, $2, $3 008 00434020 SUB $9, $2, $3 009 00434822 AND $a, $2, $3 010 00435024
XOR $2, $3, $4 011 00641026 $2 = 1 OR $3, $4, $5 012 00A61825 $3 = D AND $5, $6, $7 013 00C72824 $5 = 0 SUB $6, $7, $a 014 00EA3022 $6 = 0
DATA SEGMENT Memory
Address Data 008 00000009 009 0000000A 010 0000000B 011 0000000C 012 0000000D 013 0000000E
四、軟體模擬結果:如圖 4-9 所示。
圖 4-9 BNE 指令模擬結果
五、JMP 指令測試如表 4-5 所示。
(一)Memory Address 000~005:LW 指令,從 Instruction Memory 中 擷取資料,並儲存於指定暫存器。
(二)Memory Address 006:BEQ 指令測試。
(三)Memory Address 007~013:算術邏輯運運指令。
表 4-5 JMP 指令測試程式
INSTRUCTION SEGMENT Program Memory
Address Machine Code Function
LW $2,9($0) 000 8C020009 $2 = A
LW $3,9($0) 001 8C030009 $3 = A
LW $4,A($0) 002 8C04000A $4 = B
LW $5,B($0) 003 8C05000B $5 = C
LW $6,C($0) 004 8C06000C $6 = D
LW $7,D($0) 005 8C07000D $7 = E
JMP JMP 13 006 0800000e JMP 13
ADD $8, $2, $3 007 00434020 SUB $9, $2, $3 008 00434822 AND $a, $2, $3 009 00435024 XOR $2, $3, $4 010 00641026 OR $3, $4, $5 011 00A61825 AND $5, $6, $7 012 00C72824
SUB $6, $7, $a 013 00EA3022 $6 = E DATA SEGMENT
Memory
Address Data 009 0000000A 010 0000000B 011 0000000C 012 0000000D 013 0000000E
六、軟體模擬結果:如圖 4-10 所示。
圖 4-10 JMP 指令模擬結果
肆、Data Forwarding 的模擬測試
(一)Memory Address 000~004:LW 指令,從 Instruction Memory 中 擷取資料,並儲存於指定暫存器。
(二)Memory Address 005~07:Memory Address 6、Memory Address 7 與 Memory Address 5 資料相依($2)。
(三)Memory Address 08~09:Memory Address 8 與 Memory Address 9 資料相依($4)。
表 4-6 Data Forwarding 的測試程式
INSTRUCTION SEGMENT Program Memory
Address
Machine
Code Function LW $1,128($0) 000 8C010080 $1 = 81 LW $3,129($0) 001 8C030081 $3 = 82 LW $5,130($0) 002 8C050082 $5 = 83 LW $7,131($0) 003 8C070083 $7 = 84 LW $8,132($0) 004 8C080084 $8 = 85 SUB $2,$3,$1 005 00611022 $2 = 1 AND $4,$2,$5 006 00452024 $4 = 1 OR $4,$4,$2 007 00822025 $4 = 1 ADD $9,$2,$4 008 00842420 $9 = 2
DATA SEGMENT Memory
Address Data 128 00000081 129 00000082 130 00000083 131 00000084 132 00000085 二、軟體模擬結果:如圖 4-11 所示。
圖 4-11 Data Forwarding 測試模擬
伍、Load-use Data Hazard 模擬測試
一、Load-use Data Hazard 時的測試如表 4-7 所示。
(一)Memory Address 000~003:LW 指令,從 Instruction Memory 中 擷取資料,並儲存於指定暫存器。
(二)Memory Address 003~004:產生 Load-use Data Hazard。
(三)Memory Address 005~006:算術邏輯運算指令。
表 4-7 Load-use Data Hazard 的測試程式
INSTRUCTION SEGMENT
Program Memory Address
Machine
Code Function LW $5,16($0) 000 8C050010 $5 = 11 LW $1,17($0) 001 8C010011 $1 = 12 LW $3,18($0) 002 8C030012 $3 = 13 LW $2,20($0) 003 8C020014 $2 = 15 AND $4,$2,$5 004 00452024 $4 = 11 OR $8,$2,$5 005 00452025 $8 = 15 ADD $9,$4,$2 006 00824820 $9 = 26
DATA SEGMENT Memory
Address Data 16 00000011 17 00000012 18 00000013 19 00000014 20 00000015 二、軟體模擬結果:如圖 4-12 所示。
圖 4-12 Load-use Data Hazard 測試模擬
陸、Branch Hazard 模擬測試
一、Branch Hazard 時的測試如表 4-8 所示。
(一)Memory Address 000~002:LW 指令,從 Instruction Memory 中 擷取資料,並儲存於指定暫存器。
(二)Memory Address 003~004:一般算術邏輯運算指令。
(三)Memory Address 005~006:產生 Branch Hazard,若分支條件成 立,跳至 Memory Address 010。
(四)Memory Address 007~009:一般算術邏輯運算指令。
(五)Memory Address 010~014:立即值運算 表 4-8 Branch Hazard 的測試程式
INSTRUCTION SEGMENT Program MemoryAddress Machine
Code Function
LW $2,8($0) 000 8C020008 $2 = 9
LW $3,9($0) 001 8C030009 $3 = A
LW $4,A($0) 002 8C04000A $4 = B
ADD $8,$2,$3 003 00434020 $8 = 19
XOR $2,$3,$4 004 00641026 $2 = 1
OR $8,$2,$5 005 00452025 $8 = 15
BEQ $2,$8,10 006 14480001 If$2=/$8 then go 10
OR $3,$4,$5 007 00A61825
AND $5,$6,$7 008 00C72824
SUB $6,$7,$0 009 00EA3022
ADDI $13,$12,1 010 22530001 $13 = 1 ADDI $14,$12,1 011 26540001 $14 = 1 ANDI $15,$11,F0 012 323500F0 $15 = 0 ORI $16,$11,F0 013 363600F0 $16 =F0 XORI $17,$11,F0 014 3A3700F0 $17 = F0
DATA SEGMEN
Memory Address Data 8 00000011 9 00000012 10 00000013
二、軟體模擬結果:如圖 4-13 所示。
圖 4-13 Branch Hazard 測試模擬
染、浮點數指令模擬測試
一、浮點數指令測試如表 4-9 所示。
(一)Memory Address 000~006:LW 指令,從 Instruction Memory 中 擷取資料,並儲存於指定暫存器。
(二)Memory Address 008~010:一般算術邏輯運算指令測試。
(三)Memory Address 011:浮點數減法指令測試。
(四)Memory Address 012~018:nop 指令,不做任何動作。
(五)Memory Address 019:浮點數減法指令測試。
(六)Memory Address 020~027:nop 指令,不做任何動作。
(七)Memory Address 028:浮點數乘法指令測試。
(八)Memory Address 012~018:nop 指令,不做任何動作。
(九)Memory Address 012~018:浮點數除法指令測試。
表 4-9 浮點數的測試程式
INSTRUCTION SEGMENT
Program Memory Address Machine Code Function LW $2,128($0) 000 8C020080 $2 = 81
LW $3,129($0) 001 8C030081 $3 = 82 LW $4,130($0) 002 8C040082 $4 = 83 LW $5,131($0) 003 8C050083 $5 = 84 LW $6,132($0) 004 8C060084 $6 = 85
LW $10,10($0) 005 8C0A000A $A=3FC00000 LW $11,11($0) 006 8C0B000B $B=3DA00000
SUB $5,$3,$2 007 00622822 $5 = 1
ADD $9,$2,$3 008 00822020 $4 = 104
AND $3,$4,$0 009 00801824 $3 = 0
OR $5,$2,$4 010 00442825 $5 = 185
F.ADD $12,$10,$11 011 454B6000 $C=3FCA0000
NOP 012~018 00000000
F.SUB $13,$10,$11 019 454B6801 $D=3FB60000
NOP 020~027 00000000
F.MUL $14, $10,$11 028 454B7002 $E=3D700000
NOP 029~036 00000000
F.DIV $15,$10,$11 037 454B7803 $F=42199999 DATA SEGMENT
Memory Address Machine Code 00A 3FC00000 00B 3DA00000
… …………
080 0000000A 081 0000000B 082 0000000C 083 0000000D 084 0000000E
二、軟體模擬結果:如圖 4-14 所示。
圖 4-14 浮點數運算指令測試模擬
捌、測試與比較
本研究所實現的 Pipelined MIPS CPU 其效能與本實驗室之前發展的 Multiple Clock Cycles MIPS CPU 做一比較。
(一)測試程式(a):1+2+3+………+99+100=5050(從 1 累加至 100)
表 4-10 測試程式(a)
INSTRUCTION SEGMENT Program Memory
Address Machine Code Function ADDIU $5,$0,13ba 000 240513BA $5 = 5050 ADDIU $2,$0,1 001 24020001 $2 = 1 ADDIU $3,$0,1 002 24030001 $3 = 1 ADDIU $4,$0,0 003 24040000 $4 = $2 + $4 ADD $4,$2,$4 004 00442020 $2 = $3 + $2
ADD $2,$2,$2 005 00421020 if $4≠$5 then go to 3 BNE $11,11($0) 006 1485FFFD
$4=$4 and $0
AND $4,$4,$0 007 00802024
表 4-11 測試程式(a)數據比較
Multiple Clock Cycles MIPS CPU Pipelined MIP CPU
TIME 242 us 81 us
CLOCK 1210 405
1210÷405 ≒ 2.9877
(二)、軟體模擬結果:如圖 4-15、圖 4-16 所示。
圖 4-15 Multiple Clock Cycles MIPS CPU 測試程式模擬(a)
圖 4-16 Pipelined MIPS CPU 測試程式模擬(a)
(三)測試程式(b):上數 1-100,MIPS CPU 顯示資料為十六進制,須 再用指令修正為十進制顯示。
表 4-12 測試程式(b)
INSTRUCTION SEGMENT
Program Mem.Addr Machine Code Function
LW $14,128($0) 000 8C0E0080 $14 = 100
LW $11,129($0) 001 8C0B0081 $11 = 1
LW $3,130($0) 002 8C030082 $3 = 2
R_INC: ADD $15,$15,$11 003 01EB7820 $15 = $15 + 1
DIS_1: ADDIU $6,$0,10 004 2406000A $6 = 0A
ADDIU $7,$0,15 005 2407000F $7 = 0F
ADDIU $8,$0,6 006 24080006 $8 = 06
DIS_11: AND $10,$15,$7 007 01E75024 $10 = $15 & $7 BNE $10,$7,DLY1 008 15460006 if $10 != $7 then DLY1
ADD $15,$15,$8 009 01E87820 $15 = $15 + 6
SLL $6,$6,4 010 00063100 $6 << 4
SLL $7,$7,4 011 00073900 $7 << 4
SLL $8,$8,7 012 00084100 $8 << 4
J DIS_11 013 08000007 Jump DIS_11
DLY1: ADD $4,$4,$11 014 008B2020 $4 = $4 + 1
BNE $4,$3,DLY1 015 1483FFFF if $4 != 2 then DLY1
AND $4,$4,$0 016 00802024 $4 = 00000000
BNE $15,$14,R_INC 017 15EEFFF2 if $15 =1000then R_INC
DLY2: ADD $4,$4,$11 018 008B2020 $4 = $4 + 1
BNE $4,$3,DLY2 019 1483FFFF if $4 != 2 then DLY2
AND $4,$4,$0 020 00802024 $4 = 00000000
DATA SEGMENT Memory Address Machine Code
128 00000100
129 00000001
130 00000002
表 4-13 測試程式(b)數據比較
Multiple Clock Cycles MIPS CPU Pipelined MIP CPU
TIME 1015300 ns 315800 ns
CLOCK 5076.5 1579
5076.5÷1579 ≒ 3.215
(四)軟體模擬結果:如圖 4-17、圖 4-18 所示。
由上述數據顯示,Pipelined MIP CPU 之效能更勝 Multiple Clock Cycles MIPS CPU,其速度會因指令格式不同有所差異,平均速度可提升 3 倍以 上。
圖 4-17 Multiple Clock Cycles MIPS CPU 測試程式模擬(b)
圖 4-18 Pipelined MIPS CPU 測試程式模擬(b)
玖、各模組耗費 Gate Count 數統計
在硬體設計時,考量耗費 Gate Count 數並選用適當的 FPGA 晶片是 非常重要的環節。以下分別列出多重時脈周期 MIPS CPU、未包含浮點 運算的管線化 MIPS CPU、含浮點運算的管線化 MIPS CPU 與浮點運算 器的耗費 Gate Count 數統計表。
表 4-1 未含浮點運算的管線化 MIPS CPU Gate Count 數統計表 Device : v800hq240
Speed Grade: -6
Pipelined MIP CPU (No Floating Unit) Number of Slice 2056 out of 9408 21%
Number of Slice Flip Flop 1516 out of 18816 8%
Total Number 4 input LUTs 750 out of 18816 14%
Number of bonded IOBs 39 out of 170 22%
Number of Block RAMs 4 out of 28 14%
Maximum Frequency Minimum period
36.127MHz 27.680ns
表 4-15 多重時脈周期 MIPS CPU Gate Count 數統計表 Device : v800hq240
Speed Grade: -6
Multiple Clock Cycles MIPS CPU
Number of Slice 2086 out of 9408 22%
Number of Slice Flip Flop 1346 out of 18816 7%
Total Number 4 input LUTs 2983 out of 18816 15%
Number of bonded IOBs 71 out of 170 41%
Number of Block RAMs 2 out of 28 7%
Maximum Frequency Minimum period
34.685MHz 28.831ns
表 4-16 含浮點運算的管線化 MIPS CPU Gate Count 數統計表 Device : v800hq240
Speed Grade: -6
Pipelined MIP CPU
Number of Slice 4720 out of 9408 50%
Number of Slice Flip Flop 2314 out of 18816 12%
Total Number 4 input LUTs 7555 out of 18816 40%
Number of bonded IOBs 39 out of 170 22%
Number of Block RAMs 4 out of 28 14%
Maximum Frequency Minimum period
5.358MHz 186.620ns
表 4-17 浮點運算器中各功能模組效能表 Device : v800hq240
Speed Grade: -6
加減法模組 乘法模組 除法模組
Number of Slice 972 638 1,594
Number of 4 input LUTs 1,710 900 1,891 Maximum Frequency
Minimum period
38.650MHz (25.484ns)
46.962MHz (21.294ns)
5.358MHz (186.620ns)