-
Notifications
You must be signed in to change notification settings - Fork 1
/
README.txt
234 lines (131 loc) · 7.61 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
### 操作流程示範 13-min 螢幕錄影 ###
https://www.youtube.com/watch?v=lFkBfxsl93g
### Homework ###
在重現一次課堂上我們示範的 ARM Linux 內一個程式與 FPGA 的 IP core 協作的情境後,
請修改範例程式以 FPGA 1024-bit 蒙哥馬利模乘法器求 A * B * R**-1 % N 值,其中:
R = 2**1040
N = 0xa3954d818a1d0f4edd554761a7bc4bd3ae1d07f5bdd0c60e3fc9184ed02b0d7d796fca442c46c7566738b0d9a257324f0ab5f4e843e6a7c9cfc8bba397cd5d9b19d33a578cca78cc0f8dfe5dc64721365f037d6e64340b3ee10a14974b83b4f7bdd11b5305132e8f75837017762ae4eb992a79a5364c96e135eae9e07013df4d
A = 0x8a5f0ab2e2d32f612c7a36b141f50ab65a258318dfb17c8ffda809f46ce1d6091e987d092ca6ab6d5ff3cf195ed1622f295283b837932253625c6901dc8d1483e6fdc6700c6a42995c828e2f2f0ffc52962fac6503898eb37cc5adb224373bbdceaa424e8745a2cb621995165a4b5c5e1c1aaa6fd7881e24b0e886665543b2ff
B = 0x9ab05a89280104cdef290ee8e8cd9f29419f2fd3231b589a08081107a419de141652bb37cea658a03b31b1f9b5cf614a6035dd4286dbfc4c5e072f6ef81284109c5ced4cde0430d5f49ed8639155dd5be6c7bec7a6cd3f3d9c540919fafb0e227a07e9f7cbf48473173224e677416bfb13370064a95ed1b81c0d617a2317698c
請將這個答案上傳至課程網站。
用 Python 程式語言來講的話,正確答案是那個唯一的 C 值,使得我們可以通過
assert 0 <= C < N and 0 == (A*B - C*R) % N
### 範例工作環境 ###
一張 ZedBoard
一張 SD 卡
建議至少 2 GB 容量
一台筆記型電腦
SD card slot
USB port
Wi-Fi connectivity
硬碟建議至少 128 GB 容量
一個工作環境
有電源
有 Wi-Fi 無線網路 (連線至 CIC license server)
已經安裝好 x64 Ubuntu 16.04 Desktop
已經安裝好 Xilinx Vivado & SDK 2016.4 (update: 2020.1 tested)
在 bash shell 裡有 vivado、bootgen、hsi (for 2016.4) / xsct (for 2020.1) 等三個指令可以用
在 bash shell 裡有 dtc、git、screen 等指令可以用
(sudo apt-get install device-tree-compiler git screen)
### 下載檔案 ###
1. 下載本 git repository
git clone https://github.com/concise/zedboard-hwswcodesign-example
2. 下載 git repository "device-tree-xlnx" 並切換版本到 xilinx-v2016.4 標籤
git clone https://github.com/Xilinx/device-tree-xlnx --branch xilinx-v2016.4 --depth 1
3. 下載 2016.3-zed-release.tar.xz 或 2016.3-zc706-release.tar.xz (根據你的開發板而定)
wget http://www.wiki.xilinx.com/file/view/2016.3-zed-release.tar.xz/601464782/2016.3-zed-release.tar.xz
wget http://www.wiki.xilinx.com/file/view/2016.3-zc706-release.tar.xz/601464760/2016.3-zc706-release.tar.xz
4. 下載 linaro-vivid-developer-20151215-714.tar.gz
wget https://releases.linaro.org/archive/ubuntu/images/developer/15.12/linaro-vivid-developer-20151215-714.tar.gz
### 從 mm1024 專案生成 bitstream ###
請根據你的開發板,使用 microzed 或 zc706 或 zedboard 版本的 TCL 腳本
cd mm1024
vivado -mode batch -source generate_system.zedboard.tcl
根據你的電腦的運算資源,你可能需要等待 5 ~ 30 分鐘
前述指令結束後,確認新生成的 .bit 檔案與 .hdf (for 2016.4) / .xsa (for 2020.1) 檔案的位置
find . -name '*.bit' -or -name '*.hdf'
find . -name '*.bit' -or -name '*.xsa'
### 將 SD 卡設置為兩個分割區 ###
假設 SD 卡裝置會被命名為 /dev/mmcblk0
MBR partition table 劃分兩個分割區:
第一個分割區 /dev/mmcblk0p1 檔案系統為 FAT32 容量至少 100 MB 可開機
第二個分割區 /dev/mmcblk0p2 檔案系統為 ext4 容量至少 1 GB
SD 卡第一個分割區將用來放置開機相關程式
SD 卡第二個分割區將用來放置完整的 Linux 根目錄檔案系統 (Linaro)
### 可開機 SD 卡製作攻略示意圖 ###
請參考本 git repo 內的圖檔 bootpartgen-explained.png
### 填入 SD 卡第一個分割區的內容 ###
請在當前工作目錄下準備以下檔案、子目錄
device-tree-xlnx/ <= 剛才下載的 git repository
fpga.bit <= 剛才用 vivado 生成的檔案
fpga.hdf / fpga.xsa <= 剛才用 vivado 生成的檔案
fsbl.elf <= 來自 2016.3-zed-release.tar.xz
original-devicetree.dtb <= 來自 2016.3-zed-release.tar.xz
u-boot.elf <= 來自 2016.3-zed-release.tar.xz
uImage <= 來自 2016.3-zed-release.tar.xz
uramdisk.image.gz <= 來自 2016.3-zed-release.tar.xz
在這個目錄,執行 bootpartgen (for 2016.4) / bootpartgen-2020.1 (for 2020.1) 腳本
bash /path/to/bootpartgen
bash /path/to/bootpartgen-2020.1
腳本執行結束後,會產生一個子目錄 bootpart
cd bootpart
將這個目錄下的五個檔案複製到 SD 卡的第一個分割區 (假設 /dev/mmcblk0p1 被掛載到 /mnt/BOOT)
sudo cp BOOT.BIN devicetree.dtb uEnv.txt uImage uramdisk.image.gz /mnt/BOOT
sync
### 填入 SD 卡第二個分割區的內容 (此步驟只需要做一次) ###
假設 /dev/mmcblk0p2 被掛載到 /mnt/LINARO
sudo tar xpf linaro-vivid-developer-20151215-714.tar.gz --strip-components=1 -C /mnt/LINARO
sync
將測試程式複製到 SD 卡上
sudo cp setclock test.c /mnt/LINARO/root
sync
### 開機進入 Linaro Linux (based on Ubuntu 15.04) ###
設定跳線,使 ZedBoard 以 SD 卡開機,連接 UART USB 線至工作電腦
假設該裝置被命名為 /dev/ttyACM0
使用 GNU Screen 以 115200 baudrate 連線到 UART serial console
sudo screen /dev/ttyACM0 115200
註:常用 GNU Screen 鍵盤綁定
^A k 離開
^A a 送出 ^A 字元
^A C 清除畫面
有時候,遇到 UART serial console 不正常顯示的狀況,只要多 echo 幾次,搭配 reset 就可以搞定
UART serial console 預設會直接進入 root 的 bash shell
### 設定時脈,編譯並執行測試程式 ###
bash setclock
gcc test.c
./a.out
### (optional) 重置 U-Boot 環境變數 ###
進入 U-Boot 的指令列
env default -a
env save
reset
### 一些檔案連結與 MD5 雜湊值 ###
ubuntu-16.04.1-desktop-amd64.iso
SIZE = 1513308160
MD5 = 17643c29e3c4609818f26becf76d29a3
URL = http://releases.ubuntu.com/xenial/ubuntu-16.04.1-desktop-amd64.iso
----------------------------------------------------------------
Xilinx_Vivado_SDK_2016.4_1215_1.tar.gz
SIZE = 22071293967
MD5 = 4a21b34b4105fe31893b572d14a1df48
URL = https://www.xilinx.com/support/download.html
----------------------------------------------------------------
2016.3-zed-release.tar.xz
SIZE = 45967360
MD5 = e3a7c86a4621bcbaf4d6cdc6a26ee86d
URL = http://www.wiki.xilinx.com/file/view/2016.3-zed-release.tar.xz/601464782/2016.3-zed-release.tar.xz
----------------------------------------------------------------
2016.3-zc706-release.tar.xz
SIZE = 55592960
MD5 = 7218245f287998d7f335844a6ec57580
URL = http://www.wiki.xilinx.com/file/view/2016.3-zc706-release.tar.xz/601464760/2016.3-zc706-release.tar.xz
----------------------------------------------------------------
xilinx-v2016.4.zip
SIZE = 196485
MD5 = 79538621dffeceb600fa56a3bc4b7790
URL = https://github.com/Xilinx/device-tree-xlnx/archive/xilinx-v2016.4.zip
----------------------------------------------------------------
linaro-vivid-developer-20151215-714.tar.gz
SIZE = 233649127
MD5 = bd19b93bde4fba93bdeea2451276dce2
URL = https://releases.linaro.org/ubuntu/images/developer/15.12/linaro-vivid-developer-20151215-714.tar.gz