Vivado開發套件設計指南(2)——加法器設計——變量(上)

1 簡介

在上一篇博文中筆者介紹了Vivado™設計套件的概要,用途,優點,開發思路等等。這一篇博文中,我就不囉嗦直接進入正題,以最簡單的變量加法器作爲例子,從HLSVivado再到SDK走一遍流程,讓讀者更快地體會到Vivado這一開發技巧的便捷性,爲之後最更復雜的設計打下最基本的地基。

2 HLS設計

首先要做的是在Vivado HLS上設計我們所需要的加法器IP核

這裏科普一下IP核:IP核就是知識產權核或知識產權模塊的意思,在EDA技術開發中具有十分重要的地位。美國著名的Dataquest諮詢公司將半導體產業的IP定義爲“用於ASIC或FPGA中的預先設計好的電路功能模塊”。IP主要分爲軟IP、固IP和硬IP。軟IP是用Verilog/VHDL等硬件描述語言描述的功能塊,但是並不涉及用什麼具體電路元件實現這些功能。固IP是完成了綜合的功能塊。硬IP提供設計的最終階段產品——掩膜(來自百度百科)。相信會看這一博文的各位一定是很清楚的,這裏我爲了再多廢話一點,我們平時做C程序設計總是會自定義一些 子函數 方便主函數的調用並使得主函數更精簡,這些函數一般都是在CPU上跑的,而IP核可以理解成在硬件上通過電路實現出來的 子函數 ,起着數據處理或交換等作用。

言歸正傳,我們從最基本的開始一步一步做。

(1)創建工程

按照紅色框框來,先創建工程。

在這裏插入圖片描述
放到全英文路徑,命名工程。

在這裏插入圖片描述
點擊 New File… 創建所需的文件,一是頭文件,二是頂層函數文件。IP核 就是根據 頂層文件 綜合出來的,非常重要。相繼添加 add.cppadd.h 。添加完成後 Design Files 框中就會有剛添加的兩個文件,此時上面的 Top Function 框是還沒有東西,這裏等我們寫完程序後再在工程中設置就可以。

在這裏插入圖片描述
然後添加testbench測試文件,這在做C綜合過程中也是必不可少的,添加方法更上面添加頂層文件和頭文件是一樣的。

在這裏插入圖片描述
然後選擇硬件,我用的開發硬件是黑金的AX7020板子,根據芯片型號這裏選擇的是 xc7020clg400-2 ,讀者在開發的時候需要根據自己的硬件選擇一致的。左邊的 Solution 不用變,之後的博文會介紹。

在這裏插入圖片描述
這樣就完成工程創建了,如果出現以下錯誤不用管它,直接點 OK 就可以了。

在這裏插入圖片描述
然後軟件就會打開設計界面,如下圖所示。

在這裏插入圖片描述

(2)程序設計

雙擊 add.cpp ,如上圖所示,並添加 頂層文件 的代碼。如下:

int add(int a, int b)
{
	return (a+b);
}

然後雙擊 add.h ,添加 頭文件 的代碼。如下:

#ifndef add_h_
#define add_h_
int add(int, int);
#endif

最後雙擊 add_tb.cpp ,添加 testbench 的代碼。如下:

#include "add.h"
#include <iostream>
#include <cstdio>
#include <fstream>
int main()
{
	int a, b;
	a = 5;
	b = 10;
	int res;
	res = add(a, b);
	if(res == 15)
	{
		printf("OK");
		return 0;
	}
	else
		return 1;
}

關於這些程序的寫法,相信有過C語言基礎的讀者應該都比較清楚,篇幅有限,筆者就先不寫了。這裏指的提的一點是,testbench文件 中一般都會有一個驗證頂層函數是否正確的語句,比如這裏我用的 res == 15表示加法器的輸出與預想一致,那麼返回值爲0。如果一個 main 函數的返回值是0的話,程序就是正確的,如果返回值是1的話(條件是我們自己設定的),程序在做C仿真的時候是會出現錯誤的。

(3)四步曲

第一步,做 C仿真(C Simulation)

在這裏插入圖片描述
看到下圖就是 C仿真 成功了,上面打印出了 OK 標識,與我們程序設定的驗證成立條件是一致的,這裏讀者可以自己改一下數字嘗試,看驗證不成立的時候是不是會出現仿真出錯的提示,這裏我節省一下篇幅,留給讀者嘗試。

在這裏插入圖片描述
第二步,做 C綜合(C Synthesis),點擊下圖紅色框框的按鈕,就在上一步 C仿真 的右邊。

在這裏插入圖片描述
會出現下圖錯誤,因爲我們剛纔沒有 指定頂層模塊 。根據提示做就可以了。
在這裏插入圖片描述
點擊菜單欄 Project —— Project Settings… —— Synthesis ,然後根據下圖點擊就可以了。

在這裏插入圖片描述
之後再點擊一次 C綜合(C Synthesis) 按鈕,就會出現下圖所示的結果。

在這裏插入圖片描述
第三步,做 C/RTL聯合仿真(C/RTL Cosimulation) ,點擊下圖中的紅色框框,在上一步 C綜合 的右邊。

在這裏插入圖片描述
紅色框框不用設置,直接點擊 OK 就可以。

在這裏插入圖片描述
聯合仿真之後出現下面的結果就是沒有問題的。

在這裏插入圖片描述
第四步,點擊下圖紅色框框的按鈕,導出RTL(Export RTL) 也就是我們一直在說的 IP核 了。

在這裏插入圖片描述
直接點擊 OK 就可以了。

在這裏插入圖片描述
導出後如下圖所示,左邊的四個框從上到下是剛做完的四步曲對應的四個結果,從上到下分別對應到 C仿真導出RTLC/RTL聯合綜合C綜合

在這裏插入圖片描述

2 HLS設計(番外)

上面的設計存在一個問題,就是這樣綜合出來的一個 IP核,ZYNQ處理系統是沒法去用它的,因爲數據不知道怎麼放到IP核的輸入,更不知道怎麼把輸出取出來,因此這裏加入一個 番外,告訴讀者最重要的一件事情——添加 AXI接口協議 。這一塊筆者在初學的時候查閱了很多資料,大多都沒有提及,因此走了很多彎路,這裏單獨放到一個番外章節旨在提醒讀者不要忘記這個重要的步驟。
怎麼添加呢?點擊到 add.cpp 頂層文件,再點擊 Directive (我將其稱爲綜合引導,用來引導HLS按照我們希望的綜合方向去走),如下圖所示。

在這裏插入圖片描述
然後點擊 Directive 下面的三個綠點對應到的對象,分別是 add 頂層函數(頂層模塊)、變量 a和變量 b ,分別用右鍵點擊這三個對象,然後點 Insert Directive… 。然後按照下圖選擇 Directive 類型 INTERFACE ,再選擇 mode 類型爲 s_axiite 。這裏選擇接口協議爲AXI協議,關於AXI協議是什麼,之後的博文會補充,現在我們先用着。

在這裏插入圖片描述
addab 三個對象添加同樣的引導,如下圖所示。

在這裏插入圖片描述
最後再做一下四步曲就可以了,其實可以直接做 C綜合導出RTL ,但是保險起見,而且速度也很快,我們就都做一遍。再補充一點, C仿真C綜合導出RTL 是必不可少的,但是 C/RTL聯合綜合 對一些比較大的模塊可能會非常耗時,如果讀者對自己寫的程序有信心的話,其實是可以跳過的。

現在我們已經有了加法器的 IP核 了,接下來就是把它用起來。

3 Vivado設計

(1)創建工程

首先創建工程項目,命名並存放在全英文路徑中,然後點擊 Next

在這裏插入圖片描述
點擊下一步選擇項目類型爲 RTL Project ,下面的選項框選上,然後點擊 Next

在這裏插入圖片描述
最後選擇硬件型號即可,跟前面在 HLS 中選擇是一樣的。

在這裏插入圖片描述

(2)硬件電路連接

第一步,把 自定義IP核 添加到 IP目錄 中,如下圖點擊。

在這裏插入圖片描述
然後找到之前利用 HLS 生成的項目路徑,找到其中的 ip 文件夾,如下圖所示。

在這裏插入圖片描述
出現下圖所示的 IP核 ,點擊 OK 即可。

在這裏插入圖片描述
第二步,創建可視化的頂層文件,並連接電路。如下圖所示點擊 Create Block Design ,然後彈出對話框,不用改名字,直接點擊 OK ,完成 Block Design 的創建。

在這裏插入圖片描述
在新出現的 Diagram 框中點擊 + 號或者在框內右鍵再點擊 Add IP… ,加入我們剛纔設計的加法器IP核 Add ,如下圖所示。

在這裏插入圖片描述
在搜索欄中分別輸入 ZYNQHLS 以快速找到我們想要的 IP核 ,雙擊添加到我們的 Block Design

在這裏插入圖片描述在這裏插入圖片描述
出現下圖結果,然後需要配置 ZYNQ處理系統 的相關參數。

在這裏插入圖片描述
雙擊 ZYNQ7 Processing System ,配置 串口通信UART ,用於在PC上與硬件通信;配置 DDR3 ,用於數據的存儲,根據硬件上 DDR 型號選擇最相近的即可。如下圖所示。最後點擊 OK 完成配置。

在這裏插入圖片描述
在這裏插入圖片描述
回到 Diagram 界面,分別點擊 Run Connection AutomationRun Block Automation ,完成自動連線和引出必要端口,如下圖所示。

在這裏插入圖片描述
Run Connection Automation 對話框中直接點擊 OK

在這裏插入圖片描述
Run Block Automation 對話框中直接點擊 OK

在這裏插入圖片描述
得到如下電路圖,然後點擊 Validate Design 驗證 Block Design 是否有錯誤。

在這裏插入圖片描述
出現以上信息就是大功告成了,接下來的操作就是走走流程就可以了。

(3)硬件信息輸出

第一步, 創建HDL封裝(Create HDL Wrapper) ,按照下圖三個紅色方框從上到下依次點擊,然後在出現的對話框點擊 OK 即可。

在這裏插入圖片描述
在這裏插入圖片描述
第二步,生成硬件輸出(Generate Output Products) ,如下圖所示。彈出的 Generate Output Products 直接點擊 Generate 即可,對話框中的 Number of jobs 表示想用幾個CPU線程去完成這個輸出,線程越多速度生成硬件心機就越快。

在這裏插入圖片描述
在這裏插入圖片描述
第三步,點擊 Run Implementation 運行項目,對話框一直點擊 OK 即可。

在這裏插入圖片描述
在這裏插入圖片描述
第四步,第三步完成後會出現 Implementation Completed 對話框,可以看到設計的硬件實現的可視化結果圖(點擊 Open Implemented Design 再點擊 OK ),也可以不看,直接生成含有硬件信息的 bit流(Generate Bitstream) ,如下圖所示。可以直接在對話框中生成,也可以到左側 Flow Navigator 導航欄中去操作生成,彈出的 Bitstream Generation Completed 對話框可以不看,直接點擊 Cancel ,讀者有興趣的話也可以自行去點開看一下結果。

在這裏插入圖片描述
在這裏插入圖片描述
第五步,導出硬件信息(Export Hardware) ,按照下圖點擊,彈出的 Export Hardware 對話框把 Include Bitstream 選上,然後點 OK
在這裏插入圖片描述
搞定,Vivado 軟件上的操作到此爲止,接下來就是 SDK 的操作了。直接從 Vivado 軟件中運行 SDK, 如下圖,彈出的 Launch SDK 對話框直接點擊 OK
在這裏插入圖片描述
補充一點,在每一步操作之後,軟件右上角都會有一個軟件運行狀態的指示區,指示現在軟件正在幹什麼活,讀者在做完每一步操作都等它提示操作完成之後,再做下一步,避免出現問題。

由於本博文講的比較詳細,篇幅量較大,放在一個博文中讀者第二次看也不方便變,所以筆者把剩下的工作放到下一篇博文中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章