發表文章

目前顯示的是有「專題」標籤的文章

專題 FPGA Zynq7000 DES篇 3

圖片
一陣子沒更新了~~這次來講DES加解密吧! 我是利用Xilinx官方提供的xapp270文件來做改寫,原本的文件的DES是利用vhdl的to語法,一開始很順利做成功了Ya~~但是在我準備做PR發現了一件事情!!!!!!!!!!! Port出問題啦!! 我們前面的AES RSA皆是用downto的寫法來寫所需的bits數,但是DES是用to的方式這造就了一開始儲存位置不同,所以port會無法相用,有幾種方法做選擇,那一些方法在做PR的時候再來講吧,我目前用的方法是直接改DES官方文件的Code,全部改成downto雖然聽起來很簡單,但是要改地方超多QQ因為很多讀值起始就出問題了,所以改了一段時間和測試。 改完部分程式碼大概是這樣~ 改的那部分有興趣者再來交流吧~雖然不難但麻煩哈哈 接下來老樣子,一樣創一個新的IP空殼來做IP吧!! 一樣吧~把port打上去囉 就像之前所說最大傳輸值為32bits,而這裡需64所以要自己接訊號然後合併暫存器囉! 這裡我遇到一個小問題,也是一個小粗心,在暫存器7 8的時候寫反了,因為之前是使用to的方式來撰寫,所以順序和現在倒反了,然後沒注意沒有換過來,到最後在解密之時一開始解值的地方解錯,造成後續的解密都失敗。 就和之前差不多啦~~ 好了就開始跑合成,再來就merge和打包成IP吧~詳情請看前面嚕! 過來創建project來把IP放進去吧 過來就是老樣子囉~ Generate Output Products->Create HDL warpper Run Synthesis -> Run Implemented -> Generate Bitstream export Hardware-> launch sdk 接下來就是SDK的Standalone測試把值賦予進去吧!! 第一個加解密失敗的原因,就是我剛剛上面所說的暫存器寫反了,to和downto的差別就是起始位置不同,所以造就這些問題,但解決囉~~又完成一個囉!!

專題 FPGA Zynq7000 AES篇 2

圖片
經過上一篇的RSA撰寫的經驗,對於其他加解密應該有不錯的想法,這一篇將要做AES128位元,不同RSA32位元,就來試試看吧。 AES 最TOP檔部分程式碼 跟上一篇一樣先來創建IP哦,但是這次要13個暫存器,因為1個IP得Data width只能傳輸32位元,所以超過就要拆開來去分配,key data_in各2個 data_out需要4個。 照慣例匯入source之後開始配暫存器以下為程式碼。 因為超過32位元沒辦法一次寫完,所以我們要自己再寫signal去配置。                                          告訴他們key_signal和data_in_signal是相同的只是不同暫存器 將我們自己配置的線路分配到這些暫存器。 這樣就寫好囉~那就存檔並且合成吧! 結束之後開始packge ip(記得merge) 過來就一樣開啟舊專案或新專案來放置我們IP,因為只是測試所以我只放新IP要不燃燒錄時間會拖長。(PS:記得在專案內引進自己做得IP哦) 放完就像這樣啦,一樣開始 Generate Output Products->Create HDL warpper 完成後 Run Synthesis -> Run Implemented -> Generate Bitstream 跑完就export Hardware-> launch sdk 轉戰SDK囉~ 跟RSA一樣只是drivers變新的IP PS:如果是用舊專案可以把原本的底層SDK先刪掉關掉,再去生成比較好友時候生出來還是舊的~3~不知到是不是我的問題。 開一個hello word 專案來測試(記得寫完要燒錄哦!!!!!) 透過程式碼能知道load是告訴程式後面的值還要輸入的開關,mode的開關是加解密開關,start是告訴程式是否已經準備好,done則是做完的時候會立起flag在繼續往下。 一樣連putty測試結果大概是下面降子。 這就...

專題 FPGA Zynq7000 RSA篇 1

圖片
這次老師想對sensor傳輸過來的資料放到硬體做加解密,之後還要擴展成使用PR(Reconfigurable Partitioning)部分可重組技術,來自動判斷要使用哪種加解密方式,這次選則RSA32位元 AES128位元 DES64位元 Triple_DES64位元。執行環境為Xilinx vivado2016 SDK2016運行板子為Zynq7000。先只是standalone測試正式會做成PR並在xilinx linux3.14下環境執行,所以還有kernel和driver QQ死去~~ 分別使用VHDL檔來製作出我們的ip。 RSA  最TOP部分程式碼檔案: 有了vhdl檔我們就能著手做IP了!!! 打開vivado 2016 併選擇manage ip 然後新增IP (檔名我們就取個RSA吧) 建立完成(附註請選擇創造AXI IP 然後透過VHDL我們可以知道需要7個暫存器 clk有系統內建) 然後就把RSA的相關程式碼用add source加進去吧~ 加進去了就開始撰寫IP得配置和暫存器劃分吧! 告訴上層的AXI_inst有什麼配置然後所需的位元大小等等... 然後我將2個out設2個訊號接點(signal) 然後就該來分配暫存器囉,還有加上自己的訊號接點,還有user logic並結合上圖的配置。 結束存檔會發現一開始匯入的source檔和我們的接線殼合併了!! 然後就跑個合成(run synthesis)看看有沒有問題ㄅ 沒問題之後就能來打包IP(package ip)惹YA~ (記得merge哦~~~) 既然完成IP那我們就來放進去我們的block design吧 新建一個檔案並選擇我們的Zedboard (xc7z020clg484-1)板子吧 然後匯入我們的做好的IP 創造一個block design然後把他丟進去加上主控(PS) 建好之後就來 Generate Output Products(生成HDL源文檔和相應端口的約束檔) 和 Create HDL wrapper(生成整個工程的文檔)吧 然後就開始Run Synthesis -> Run Implemented -> Generate B...