4.1. Mô phỏng
Nhóm sử dụng ứng dụng Venus để tạo ra các code assembly của kiến trúc
RV32I, sau đó Venus sẽ tạo ra các mã lệnh ứng với code assembly đã tạo. Nhóm
tiến hành mô phỏng trên công cụ ModelSim và so sánh kết quả mô phỏng với kết
quả chạy assembly trên Venus.
Đối với thuật toán SHA256 nhóm sẽ sánh kết quả với thiết kế phần mềm mà nhóm đã thiết kế.
4.1.1. M6 phỏng các lệnh thuộc kiến trúc RV32I
- Test case 1:
1 add sô, x0, sp 13 bne tô, al, start
2 add sp, x9, x8 1u beq tô, al, end
3 addi sp, sp, 256 15 start2: add t1, x9, xÐ
4 lw ad, 4(sp) 16 add t1, xô, al
5 1w al, 8(sp) 17 start3: add ra, ra, t1
6 lw ra, (sp) 18 addi tô, to, 1
7 add tô, x0, x0 19 bne tô, aô, start3
8 slt t1, al, a0 20 end:
9 addi t2, x9, 1 21 sw ra, (sp)
18 bne t1, t2, start2 22 add sp, x0, sO
11 start: add ra, ra, a0 23 loop: jal zero, loop
12 addi to, to, 1
Hình 4.1: Các lệnh assembly trong Test case 1 (tính tích hai số) Test case 1 là assembly của bài toán tính tích của hai sé. Tiến hành nạp các
lệnh assembly trong Test case | như trong Hình 4.1 vào trong Instruction Memory
để tiến hành mô phỏng.
39
Se bho Dire
ee oF Dewi
Hinh 4.2: Waveform Output cua Test case 1 Sau khi nạp lệnh assembly ở Hình 4.1, tool ModelSim sẽ cho ra waveform như
trong Hình 4.2. Kết quả thu được khi chạy chương trình được mô tả như ở trong
Hình 4.3.
Hình 4.3: Kết quả mô phỏng Test case 1 trên Venus và trên ModelSim Với Test case 1 kết quả mô phỏng trên ModelSim giống với kết quả trên
Venus như trong Hình 4.3 bên trên.
40
- Test case 2:
1 add sô, x0, sp 15 add aQ, xô, ra
2 add sp, x0, x0 16 add al, x9, xO
3 addi sp, sp, 256 17 add al, x0, t1
4 lw a2, (sp) 18 add tô, x9, x6
5 lw ra, sp) 19 add ra, x0, x®
6 add tô, xô, xO 20 start2: add ra, ra, a0
7 addi t1, x9, 1 21 addi to, tô, 1
8 addi ra, xÐ, 1 22 bne tô, al, start2
9 beq tô, a2, end 23 bne t1, a2, startl
18 addi ra, xÐ, 1 2u end:
11 beq t1, a2, end 25 sw ra, 0(sp)
12 start1: 26 add sp, s9, xÐ
13 addi t1, t1, 1 27 loop: jal zero, loop 1u add a0, x0, xÐ
Hình 4.4: Các lệnh assembly trong Test case 2 (tính giai thừa)
Test case 2 là assembly của bài toán tính giai thừa. Tiến hành nap các lệnh
assembly trong Test case 2 như trong Hình 4.4 vào trong Instruction Memory để
tiến hành mô phỏng.
| mới SS —=- ._ SS _ eee
So foe bia.s | srocomss 2
EÈT TH] : Ễ +
> koe isu on | sromto060
Š hore bia a
Ty fave levis — le
> Eeebienven socom
> fee bk Seonm
TS ND.
Šeep Seeome
Šee Ea
San Em
Š=ese
BỀT x73 Ea
Hình 4.5: Waveform Output của Test case 2 Sau khi nạp lệnh assembly ở Hình 4.4, tool ModelSim sẽ cho ra waveform như
trong Hình 4.5. Kết quả thu được khi chạy chương trình được mô tả như ở trong
Hình 4.6.
4I
00000000 [00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 90000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 —
00000014 |D0000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000028 |I0000000 00000000 00000000 00000000 09000000, 0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000908e 00000000 00000000 00000000 00000000 00000000 00000000 00000000 90000000 00000000 0000000) 00000000 00000000 00000000 09000000 00000000 00400000 00000000 0000000
00000080 |I0000000 00000090 00000000 90000000 00000000 90000090 00000000 00000000 00000000 00000002 00000000 00000000 00000000 00000000 00000000 09000000 00000000 00000000 00000000 00000000
00009064 |I0000000 00000090 00000000 60006000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000900 00000000 00000000 60000000 09000000 00000000 00000000 00000000 00000000
00000018 |D000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Hình 4.6: Kết quả mô phỏng Test case 2 trên Venus và trên ModelSim Với Test case 2 kết quả mô phỏng trên ModelSim giống với kết quả trên
Venus như trong Hình 4.6 bên trên.
- Test case 3:
1 add sô, x9, sp 19 add au, x0, al
2 add sp, x9, x8 20 add tô, x®, x0
3 addi sp, sp, 256 21 add ra, x0, xô
4 lw a9, 4(sp) 22 start2: add ra,ra, a3
5 1w al, 8(sp) 23 addi tô, to, 1
6 lw a2, 12(sp) 2u bne tô, ad, start2
7 add ra, xô, xô 25 bne t1, a2, startl
8 add tô, xô, x0 26 add al, xô, ra
9 addi t1, x9, 1 27 add ra, xô, x0
10 add ra, xô, a0 28 add tô, x9, x®
11 beq t1, a2,end 29 start: add ra, ra, al
12 sub a2, a2, t1 30 addi to, to, 1
13 add ra, xO, al 31 bne tô, aô, start
14 start1: 32 end:
15 addi t1, t1, 1 33 sw ra, 6(sp)
16 add a3, xô, xO 34 add sp, s®, x0
17 add a3, xô, ra 35 loop: jal zero, loop
18 add ad, x0, x0
Hình 4.7: Các lệnh assembly trong Test case 3 (Tinh cap số nhân) Tiến hành nap các lệnh assembly trong Test case 3 như trong Hình 4.4 vào trong Instruction Memory đề tiễn hành mô phỏng.
42
| Hị ID) Dis J >mm
Hinh 4.8: Waveform Output cua Test case 3
Sau khi nạp lệnh assembly ở Hình 4.7, tool ModelSim sẽ cho ra kết quả mô phỏng waveform như trong Hình 4.8. Kết quả thu được khi chạy chương trình được
mô tả như ở trong Hình 4.6.
a0 7 a1 2 (x10) (x11)
a2 ra 112 (x12) (x1)
5: dix
0 00000000 00000000 00000000 00000000 00000090 09000000 0000000 +
00000000 00000000 00000000 00000000 00000000 00000000 0
20 0000000 00000600 00000000 00000000 00000000 09090090 0901
0000000 00000000 00900090 00000090 000 000 000
20000 00000000 00000000 00000000 00000000 00: 00000 00000000
10000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000.
0000000 00000000 00000000 00000000 00000000 0000000 90000000 09000000
10000078 |D000000 00000000 00000000 00000000 00009000 00000000 0000000
Hình 4.9: Kết quả mô phỏng Test case 3 Với Test case 3 kết quả mô phỏng trên ModelSim giống với kết quả trên Venus như trong Hình 4.6 bên trên. Trong đó, ra = a0 * a1@?-Y, với a0 là số
hang đầu tiên, al là công bội, a2 là số hang của cấp số nhân.
4.1.2. Mô phỏng thuật toán SHA256
Khởi tạo các giá trị cho việc tính toán thuật toán SHA256 lưu vào Data Memory của bộ vi xử lý.
rv32i.data_memory.mem[0] = 32'h6a09e667;
rv32i.data_memory.mem[1] = 32'hbb67ae85;
rv32i.data_memory.mem[2] 32'h3c6ef372;
rv32i.data_memory.mem[3] = 32"ha54ff53a;
xrv32i.data_memory.mem[4] = 32'h510e527f;
rv32i.data_memory.mem[5] = 32"h9b05688c;
rv32i.data_memory.mem[6] 32'h1f83d9ab;
rv32i.data_memory.mem[7] = 32'"h5be0cd19;
Hình 4.10: Giá trị băm ban đầu (Ho,..., H;)
Các giá trị băn ban đầu là Họ,..., H; mỗi giá trị có độ dài 32 bit được biểu diễn dưới dạng hexa lưu vào trong Data Memory chuẩn bị cho quá trình thực hiện thuật
toán SHA256 như trong Hình 4.9.
rv32i.data_memory.mem[10] = 32'h428a2f98; rv32i.data_memory.mem[65] = 32'h682e6ff3; rv32i.data_memory.mem[11] = 32'h71374491; rv32i.data_memory.mem[66] = 32'h748f82ee; rv32i.data_memory.mem[{12} = 32'hb5c0fbcf; rv32i.data_memory.mem[67] 32'h78a5636f; zv321.data_memory.mem(13]
zv321.data_memory.mem[14]
rv32i.data_memory.mem[15}
+v321.data_memory .mem[ 16}
+v321.data_memory.mem( 17]
rv32i.data_memory.mem[18]
rv32i.data_memory.mem[19]
rv32i.data_memory.mem[20] = 32'h24318Sbe;
rv32i.data_memory.mem[21] = 32'h550c7dc3;
rv32i.data memory.mem[22] = 32"h72be5d74;
"he9bS5dbaS; rv32i.data_memory.mem[68]
32'h3956c25b; rv32i.data_memory.mem[69]
2 'h59f111f1; xv32i.data_memory .mem[70]
32'h923f02a4; xv321.data_memozy.mem[71]
32*hablcSed5; rv32i.data_memory.mem(72]
32'hd807aa98; zv321.data_memory.mem[73]
32'h12835b01; 7
32'h84C87814; 32"h8cc7020 32'h90beff£,
32 "ha4506ceb; 32'hbef9a3f7; 32'hc67178£2;
Hình 4.11: các giá trị hằng số (Ko,..., Kes)
64 giá trị hằng số Ko,..., Kes mỗi giá trị có độ dai 32 bit được biểu diễn dưới
dạng hexa và lưu vào trong Data Memory phục vụ cho quá trình thực thi thuật toán SHA256
Nhóm tiến hành viết script bằng ngôn ngữ lập trình Perl dé tạo ra các thông điệp input được chia thành các khối và lưu vào dmem. Ví dụ thông điệp “hello world” sẽ được đổi ra binary đệm và chia thành 16 khối (Mo,...,Mis) mỗi khối 32
bit như Hình 4.11.
“hello world"
WO = 68 65 6c 6C
W1 = 6f 20 77 6f W3 = 72 6c 64 80 W4 = 0@ 99 99 20 W5 = 09 99 00 96 W6 = 89 99 00 20 W7 = 99 99 90 96 W8 = 09 90 00 00
WO = 09 99 09 20 W1ô = 89 99 09 96 W11 = 89 99 90 99 W12 = 99 99 90 90 W13 = 99 99 00 09 W14 = 09 99 09 96 W15 = 89 99 00 58
Hình 4.12: Input được chia thành các khối
Vậy theo như Hình 4.11 thông điệp “hello world” được lưu vào Data Memory như Hình 4.12.
Hình 4.13: Thông điệp được lưu vào Data Memory
Script sẽ có nhiệm vụ chuyền đổi thông điệp, đệm thông điệp, và chia thông điệp thành các khối để lưu vào dmem thực hiện cho quá trình tính toán thuật toán SHA256. Kết quả tạo ra bằng script với thông điệp input “hello world” như mô ta
trong Hình 4.13.
Nhóm tiến hành viết assembly cho thuật toán SHA256, assembly sẽ được chuyền đổi thành mã máy đề đưa vào bộ nhớ lệnh IMEM của hệ thống:
45
@ 0 xì NA Ơ EU Ba
WUWWUWUWWWYNNYNNVYNYNVE RPE PPP ee eeIAHEBNFSOHDIAHEYVNFPSOHRIATDEWNFOS
message_scheduling_init: 38 addi a®, x0, 464 39 addi al, xô, 456 40 addi a2, xô, 436 H1 addi a3, x9, 404 42 addi a4, x@, 400 43 jal x1, message_schedule a4 addi sô, x8, 17 us addi s1, x0, 64 ue message_Loop : uy addi a9, a0, 4 ae addi al, al, 4 nọ addi a2, a2, 4 so addi a3, a3, 4 "
addi ad, ad, 4 52 jal x1, message_schedule sẽ addi sÐ, s0, 1 sử beq sÐ, s1, message_schedule_finish ;;
j message_loop 56
message_schedule: eo
addi t0, x6, 9 sẽ
lw t1, 6(a1) 59 sha256sig1 t1, t1 &
add to, to, t1 đã
Iw t1, @(a2) 62
add tô, to, t1 sẽ
lw t1, 0(a3) 64 sha256sig9 t1, t1
add tô, to, t1
lw t1, 6(a4) = add t6, to, t1 i:
su t8, 9(a8) "
ret 69
message_schedule_finish: =
addi te, x9, © 7 addi t1, x9, 0 T¿
addi a9, x6, 9 7
74
Hình 4.15: Assembly mô
addi al, x9, addi a2, x9, addi a3, x6 addi a4, x6 initial_hash:
addi t6, x9, 0 Ww
lw lw lw lw lw lw lw addi addi addi addi hash.
a8, al a2 a3 ad a5 a6 a7
Ũ
Ũ
sO s1 s2 s3
loop:
9(t6) 4(t6) 8(t6) 12(t6) 16(t6) 20(t6) 24(t6) 28(t6)
xe xd xd x8
, xO,
r8,
1 x0, gene
lw s4, 6(s2)
lw s5, 0(s3) jal x1, calculate_ch jal x1, calculate_maj sha256sun6 t2, a8
sha256suml t3, a4 add t4, a7, t3 add td,
add t4, add t4, add t5,
ta ta ta t1
tO sa s5 t2
mv a7, a6
mv a6, aS
mv a5, a4 add a4, a3, tử
mv a3, a2
mv a2, al
m al, a8
75 T6
T8 79 86 al 82 83 8u 85 86 87 88 89 98 91 92 93 sử 95 96 97 98 99 199 191 192 193 194 195 196 107 198 199 119 111 112
phỏng thuật toán SHA256
add a9, tủ, t5 addi s2, s2, 4 addi s3, s3, d addi s8, sÐ, 1 beq sO, s1, hash_finish
j hash_Loop calculate_ch:
and t9, ad, a5 not t6, ad
and t6, t6, a6 xor t0, t9, t6 ret
calculate_maj:
and t1, a9, al and t6, a9, a2 xor t1, tl, t6 and t6, al, a2 xor t1, tl, t6 ret
hash_finish:
lw t6, (x9) #a add a9, a9, t6
lw t6, 4(x8) #b add al, al, t6
lw t6, 8(x8) #c add a2, a2, t6
lw t6, 12(x8) #d add a3, a3, t6
‘lw t6, 16(x8) #e add ad, a4, t6
lw t6, 20(x0) #f add a5, a5, t6
lw t6, 24(x8) #g add a6, a6, t6
lw t6, 28(x8) #h add a7, a7, t6 end_loop:
jal x9, end_loop
Tiến hành map các lệnh Assembly trong hình 4.14 vào trong khối Instruction Memory để tiến hành mô phỏng thuật toán SHA256. Thực hiện chạy thuật toán SHA256 trên hệ thống và so sánh kết quả với kết quả SHA256 được hiện thực trên phần mềm mà nhóm đã thiết kế.
46
Hình 4.16: Output thuật toán SHA256 mô phỏng trên ModelSim
Kết quả mô phỏng phần mềm với thông điệp: “hello world”:
toán SHA256 hoàn toàn đúng giống nhau.
4.2. Đánh giá kết quả
4.2.1. Kết quả tần số của IP
Nhóm tiến hành do tần số của IP trên phần mềm vivado với xung clock được cấp tan số là 90MHz
Name Waveform Period (ns) Frequency (MHz) clk {0.000 5.500} 11.111 90.001
Setup Hold Pulse Width
Worst Negative Slack (WNS): 0.054 ns Worst Hold Slack (WHS): 0.122 ns Worst Pulse Width Slack (WPWS): 5.150 ns Total Negative Slack (TNS): 0,000 ns. Total Hold Slack (THS) 0.000 ns Total Pulse Width Negative Slack (TPWS): 0,000 ns Number of Failing Endpoints: 0 Number of Failing Endpoints: 0 Number of Failing Endpoints: 0
Total Number of Endpoints: 14846 Total Number of Endpoints: 14846 Total Number of Endpoints: 7492
All user specified timing constraints are met.
Hình 4.18: Tan số IP Trong quá trình Synthesis va Implementation, phần mềm Vivado đã tinh toán
và phân tích thời gian các path có trong thiết kế của IP. Hình 4.17 là kết quả phân tích của tool, kết quả cho thấy IP thỏa mãn các điều kiện về Worst Negative Slack, Worst Hold Slack và Worst Pulse Width Slack. IP hoạt động tốt ở tan só 90MHz.
47
4.2.2. So sánh kết quả với các bài báo khác
Bang 4.1: So sánh clock cycle count
Thực hiện thuật toán SHA256 Thiết kế của [3]
nhóm
Trên kiến trúc RISC-V cơ bản 5337 4155 Trên kiến trúc RISC-V đã thêm lệnh hỗ trợ 3329 2708
Số clock cycle count được rút ngắn 2048 2047
Nhóm đã thực hiện đo clock cycle count của hệ thống khi thực hiện thuật toán SHA256 trên IP và so sánh với bai báo số [3] thì thay rằng số clock cycle count của nhóm gần ngang bằng với số clock cycle count của bài báo theo như mô tả trong
Bảng 4.1.
Bảng 4.2: So sánh tần số và thiết kế
Thiết kế của nhóm [4]
Tần số 90 MHz 83.333MHz
LUTS 12026 763 Flip Flops 12781 568
Ở bài báo số [4] nhóm tác giả thực hiện thiết kế ASIC cho thuật toán SHA256 và có kết quả tan số hoạt động của IP là 83.333MHz. So sánh tần số thiết
kế của nhóm thì tần số thiết kế của nhóm tối ưu hơn. Còn về mặt thiết kế do nhóm
thực hiện vi xử lý RISC-V và tích hợp thêm các lệnh của SHA256 nên sử dụng
nhiều tài nguyên hơn.
48