色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過(guò)HLS封裝一個(gè)移位流水燈的程序案例

454398 ? 來(lái)源:csdn ? 作者:leon_zeng0 ? 2020-10-14 15:17 ? 次閱讀

當(dāng)我們安裝好Vivado 的時(shí)候,也同時(shí)裝好了Vivado HLS.。 這是個(gè)什么東西?我就有一種想一探究的感覺。網(wǎng)上一查,Vivado High-Level Synthesis。學(xué)習(xí)了一段時(shí)間的Zynq 7000, 找了一個(gè)HLS的教程,就開始了如下入門實(shí)驗(yàn),體驗(yàn)高級(jí)語(yǔ)言綜合設(shè)計(jì)IP。Vivado HLS是Xilinx 推出的高層次綜合工具,采用C/C++語(yǔ)言進(jìn)行FPGA設(shè)計(jì)。HLS提供了一些樣例方便大家熟悉其開發(fā)流程。另外關(guān)于HLS的使用介紹,Xilinx官方提供了2個(gè)重要開發(fā)文檔ug871 和 ug902。里面詳細(xì)介紹了包括怎么建立HLS 工程,怎么編寫Testbench,怎么進(jìn)行優(yōu)化等問題。在HLS軟件界面,在右側(cè)有個(gè)directive, 里面列出了程序中所有用到的變量,函數(shù)和循環(huán)結(jié)構(gòu),點(diǎn)右鍵可以給其配置。

對(duì)循環(huán)結(jié)構(gòu), 一般選擇 unroll( 即展開循環(huán)) , 可以自己設(shè)定展開因子 factor。 為提高程序的并行化處理, 可以給函數(shù)選擇 PIPELINE。 對(duì)應(yīng)數(shù)組, 可以設(shè)置為 ARRAY_PARTITION,數(shù)組維數(shù)可以自己設(shè)定。 HLS 軟件其實(shí)很智能的, 簡(jiǎn)單的結(jié)構(gòu), 一般軟件自己會(huì)優(yōu)化好。 每一個(gè)優(yōu)化方案都保存在一個(gè) Solution 里, HLS 可以創(chuàng)建多個(gè) Solution, 用于比較不用的優(yōu)化效果。

如同軟件開發(fā)都是從“ Hello Wrold! ” 進(jìn)入編程的大門一樣, 這一個(gè)實(shí)驗(yàn)我們就通過(guò) HLS 封裝一個(gè)移位流水燈的程序, 包括工程的創(chuàng)建, 仿真, 綜合, 封裝, 以及在硬件平臺(tái)上的實(shí)現(xiàn),來(lái)熟悉HLS的開發(fā)流程。

本文參考了米聯(lián)的zynq 修煉秘籍 網(wǎng)手版。

實(shí)驗(yàn)代碼和工程的下載

鏈接: http://pan.baidu.com/s/1c1BXkvm 密碼:h2i2

1:HLS工程建立

打開 Vivado HLS 開發(fā)工具, 單擊 Creat New Project 創(chuàng)建一個(gè)新工程, 設(shè)置好工程路
徑和工程名, 一直點(diǎn)擊 Next 按照默認(rèn)設(shè)置,

出現(xiàn)如下圖所示界面,時(shí)鐘周期 Clock Period 按照默認(rèn) 10ns,Uncertaintly 和 Solution
Name 均按照默認(rèn)設(shè)置, 點(diǎn)擊紅色圓圈部分選擇芯片類型, 然后點(diǎn)擊 OK。下圖示是選擇好后的界面。

下面是選擇芯片型號(hào)的界面。根據(jù)你自己的硬件選擇,我的是如圖

工程建立完后的界面是這樣的。下面就是導(dǎo)入工程里用到的源文件。

需要在工程添加3個(gè)源文件。都可以在文件開頭介紹的下載地址下載。右鍵點(diǎn)擊source , Add Files 分別添加shift_led.cpp 和 shift_led.h。 右鍵點(diǎn)擊Test Bench , Add Files 添加Test_shift_led.cpp.

添加完成后效果如下:

shift_led.h 代碼內(nèi)容:

#ifndef _SHIFT_LED_H_
#define _SHIFT_LED_H_
//
#include "ap_int.h"
//#define MAX_CNT 10000/2 //仿真時(shí)可以用這個(gè)代替下面的行介紹仿真等待時(shí)間
#define MAX_CNT 100000000/2
#define SHIFT_FLAG MAX_CNT-2

//typedef int led_t;
typedef ap_fixed led_t; // 1st: total width. 2nd: integer width
void shift_led(led_t *led_o,led_t led_i);
#endif

shift_led.cpp 代碼內(nèi)容:

#include "shift_led.h"
void shift_led(led_t *led_o,led_t led_i)
{
led_t tmp_led=led_i;
int i; //for cycle variables
for(i = 0;i {
if(i==SHIFT_FLAG)
{
//tmp_led = ((tmp_led>>7)&0x01) + ((tmp_led tmp_led = ((tmp_led>>4)&0x01) + ((tmp_led *led_o = tmp_led;
}
}
}

Test_shift.led.cpp 代碼內(nèi)容:

#include "shift_led.h"
#include

using namespace std;
int main()
{
led_t led_o;
led_t led_i=0xfe;
const int SHIFT_TIME =8 ;
int i;
for(i=0;i {
shift_led(&led_o,led_i);
led_i = led_o;
char string[25];
itoa((unsigned int)led_o & 0xf,string,2);
fprintf(stdout,"shift_out=%s/n",string);
}
}

2:工程綜合

工程綜合前,需要設(shè)置 Top Function。

點(diǎn)擊 Project-> Project Settings ,也可以點(diǎn)擊紅箭所指那樣的快捷鍵。

出現(xiàn)如下界面 ,在Syntheses 界面下選擇綜合的頂層函數(shù)名。

因?yàn)楫?dāng)前工程中只存在一個(gè)Solution, 我們選擇Solution ->Run C Sytheses -> Active Solutions 進(jìn)行綜合,菜單旁有個(gè)快捷鍵的圖標(biāo),所以也有快捷可以直接點(diǎn)取:

在未經(jīng)優(yōu)化的情況下綜合報(bào)告如圖所示, 出現(xiàn)這個(gè)界面需要把上下條拉到合適位置, 并收起Latency (Clock cycles)。

3: 優(yōu)化和添加約束

在原文中, led_t tmp_led=led_i; 最開始是int , 然后把他定義為4位整數(shù)。我這里一開始就是這樣,也就沒有什么優(yōu)化了。

但這里做一下他的約束添加,或者也是優(yōu)化的內(nèi)容。

在主頁(yè)面里,點(diǎn)擊如下3出紅箭,如果不是這個(gè)界面。選擇文件 shift_led.cpp 文件, 選擇 synthesis, 選擇 directive。

這里把led_o 設(shè)置為輸出,右鍵點(diǎn)擊led_o 出現(xiàn)Insert Drrective.. ,選擇后如下界面:

選擇 INTERFACE mode 選擇 ap_ovld。

同樣對(duì)led_i 進(jìn)行基本相同的工作,mode 選擇 ap_vld。

進(jìn)行如上操作后,看看源程序出現(xiàn)的變化。還有Directive 的變化。


優(yōu)化和約束就說(shuō)這么多。

3: 仿真實(shí)現(xiàn)

菜單Project -> Run C Simulation 或者點(diǎn)擊快捷鍵(看菜單旁圖示),就開始 C 仿真:

仿真運(yùn)行的情況是這樣的:

4:波形仿真(如果不熟悉ModelSim 就跳過(guò)這一節(jié)):

在這之前需要運(yùn)行Vivado 的編譯仿真庫(kù),我是開始這個(gè)試驗(yàn)前就做了這個(gè)設(shè)置。

打開Vivado 后,菜單 Tools -> Compile Simulation Libraries...

出現(xiàn)對(duì)話框后,選擇Simulator 為 ModelSim, 選擇編譯庫(kù)的位置,看紅箭。

做好設(shè)置后, 點(diǎn)擊Compile 就開始生成仿真庫(kù)。

如果做好了上面的仿真庫(kù)編譯準(zhǔn)備,就可以開始看波形仿真了。

菜單Solution -> Run C/RTL Cosimulation 運(yùn)行C協(xié)同仿真。做了如圖所示選擇。

運(yùn)行C 協(xié)同仿真一段時(shí)間后,就可以防線在solution 1目錄下多了一個(gè)sim 文件夾,在其verilog 文件夾下看到生成的波形文件shift_led.wlf 文件。

利用ModelSim 打開該文件。在Objects 下選擇需要顯示的波形信號(hào), Add wave 到波形顯示里。

波形顯示就是這樣的。



這就是波形仿真。

5: HLS代碼封裝

通過(guò)前面的實(shí)驗(yàn),我們進(jìn)行了HLS的工程創(chuàng)建,仿真,但這只是把算法實(shí)現(xiàn)從C 到RTL的轉(zhuǎn)換。下面我們開始把其打包成IP, 在硬件平臺(tái)上進(jìn)行測(cè)試,也方便Vivado 進(jìn)行調(diào)用,應(yīng)用。

菜單 Solution -> Export RTL 也可以點(diǎn)快捷(菜單圖示)。

在彈出的對(duì)話框中,點(diǎn)擊Configuration 對(duì)一些參數(shù)進(jìn)行輸入,修改,然后點(diǎn)擊OK。

Configuration 的對(duì)話框設(shè)置。

點(diǎn)擊2次OK 之后,就開始IP 打包封裝。

運(yùn)行結(jié)束后,就在solution1 目錄下多了一個(gè)impl 文件夾,并且在0等待一段時(shí)間后在 solution1 目錄下多了一個(gè) impl 文件夾, 并且在ip 文件夾中生成了一個(gè)壓縮包,這就是我們需要的打包好的IP。

6 測(cè)試和應(yīng)用:

打開Vivado, 新建一個(gè)工程,工程名為test_shift_led。

在Project Manager 中點(diǎn)擊 Project Settings。

在這解壓剛才建立的IP 壓縮包到一個(gè)新建的文件夾里,這是在文件管理器里完成的。

選擇IP 設(shè)置區(qū)的 Repository Manager 頁(yè)面,然后點(diǎn)擊+號(hào), 下面圖示是添加后的結(jié)果。

進(jìn)行了以上設(shè)置后,開始添加我們的IP包。

點(diǎn)擊Project Manager 下的IP Catalog 。 在右邊的IP Catalog 里點(diǎn)開User Repository,然后選擇我們建立的IP, 顯示的是shifted_led_4bits。這和我們添加其他的ip 是一樣的。

可以設(shè)置下IP, 名字為shift_led_0

在這個(gè)對(duì)話框里選擇Generate

現(xiàn)在右鍵 Design Sources ,添加shift_led.v 文件,可以在下載鏈接出獲取。右鍵Constraints,添加led
的約束文件。特別注意這個(gè)約束文件必須和你硬件的led 引腳定義一致。

看看下圖,ip取名和程序中必須一致,就是左邊和右邊。

shift_led.v 的代碼如下(如果不想下載,也可以復(fù)制):

`timescale 1ns / 1ps
module shift_led
#(
parameter DATA_WIDTH = 4
)
(
input i_clk,
input i_rst_n,
output reg [DATA_WIDTH-1:0] led
);

reg [1:0] cnt ;
reg [DATA_WIDTH-1:0] led_i_V ;
wire ap_start ;
wire led_i_vld;
wire [DATA_WIDTH-1:0] led_o_V ;

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n == 1'b0)
cnt else if(cnt[1]==1'b0)
cnt end

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n == 1'b0)
led_i_V else if(cnt[0]==1'b1)
led_i_V else if(led_o_vld == 1'b1)
led_i_V end

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n == 1'b0)
led else if(led_o_vld == 1'b1)
led end

assign ap_start = cnt[1];
assign led_i_vld = cnt[1];

shift_led_0 u_shift_led_0(
.led_o_V_ap_vld (led_o_vld),// output wire led_o_vld
.led_i_V_ap_vld (led_i_vld),// input wire led_i_vld
.ap_clk (i_clk ),// input wire ap_clk
.ap_rst (~i_rst_n ),// input wire ap_rst
.ap_start (ap_start ),// input wire ap_start
.ap_done ( ),// output wire ap_done
.ap_idle ( ),// output wire ap_idle
.ap_ready ( ),// output wire ap_ready
.led_i_V (led_i_V ),// output wire [7 : 0] led_o_V
.led_o_V (led_o_V ) // input wire [7 : 0] led_i_V
);

endmodule

zynq.xdc 文件內(nèi)容如下:

set_property IOSTANDARD LVCMOS33 [get_ports i_clk]
set_property IOSTANDARD LVCMOS33 [get_ports i_rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property PACKAGE_PIN M14 [get_ports {led[0]}]
set_property PACKAGE_PIN M15 [get_ports {led[1]}]
set_property PACKAGE_PIN K16 [get_ports {led[2]}]
set_property PACKAGE_PIN R19 [get_ports {led[3]}]
set_property PACKAGE_PIN U18 [get_ports i_clk]
set_property PACKAGE_PIN R18 [get_ports i_rst_n]

下面就和你硬件板提供的 FPGA led 實(shí)驗(yàn)程序一樣了。綜合,執(zhí)行,生成流文件,下載運(yùn)行。

你的led 應(yīng)該流水運(yùn)行了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA設(shè)計(jì)
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    26508
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2167

    瀏覽量

    121301
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73618
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    812

    瀏覽量

    66470
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于51單片機(jī)的跑馬燈/流水燈系統(tǒng)

    具體實(shí)現(xiàn)功能(1)9種LED流水燈模式通過(guò)按鍵進(jìn)行切換,數(shù)碼管顯示流水燈模式。(2)通過(guò)加減按鍵可以切換每種LED流水燈的速度。仿真演示視頻
    的頭像 發(fā)表于 10-22 14:12 ?208次閱讀
    基于51單片機(jī)的跑馬燈/<b class='flag-5'>流水燈</b>系統(tǒng)

    優(yōu)化 FPGA HLS 設(shè)計(jì)

    30 到 70 種用于綜合和布局布線的設(shè)置。可能的組合太多了。可以編寫腳本來(lái)創(chuàng)建不同的運(yùn)行并嘗試推薦的標(biāo)準(zhǔn)指令/策略。 最后個(gè)挑戰(zhàn)問題是計(jì)算能力不足。典型的嵌入式應(yīng)用程序是在單臺(tái)計(jì)算機(jī)
    發(fā)表于 08-16 19:56

    種在HLS中插入HDL代碼的方式

    很多人都比較反感用C/C++開發(fā)(HLS)FPGA,大家第拒絕的理由就是耗費(fèi)資源太多。但是HLS也有自己的優(yōu)點(diǎn),除了快速構(gòu)建算法外,還有個(gè)
    的頭像 發(fā)表于 07-16 18:01 ?730次閱讀
    <b class='flag-5'>一</b>種在<b class='flag-5'>HLS</b>中插入HDL代碼的方式

    移位寄存器右移是怎么移位

    移位寄存器是種在數(shù)字電路和計(jì)算機(jī)科學(xué)中廣泛使用的存儲(chǔ)設(shè)備,它可以用來(lái)存儲(chǔ)和傳輸數(shù)據(jù)。在移位寄存器中,數(shù)據(jù)可以通過(guò)移位操作來(lái)實(shí)現(xiàn)數(shù)據(jù)的傳輸和
    的頭像 發(fā)表于 07-12 10:14 ?1348次閱讀

    如何在esp32的程序體中指定個(gè)變量的絕對(duì)地址,或者相對(duì)于程序首地址的個(gè)固定偏移位置?

    請(qǐng)問下如何在esp32的程序體中指定個(gè)變量的絕對(duì)地址,或者相對(duì)于程序首地址的
    發(fā)表于 06-21 08:12

    FPGA 實(shí)驗(yàn)流水燈模塊

    實(shí)驗(yàn)流水燈模塊 對(duì)于發(fā)展商而言,動(dòng)土儀式無(wú)疑是最重要的任務(wù)。為此,流水燈實(shí)驗(yàn)作為低級(jí)建模II的動(dòng)土儀式再適合不過(guò)了。廢話少說(shuō),我們還是開始實(shí)驗(yàn)吧。 圖1.1 實(shí)驗(yàn)建模圖。 如圖
    發(fā)表于 06-10 09:38

    單片機(jī)POV LED流水燈制作

    電子發(fā)燒友網(wǎng)站提供《單片機(jī)POV LED流水燈制作.docx》資料免費(fèi)下載
    發(fā)表于 05-28 14:34 ?3次下載

    什么是PLC循環(huán)移位指令 PLC循環(huán)移位的特點(diǎn)

    PLC循環(huán)移位指令包括循環(huán)左移指令和循環(huán)右移指令。在循環(huán)移位過(guò)程中,移出的位并不會(huì)丟失,而是會(huì)放回空出的位上,形成個(gè)環(huán)形移位
    的頭像 發(fā)表于 03-07 16:57 ?2115次閱讀
    什么是PLC循環(huán)<b class='flag-5'>移位</b>指令 PLC循環(huán)<b class='flag-5'>移位</b>的特點(diǎn)

    51單片機(jī)流水燈制作

    ?流水燈是學(xué)習(xí)51單片機(jī)的個(gè)基本項(xiàng)目,是我們對(duì)單片機(jī)IO口輸出認(rèn)識(shí)的基本項(xiàng)目。當(dāng)然學(xué)會(huì)了花樣流水燈也很好玩。 下面就分享種51單片機(jī)
    的頭像 發(fā)表于 02-26 10:06 ?1609次閱讀
    51單片機(jī)<b class='flag-5'>流水燈</b>制作

    如何優(yōu)化HLS仿真腳本運(yùn)行時(shí)間

    需求:由于自己目前個(gè) HLS 仿真腳本需要運(yùn)行 1個(gè)多小時(shí),先打算通過(guò)打印時(shí)間戳的方式找出最耗時(shí)的部分,然后想辦法優(yōu)化。
    的頭像 發(fā)表于 02-23 09:29 ?684次閱讀

    SPICONTROLE 4個(gè)HC595移位寄存器設(shè)置流水燈時(shí),在SPIIINTIGRATIONED化了的時(shí)候,控制的HC595 LED跳了起來(lái)如何解決?

    采用 SPICONTROLE 4個(gè)HC595移位寄存器,在設(shè)置流水燈的時(shí)候了,SPICONTROLLES正常,但是在SPIIINTIGRATIONED化了的時(shí)候,控制的HC595的LED跳了起來(lái)。請(qǐng)問該如何解決。例子比如:初始化
    發(fā)表于 01-29 08:06

    【紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】——(PGL22G第二章)鍵控流水燈實(shí)驗(yàn)例程

    ~ USER_LED8 的輸出效果。 三:實(shí)驗(yàn)原理 實(shí)現(xiàn)框架如下: (1)頂層實(shí)現(xiàn)按鍵切換 LED 的流水燈狀態(tài); (2)需要設(shè)計(jì)個(gè)輸入控制模塊及
    發(fā)表于 01-05 11:22

    AMD-Xilinx的Vitis-HLS編譯指示小結(jié)

    流水線指令 pragma HLS pipeline 通過(guò)流水線提高性能是計(jì)算機(jī)架構(gòu)設(shè)計(jì)的8個(gè)偉大思想之
    發(fā)表于 12-31 21:20

    PLC控制8盞流水燈電路原理圖和實(shí)際接線圖詳解

    PLC控制8盞流水燈電路原理圖和實(shí)際接線圖
    的頭像 發(fā)表于 12-27 11:47 ?6498次閱讀
    PLC控制8盞<b class='flag-5'>流水燈</b>電路原理圖和實(shí)際接線圖詳解

    51單片機(jī)定時(shí)器定時(shí)1秒程序流水燈結(jié)果分析

    流水燈的設(shè)計(jì)原理、實(shí)現(xiàn)步驟和結(jié)果分析。 、設(shè)計(jì)原理 在51單片機(jī)中,定時(shí)器常用的工作方式有兩種:定時(shí)器模式和計(jì)數(shù)器模式。定時(shí)器模式是指定時(shí)器的計(jì)數(shù)值遞增至最大值后重新計(jì)數(shù),從而周期性產(chǎn)生中斷;計(jì)數(shù)器模式是指定時(shí)器的
    的頭像 發(fā)表于 12-26 14:57 ?7152次閱讀
    主站蜘蛛池模板: 中国xxx视频| 伊人久99久女女视频精品免| 跳蛋按摩棒玉势PLAY高H| 做暖免费观看日本| 九九热这里只有精品2| 性奴公司 警花| 国产精品亚洲精品影院| 涩涩爱涩涩片影院| 古装性艳史电影在线看| 三级黃60分钟| 国产爱豆果冻传媒在线观看| 日本无码毛片一区二区手机看| 99久久精品互换人妻AV| 美女脱了内裤张开腿让男人桶到爽| 亚洲中文无码永久免费| 黑兽在线观看高清在线播放樱花| 亚洲AV久久无码精品九号| 国产人A片777777久久| 亚洲va精品中文字幕| 国语自产视频在线不卡| 亚洲中文字幕日本在线观看| 久久www成人看片| 中文字幕无线观看不卡网站| 久久全国免费久久青青小草| 在线观看精品视频看看播放| 久久亚洲精品无码A片大香大香 | 国产免费播放一区二区三区| 小夫妻天天恶战| 寂寞少妇直播| 97精品国产高清在线看入口| 欧洲老妇人bb| 国产哺乳期奶水avav| 亚洲福利区| 久久免费看少妇高潮A片特爽| 4hu四虎免费影院www| 女人麻豆国产香蕉久久精品| 超碰在线线公开免费视频| 乌克兰16~18sex| 娇妻归来在线观看免费完整版电影 | 狠狠狠色丁香婷婷综合久久| 中文字幕乱码一区AV久久|