HLSLED闪烁仿真

HLS入门 - LED闪烁仿真

一、HLS简介

HLS概念

HLS(High-Level Synthesis)是一种硬件描述语言编程技术,它能够将高级语言(如C/C++)转换为硬件描述语言(如VHDL或Verilog),用于FPGA设计。HLS是高层次综合工具,可显著提高开发效率。

HLS与VHDL/Verilog

VHDL/Verilog适用于算法简单、开发周期短的项目。然而,面对复杂算法和长时间仿真调试,HLS通过高级语言编程实现功能模块,从而提升开发效率。

HLS的局限性

  1. 缺乏早期的性能估计和设计限制检测。
  2. 未充分利用所有可能的数据通信方式。
  3. 缺少功能概述和用户代码优化。
  4. 代码报告提供过晚。
  5. 在某些情况下,工具实施效率低,如加速器映射到硬件部分过多。

更多HLS知识

更多关于HLS的基本知识,可以参考以下链接:
HLS知识链接

二、HLS实例 - LED点亮仿真实现

1. 新建项目

  • 点击 create new project
    在这里插入图片描述

  • 为项目命名,选择项目路径
    在这里插入图片描述

  • 点击next选择顶层函数(暂不选择)

在这里插入图片描述

  • 继续点击next添加C仿真文件(暂不选择)
    在这里插入图片描述

  • 选择器件
    在这里插入图片描述

至此,完成基本项目设置。

2. 代码编写

Helloworld.h
#ifndef _HELLOWORLD_H_
#define _HELLOWORLD_H_
#include "ap_int.h"
typedef ap_int<1> led_t;
void flash_led(led_t *led_o);
#endif
Helloworld.cpp
#include "HelloWorld.h"
void flash_led(led_t *led_o){
#pragma HLS INTERFACE ap_ovld port=led_o
    int i;
    for(i=0;i<10000;i++){
        if(i==9999){
            *led_o = ~(*led_o);
        }
    }
}
仿真测试文件添加

右键Test Bench,选择New File,创建tb_Helloworld.cpp

#include "HelloWorld.h"
#include <stdio.h>
int main(){
    led_t led_o;
    const int SHIFT_TIME = 4;
    int i;
    for(i=0;i<SHIFT_TIME;i++){
        flash_led(&led_o);
        printf("result : %d \n",(int)(led_o&0x01));
    }
}

3. C仿真

  • 点击 run c simulation

  • 弹出界面无需选择选项

  • 运行仿真后,出现成功界面
    在这里插入图片描述

4. 综合

  • 选择Top Function

  • 在这里插入图片描述

  • 点击Project -> Project Setting -> Synthesis
    在这里插入图片描述

  • 选择Helloworld.cpp并设置flash_led为顶层函数

5. 综合结果

  • 查看生成的总结文件
    在这里插入图片描述

  • 查看端口表格

在这里插入图片描述

  • 查看生成的.v文件

在这里插入图片描述

6. 联合仿真

  • Helloworld.cpp的Directive界面设置led_o

7. 仿真结果

在这里插入图片描述

三、总结

使用HLS工具进行LED闪烁仿真有助于验证设计的正确性和功能性。仿真过程中可观察LED闪烁模式,评估性能指标如时序约束和资源利用率,并进行必要的调试和修正。

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值