国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍

這篇具有很好參考價值的文章主要介紹了【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 HLS

1.1 HLS簡介

HLS(High Level Synthesis):一款高層次綜合工具。

  • 能夠?qū)?C/C++ 或者 system C 等高級語言轉(zhuǎn)化為 RTL (底層硬件描述語言)電路,降低開發(fā)時間。
  • 提供了常見的庫(例如圖像處理相關的 OpenCv 庫和其
    它的數(shù)學庫)。
  • 可以創(chuàng)建IP并通過例化或者使用 BlockDesign 的方式應用到項目中。

轉(zhuǎn)化原理:在前端將 C 語言描述進行分析,然后進行代碼層面的優(yōu)化(code-level transformation),再在后端把這些運算工作進行并行調(diào)度(parallelise & schedule),最后生成 RTL 語言。

使用HLS開發(fā)流程:
【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍

  • 第一步C/C++層面的仿真:
    首先在源文件中,添加一個頂層函數(shù),這個函數(shù)就是我們想要將來映射到 RTL 電路中的函數(shù),之后需要一個 C Testbench 來對這個函數(shù)功能進行驗證,在算法層面,檢驗我們的函數(shù)是否能夠正常工作。(算法層面的仿真,能夠很快地就得出結果,有助于提高我們的開發(fā)效率。)
  • 第二步對C 代碼進行綜合:
    綜合后會根據(jù)我們的功能函數(shù),產(chǎn)生相應的電路。在 C 綜合階段,HLS 會根據(jù)我們對功能函數(shù)中的一些約束(Directive),來生成不同的接口。
  • 第三步C/RTL 的聯(lián)合仿真:
    在這一階段,HLS 會根據(jù)我們的 C Testbench 來生成我們的 RTL 的 Testbench 并且根據(jù)我們所選擇的仿真工具來進行 RTL 級的仿真。仿真完成后我們可以觀察聯(lián)合仿真所產(chǎn)生的波形。
  • 第四步導出IP:
    前面有提到過 HLS 相當于一個 IP 生成器,它能夠?qū)⑽覀兊母呒壵Z言的代碼映射為一個 IP,我們可以根據(jù)需要將這些 IP 導出到 Vivado 的集成開發(fā)環(huán)境中,將這些算法的 IP 應用到實際的工程當中。

1.2 HLS與VHDL/Verilog

  • 隨著FPGA密度隨著工藝幾何尺寸的縮小而不斷增長,設計復雜性使得繼續(xù)使用傳統(tǒng)的HDL設計流程變得越來越困難。盡管HDL語言和工具已經(jīng)發(fā)展,但是設計周期仍然長得令人討厭。為了幫助解決該問題,出現(xiàn)了高級綜合(HLS)編譯器,以使設計人員能夠進入更高的抽象級別。
  • HLS能自動把 C/C++ 之類的高級語言轉(zhuǎn)化成 Verilog/VHDL 之類的底層硬件描述語言(RTL),生成定制硬件在 FPGA 上跑實現(xiàn)加速。這使得不懂硬件的軟件工程師也可以擁有玩轉(zhuǎn)硬件的能力。
  • 為了提高設計數(shù)字硬件組件的效率,高層綜合(HLS)被視為提高設計抽象水平的下一步。但是,HLS工具的結果質(zhì)量(QoR)往往落后于手動寄存器傳輸級別(RTL)流程的質(zhì)量。
  • HLS 經(jīng)過十數(shù)年的發(fā)展,雖然有諸如 AutoPilot、OpenCL SDK 等 FPGA HLS 商業(yè)化成功的案例出現(xiàn),但距離其完全替代人工 RTL 建模還有很長的路要走。

1.3 HLS優(yōu)點與局限

  1. 優(yōu)點
    • 第一,使對于軟件工程,實現(xiàn)算法基于硬件(ASIC或者FPGA)的計算加速。
    • 第二,高層語言能促進 IP 重用的效率。
    • 第三,HLS 能幫助軟件和算法工程師參與、甚至主導芯片或 FPGA 設計。
    • 第四、對于IC設計開發(fā),從抽象的C層級進行功能設計。
    • 第五、對于硬件驗證,從更抽象的層次進行功能性驗證,加速設計流程。
  2. 局限
    IP library 尚未全面還在不斷升級,距離其完全替代人工 RTL 建模還有路要走。

2 環(huán)境配置

安裝vivado的參考鏈接:
https://blog.csdn.net/qq_43279579/article/details/116849636
對于vivado的安裝,就已經(jīng)自動完成了HLS

3 HLS實例——Led點亮

3.1 工程創(chuàng)建

  1. 打開Vivado HLS,點擊Create New Project
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  2. 輸入相關工程信息
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  3. 選擇頂層函數(shù),此處暫時不管
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  4. 選擇添加C仿真文件,此處可以暫時不管
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  5. 選擇器件
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    輸入搜索選擇芯片,點擊ok,點擊finish,完成工程創(chuàng)建。

3.2 添加文件

  1. 源文件添加
    點擊Source,右鍵后,選擇New File,創(chuàng)建文件

led.h

#ifndef _SHIFT_LED_H_
#define _SHIFT_LED_H_

#include "ap_int.h"
#define CNT_MAX 100000000
//#define CNT_MAX 100,100M時鐘頻率下計數(shù)一秒鐘所需要的計數(shù)次數(shù)
#define FLASH_FLAG CNT_MAX-2
// typedef int led_t;
// typedef int cnt_t;
typedef ap_int<1> led_t;
typedef ap_int<32> cnt_t;
void flash_led(led_t *led_o , led_t led_i);

#endif

led.cpp

#include "led.h"

void flash_led(led_t *led_o , led_t led_i){
#pragma HLS INTERFACE ap_vld port=led_i
#pragma HLS INTERFACE ap_ovld port=led_o
	cnt_t i;
	for(i=0;i<CNT_MAX;i++){
		if(i==FLASH_FLAG){
			*led_o = ~led_i;
		}
	}
}
  1. 仿真測試文件添加
    右鍵Test Bench,選擇New File

test_led.cpp

#include "led.h"
#include <stdio.h>

int main(){

	led_t led_i=0x01;
	led_t led_o;
	const int SHIFT_TIME = 4;
	int i;
	for(i=0;i<SHIFT_TIME;i++){
		flash_led(&led_o , led_i);
		led_i = led_o;
		printf("shift_out is %d \n",(int)(led_o&0x01));
	}
}

3.3 C仿真與C綜合

  1. 點擊project->project settings->synthesis->browser->選擇頂層函數(shù)
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  2. 點擊project->Run C Simulation
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍

輸出01交替,表示C仿真結果正確

  1. 點擊Solution->Run C Synthesis->Active Solution
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍

3.4 創(chuàng)建Vivado工程

  1. 打開Vivado,選擇Greate Project
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  2. 點擊Next,進行項目信息填寫
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  3. 勾選RTL Project
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  4. Source和約束文件添加,暫時不管,直接Next,之后選擇器件
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  5. 點擊Finish
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍

3.5 導入HLS生成的IP核

  1. 生成IP核
    選擇Solution->Export RTL
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍

在此處出現(xiàn)一個報錯信息:
【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
解決方法如下:
參考Xilinx官網(wǎng)的補丁及使用方法進行修改
https://support.xilinx.com/s/article/76960?language=en_US
下載 Xilinx官網(wǎng)支持社區(qū)給出的補丁包,解壓到Xilinx安裝位置,如圖所示:
【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
打開cmd,進入該目錄,執(zhí)行命令python y2k22_patch\patch.py
【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍

  1. 導入
    點擊setting
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    選擇IP->Repository,并且點擊加號,選擇solution,將會自動識別到IP,識別到后,點擊Apply->OK
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    檢驗是否導入成功
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    生成IP,選中后雙擊
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍

3.6 添加實驗代碼

  1. 選擇Add Sources
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  2. 文件名稱填寫
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    代碼內(nèi)容:
`timescale 1ns / 1ps
module flash_led(
input wire clk ,
input wire rst_n ,
output wire led_o
);
 
wire rst ;//同步復位
wire ap_ready ;//當前可以接收下一次數(shù)據(jù)
reg ap_start ;//IP 開始工作
reg led_i_vld ;//輸入數(shù)據(jù)有效
wire led_o_vld ;
reg led_i ;//輸入的 led 信號
wire led_o_r ;
wire ap_done ;
wire ap_idle ;
reg [1:0] delay_cnt ;
assign rst = ~rst_n ;
assign led_o = led_o_r ;
 
//----------------delay_cnt------------------
always @(posedge clk) begin
if (rst==1'b1) begin
delay_cnt <= 'd0;
end
else if(delay_cnt[1]==1'b0) begin
delay_cnt <= delay_cnt + 1'b1;
end
end
 
//----------------ap_start------------------
always @(posedge clk) begin
if (rst==1'b1) begin
ap_start <= 1'b0;
end
else if(delay_cnt[1]==1'b1)begin
ap_start <= 1'b1;
end
end
 
//----------------led_i_vld------------------
always @(posedge clk) begin
if (rst==1'b1) begin
led_i_vld <= 1'b0;
end
else if(delay_cnt[1]==1'b1)begin
led_i_vld <= 1'b1;
end
end
 
//----------------ap_i------------------
always @(posedge clk) begin
if (rst==1'b1) begin
led_i <= 1'b0;
end
else if(led_o_vld==1'b1)begin
led_i <= led_o_r ;
end
end
 
 
flash_led_0 inst_flash_led (
.led_o_V_ap_vld(led_o_vld), // output wire led_o_V_ap_vld
.led_i_V_ap_vld(led_i_vld), // input wire led_i_V_ap_vld
.ap_clk(clk), // input wire ap_clk
.ap_rst(rst), // input wire ap_rst
.ap_start(ap_start), // input wire ap_start
.ap_done(ap_done), // output wire ap_done
.ap_idle(ap_idle), // output wire ap_idle
.ap_ready(ap_ready), // output wire ap_ready
.led_o_V(led_o_r), // output wire [0 : 0] led_o_V
.led_i_V(led_i) // input wire [0 : 0] led_i_V
); 
endmodule
  1. 約束文件編寫
    創(chuàng)建約束文件
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    填寫相關文件信息
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    代碼內(nèi)容:
##############LED define################## 
set_property PACKAGE_PIN P15 [get_ports {led_o}] 
set_property IOSTANDARD LVCMOS33 [get_ports {led_o}]

##############Reset define################## 
set_property PACKAGE_PIN P16 [get_ports {rst_n}] 
set_property IOSTANDARD LVCMOS33 [get_ports {rst_n}]

##############50M CLK define################## 
create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk]
set_property PACKAGE_PIN N18 [get_ports {clk}] 
set_property IOSTANDARD LVCMOS33 [get_ports {clk}]

3.7 編譯生成獲取結果

  1. 生成
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
  2. 進行下載
    點擊Open Hardware Manager->Open target->Auto target后,顯示如下
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    點擊Program device,下載程序,直接點擊Program
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍
    上板結果如下:
    【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍

總結

通過本次實驗了解了HLS有關知識,學習了Soc芯片以及用C語言實現(xiàn)硬件對應的功能。在實驗中遇到了一些問題,在查找資料后,基本解決。


參考:
https://blog.csdn.net/u014798590/article/details/122312505
http://www.elecfans.com/pld/1118454.html
https://www.zhihu.com/question/320190011
https://blog.csdn.net/qq_43279579/article/details/117084706文章來源地址http://www.zghlxwxcb.cn/news/detail-453108.html

到了這里,關于【嵌入式系統(tǒng)應用開發(fā)】FPGA——HLS入門實踐之led燈閃爍的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 用ChatGPT做嵌入式應用開發(fā)

    用ChatGPT做嵌入式應用開發(fā)

    ChatGPT是一種基于自然語言處理技術的人工智能模型,由OpenAI團隊開發(fā)的。它基于大規(guī)模的語言數(shù)據(jù)集進行訓練,并可以生成高質(zhì)量的自然語言文本,包括對話、摘要、翻譯等多種應用。 智能客服:可以根據(jù)用戶提問,快速給出問題的答案和解決方案,提高客戶滿意度。 智能

    2023年04月26日
    瀏覽(28)
  • 嵌入式Linux應用開發(fā)筆記:串口

    嵌入式Linux應用開發(fā)筆記:串口

    串口(UART)是嵌入式設備中比較常用的功能。這篇文章將記錄下應用程序中串口操作相關內(nèi)容。 這篇文章中內(nèi)容均在下面的開發(fā)板上進行測試: 《新唐NUC980使用記錄:自制開發(fā)板(基于NUC980DK61YC)》 這篇文章是在下面文章基礎上進行的: 《新唐NUC980使用記錄(5.10.y內(nèi)核)

    2024年02月09日
    瀏覽(24)
  • 嵌入式設備應用開發(fā)(發(fā)現(xiàn)需求和提升價值)

    嵌入式設備應用開發(fā)(發(fā)現(xiàn)需求和提升價值)

    【 聲明:版權所有,歡迎轉(zhuǎn)載,請勿用于商業(yè)用途。 聯(lián)系信箱:feixiaoxing @163.com】 ? ? ? ? 很多做技術的同學,都會陷入到技術的窠臼之中。對于如何做具體的產(chǎn)品、實現(xiàn)具體的技術,他們可能很感興趣。但是做出來的東西做什么用,或者說是有沒有競爭力,事實上他們不

    2024年02月11日
    瀏覽(29)
  • rust嵌入式開發(fā)之基于await構造應用級臨界區(qū)

    在rust嵌入式開發(fā)之a(chǎn)wait一文中我們討論了如何用await來實現(xiàn)異步操作的串行化。而并發(fā)編程時還有一個更重要的問題需要我們解決:資源競爭。 針對并發(fā)時的資源競爭,最簡單的辦法就是利用系統(tǒng)提供的臨界區(qū)機制來互斥的使用資源。嵌入式rust提供了critical-section來提供臨界

    2024年04月17日
    瀏覽(30)
  • Azure RTOS & 嵌入式無線網(wǎng)絡框架簡化物聯(lián)網(wǎng)應用開發(fā)

    Azure RTOS & 嵌入式無線網(wǎng)絡框架簡化物聯(lián)網(wǎng)應用開發(fā)

    一、Azure RTOS概述 Azure RTOS 是一個實時操作系統(tǒng) (RTOS),適用于由微控制器 (MCU) 提供支持的物聯(lián)網(wǎng) (IoT) 和邊緣設備,?Azure RTOS 旨在支持高度受限設備(電池供電,并且閃存容量不到 64 KB)。簡而言之,這就是一套完整的針對于物聯(lián)網(wǎng)應用開發(fā)的帶有多線程功能,中間件和桌面

    2024年02月08日
    瀏覽(38)
  • 阿里P8面試官都說太詳細了,嵌入式應用開發(fā)和驅(qū)動開發(fā)的區(qū)別

    阿里P8面試官都說太詳細了,嵌入式應用開發(fā)和驅(qū)動開發(fā)的區(qū)別

    1、如何進行單元測試,如何保證App穩(wěn)定 ? 參考回答: 要測試Android應用程序,通常會創(chuàng)建以下類型自動單元測試 本地測試 :只在本地機器JVM上運行,以最小化執(zhí)行時間,這種單元測試不依賴于Android框架,或者即使有依賴,也很方便使用模擬框架來模擬依賴,以達到隔離A

    2024年04月09日
    瀏覽(23)
  • 使用GUI Guider工具開發(fā)嵌入式GUI應用 (3) - 使用label組件

    使用GUI Guider工具開發(fā)嵌入式GUI應用 (3) - 使用label組件

    本節(jié)講述在GUI Guider中,應用各種UI的基本元素,并順利部署到MCU的過程。在GUI Guider中使用各LVGL的組件時,將會涉及到GUI Guider的操作,以及將某些組件額外生成的源碼添加到Keil工程中。至于具體產(chǎn)品中的UI應用,可以是這些基本UI元素的組合使用,以實現(xiàn)更加豐富的顯示效果

    2024年02月12日
    瀏覽(25)
  • 使用GUI Guider工具開發(fā)嵌入式GUI應用(4)-使用image組件

    使用GUI Guider工具開發(fā)嵌入式GUI應用(4)-使用image組件

    在沒有使用LVGL和GUI Guider的時候,我想做一個電子相冊的小應用,需要在MCU工程中集成一個小型的文件系統(tǒng)和圖像解碼組件,例如 fatfs (http://elm-chan.org/fsw/ff/00index_e.html)組件和 tjpgdec (http://elm-chan.org/fsw/tjpgd/00index.html)組件。使用GUI Guider顯示圖片就不需要這么麻煩,可以使

    2024年02月13日
    瀏覽(32)
  • Java在物聯(lián)網(wǎng)領域的應用非常廣泛,涵蓋了設備連接、數(shù)據(jù)處理、應用程序開發(fā)、安全性、嵌入式系統(tǒng)開發(fā)、消息隊列和流處理、機器學習和人工智能以及跨平臺和多語言集成等方面

    Java在物聯(lián)網(wǎng)領域的應用非常廣泛,涵蓋了設備連接、數(shù)據(jù)處理、應用程序開發(fā)、安全性、嵌入式系統(tǒng)開發(fā)、消息隊列和流處理、機器學習和人工智能以及跨平臺和多語言集成等方面

    Java作為一種通用編程語言,在物聯(lián)網(wǎng)(IoT)領域的應用也非常廣泛。以下是一些Java在物聯(lián)網(wǎng)中的典型應用: 開發(fā)物聯(lián)網(wǎng)應用程序 :Java是一種高級編程語言,具有豐富的庫和工具,使得開發(fā)物聯(lián)網(wǎng)應用程序變得容易。Java可以用于開發(fā)各種物聯(lián)網(wǎng)應用程序,如智能家居、智能

    2024年02月03日
    瀏覽(95)
  • 使用GUI Guider工具在MCU上開發(fā)嵌入式GUI應用 (1) - GUI Guider簡介及安裝

    使用GUI Guider工具在MCU上開發(fā)嵌入式GUI應用 (1) - GUI Guider簡介及安裝

    受限于每篇文章最多只能貼9張圖的限制,這個教程被拆分成了多篇文章連載發(fā)布,完整目錄結構如下圖x所示。后續(xù)會發(fā)布完整教程的pdf文件,敬請期待。 圖x 完整教程文檔的目錄 LVGL是一個開源免費(MIT許可)的嵌入式GUI組件(https://lvgl.io/),支持觸摸屏操作,移植簡單方

    2024年02月13日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包