自己做网站要买服务器,网站出现的的问题,网站免费推广大全,广州网站seo招聘基于FPGA实现LED的闪烁——HLS 引言#xff1a; 随着电子技术的飞速发展#xff0c;硬件设计和开发的速度与效率成为了衡量一个项目成功与否的关键因素。在传统的硬件开发流程中#xff0c;工程师通常需要使用VHDL或Verilog等硬件描述语言来编写底层的硬件逻辑#xff0…基于FPGA实现LED的闪烁——HLS 引言 随着电子技术的飞速发展硬件设计和开发的速度与效率成为了衡量一个项目成功与否的关键因素。在传统的硬件开发流程中工程师通常需要使用VHDL或Verilog等硬件描述语言来编写底层的硬件逻辑这不仅耗时而且对于复杂算法的实现存在一定的局限性。为了解决这一问题高层次综合High-Level Synthesis, HLS技术应运而生它允许开发者使用更高级的编程语言如C/C来设计硬件从而大幅提高开发效率和灵活性。 · 本实验旨在通过一个具体的实例——LED灯的闪烁控制来展示HLS技术的应用。我们将利用Xilinx的Vivado HLS工具将C/C代码转换为硬件电路实现LED灯的闪烁效果。通过本实验参与者不仅能够了解HLS的基本概念和关键技术还能够掌握从环境配置到实际硬件实现的完整流程。 · 希望你在本次学习过后能够有一定的收获 推荐歌曲—雨爱-杨丞琳 冲啊 ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶ 文章目录 基于FPGA实现LED的闪烁——HLS一、任务介绍二、HLS的相关介绍HLS的概念拓展HLS的优势HLS与VHDL/Verilog的比较 三、HLS相关环境配置1.vivado 安装2.创建HLS工程3.添加相关文件4.C仿真与C综合5.创建Vivado工程6.导入HLS生成的IP核7.添加实验代码8.约束文件编写9.编译生成获取结果 四、效果展示五、总结 一、任务介绍 了解HLS的相关内容实现HLS的实验环境配置使用HLS点亮一个小灯 二、HLS的相关介绍
HLS的概念拓展
高层次综合High-Level Synthesis, HLS 是一种先进的硬件设计方法它允许开发者使用高级编程语言如C、C或SystemC来描述硬件功能而不是传统的硬件描述语言HDL如VHDL或Verilog。HLS工具能够自动将这些高级语言代码转换为寄存器传输级Register Transfer Level, RTL电路设计这大大简化了硬件设计过程并缩短了开发周期。
HLS的优势
提高生产力开发者可以使用熟悉的高级语言进行编程而不需要精通硬件描述语言。算法优化高级语言提供了更直观的方式来表达复杂的算法HLS工具可以优化这些算法实现以满足硬件性能要求。快速原型开发HLS允许快速迭代和原型设计加速了从概念到实现的过程。代码重用现有的软件代码可以被重用减少了从头开始编写代码的需求。
HLS与VHDL/Verilog的比较
VHDL/Verilog这些是传统的硬件描述语言适用于精确控制硬件行为和结构的场景。它们通常用于复杂的硬件设计需要开发者有较强的硬件设计背景。HLS提供了一种更高层次的设计抽象允许开发者专注于算法和功能而不是硬件的具体实现细节。这使得HLS特别适合于算法密集型和数据处理密集型的应用。
HLS的关键技术
代码分析与优化HLS工具需要能够理解和分析高级语言代码并进行优化以满足性能、面积和功耗等硬件设计要求。资源分配自动决定使用哪些硬件资源如查找表、寄存器、乘法器等来实现代码。时序分析确保生成的硬件设计满足时序要求能够在给定的时钟频率下稳定工作。并行处理利用并行处理技术来提高设计的性能。
技术局限性
复杂性对于极其复杂的人工智能算法HLS可能需要高级的优化技术来实现高效的硬件加速。编程能力要求虽然HLS简化了硬件设计过程但仍然需要开发者具备强大的C/C编程能力以及对并行计算和硬件架构的理解。工具限制不同的HLS工具可能有不同的优化能力和支持的语言特性这可能限制了设计的灵活性。
三、HLS相关环境配置
1.vivado 安装
1.下载Vivado(如Vivado2019.1) 这个可以去官网下载或者找实验室同学要一个安装文件大概四五十GB准备好安装文件后直接点解xsetup程序进入安装 整个安装文件夹44G
2.安装过程 会弹出
点击Next 点击Continue 三个I Agree全部勾选点击Next, 选中第二个Next会出现选择需要的工具设备等本次重装的原因就是因为原版本安装的时候没有选择需要的ZYNQ的设备型号所以建议大家磁盘有空间的把Devices全部勾选 这里我将默认安装在C盘但完全可以定义自己的路径没有影响 接着Next这次将进入长期的安装过程约2h如下 漫长的等待后出现这个界面此时离安装成功只剩一步———破解了 点击Get Licenses选择Load License在右方选择 Copy Licenses 这时候找到我们准备好的License文件就好了没有的可以在这下载https://download.csdn.net/download/weixin_49457347/85014356 下载解压后是一个这个文件名称不重要源文件名是vivado_lic2037 选中该文件后弹出安装成功 2.创建HLS工程
创建一个HLS工程 ①打开Vivado HLS点击Create New Project ②输入相关工程信息 ③选择顶层函数此处暂不管
④选择添加C仿真文件此处可以暂时不管 ⑤选择器件
3.添加相关文件
①源文件添加 点击Source右键后选择New File,创建文件 led.h #ifndef _SHIFT_LED_H_
#define _SHIFT_LED_H_#include ap_int.h
#define CNT_MAX 100000000
//#define CNT_MAX 100,100M时钟频率下计数一秒钟所需要的计数次数
#define FLASH_FLAG CNT_MAX-2
// typedef int led_t;
// typedef int cnt_t;
typedef ap_int1 led_t;
typedef ap_int32 cnt_t;
void flash_led(led_t *led_o , led_t led_i);#endifled.cpp #include led.hvoid flash_led(led_t *led_o , led_t led_i){
#pragma HLS INTERFACE ap_vld portled_i
#pragma HLS INTERFACE ap_ovld portled_ocnt_t i;for(i0;iCNT_MAX;i){if(iFLASH_FLAG){*led_o ~led_i;}}
}②仿真测试文件添加 右键Test Bench选择New File test_led.cpp #include led.h
#include stdio.h
int main(){led_t led_i0x01;led_t led_o;const int SHIFT_TIME 4;int i;for(i0;iSHIFT_TIME;i){flash_led(led_o , led_i);led_i led_o;printf(shift_out is %d \n,(int)(led_o0x01));}
}4.C仿真与C综合
①点击project-project settings-synthesis-browser-选择顶层函数 ②点击project-Run C Simulation(输出01交替表示C仿真结果正确 ③点击Solution-Run C Synthesis-Active Solution 5.创建Vivado工程
①打开Vivado选择Greate Project ②点击Next进行项目信息填写 ③勾选RTL Project ④Source和约束文件添加暂时不管直接Next ⑤选择器件 ⑥点击Finish
6.导入HLS生成的IP核
①生成IP核 选择Solution-Export RTL ②导入 点击setting 选择IP-Repository,并且点击加号选择solution将会自动识别到IP识别到后点击Apply-OK 检验是否导入成功 生成IP
7.添加实验代码
①选择Add Sources ②文件名称填写 ③代码内容
timescale 1ns / 1ps
module flash_led(
input wire clk ,
input wire rst_n ,
output wire led_o
);wire rst ;//同步复位
wire ap_ready ;//当前可以接收下一次数据
reg ap_start ;//IP 开始工作
reg led_i_vld ;//输入数据有效
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 (rst1b1) begin
delay_cnt d0;
end
else if(delay_cnt[1]1b0) begin
delay_cnt delay_cnt 1b1;
end
end//----------------ap_start------------------
always (posedge clk) begin
if (rst1b1) begin
ap_start 1b0;
end
else if(delay_cnt[1]1b1)begin
ap_start 1b1;
end
end//----------------led_i_vld------------------
always (posedge clk) begin
if (rst1b1) begin
led_i_vld 1b0;
end
else if(delay_cnt[1]1b1)begin
led_i_vld 1b1;
end
end//----------------ap_i------------------
always (posedge clk) begin
if (rst1b1) begin
led_i 1b0;
end
else if(led_o_vld1b1)begin
led_i led_o_r ;
end
endflash_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
8.约束文件编写
①创建约束文件 ②填写相关文件信息 ③代码内容
##############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}]
9.编译生成获取结果
①生成 ②进行下载 点击Open Hardware Manager-Open target-Auto target后显示如下 点击Program device,下载程序直接点击Program
四、效果展示 五、总结 HLS的关键技术包括代码分析与优化、资源分配、时序分析和并行处理这些技术共同确保了生成的硬件设计既高效又可靠。然而HLS也存在一些局限性尤其是在处理极其复杂的人工智能算法时可能需要更高级的优化技术和对硬件架构的深入理解。此外HLS的成功实施依赖于开发者强大的C/C编程能力。 · 尽管有其挑战HLS的优势不容忽视。它使得硬件设计更加快速、灵活并且能够重用现有的软件代码加速了从概念到实现的转换过程。随着技术的不断进步HLS工具的优化能力和支持的语言特性也在不断增强预示着HLS在未来硬件设计领域的广泛应用和发展潜力。 · 总结来说高层次综合作为一种创新的设计方法正在逐渐改变传统的硬件开发流程为硬件设计领域带来新的机遇和挑战。随着对HLS工具的不断改进和优化我们有理由相信HLS将在未来的硬件设计和开发中扮演越来越重要的角色。 最后感谢大佬友情链接
https://blog.csdn.net/qq_43279579/article/details/117084706https://blog.csdn.net/weixin_49457347/article/details/123643998