第11周作业
文章目录
前言
1.quartus 18.1(破解工具以及下载软件见如下链接链接:https://pan.baidu.com/s/1rqrPR2dHl-1W8S36YxjTkw 提取码:askg,亲测可以使用)
2.vs_ultimate_2010版本(选择2010的原因:vs2019等容易出现找不到路径并且无法添加路径使用的问题) 链接:https://pan.baidu.com/s/1nRZ-mrILCRyHHjFNIs9F8A 提取码:pj57
一、HLS是什么?与VHDL/Verilog编程技术有什么关系?
1、HLS是什么
高层次综合(High-level Synthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++、SystemC等,通常有着较高的抽象度,并且往往不具有时钟或时序的概念。相比之下,诸如Verilog、VHDL、SystemVerilog等低层次语言,通常用来描述时钟周期精确(cycle-accurate)的寄存器传输级电路模型,这也是当前ASIC或FPGA设计最为普遍使用的电路建模和描述方法。
2、HLS与VHDL/Verilog有什么关系
Verilog或VHDL与HLS相比,就好比是几十年前的汇编语言与C语言。RTL设计需要了解VHDL和Verilog等语言,而HLS工具通常使用熟悉的语言,如C / C ++。HLS工具可以处理大多数特定于硬件的实现细节,因此大大降低了软件工程师处理硬件项目的门槛。
二、HLS有哪些关键技术问题?目前存在什么技术局限性?
1、HLS有哪些关键技术问题
FPGA是HLS设计的理想平台,因为它们可以快速进行原型设计,具有快速的设计周期并且具有固有的可重新编程性。现代的HLS工具通常包含用于设计目标的广泛的FPGA技术库。
2、目前存在什么技术局限性
但对于一些简单的逻辑,HLS实现结果较为臃肿。一些简单的逻辑,用HDL实现只需要数十行代码,而HLS的实现结果却相当复杂。
三、HLS入门
1、准备工作
打开Vivado HLS并新建一个工程:
选择器件
2、代码
led.h
#ifndef _SHIFT_LED_H_
#define _SHIFT_LED_H_
#define CNT_MAX 100000000
//#define CNT_MAX 100
#define FLASH_FLAG CNT_MAX-2
typedef int led_t;
typedef int cnt_t;
void flash_led(led_t *led_o , led_t led_i);
#endif
led.c
#include "led.h"
void flash_led(led_t *led_o , led_t led_i){
cnt_t i;
for(i=0;i<CNT_MAX;i++){
if(i==FLASH_FLAG){
*led_o = ~led_i;
}
}
}
3、仿真
添加C仿真文件:
C仿真代码:
#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));
}
}
进行C仿真与综合
设置顶层文件:
点击 project >选择project seethings>选择 synthesis>browser>选择 flash_led 作为顶层函数
project >Run C simulation
可知仿真成功。
联合仿真
通过C/RTL联合仿真来验证映射出来的RTL电路是否正确。需要注意的是Vivado HLS会利用我们的C Testbench 自动生成Verilog Testbench,同时,联合仿真结束过后,我们可以通过使用 Vivado 或者 Modelsim 来查看仿真波形。
Solution > Run C/RTL Cosimulation:
仿真结果:
用Modelsim查看信号,选定wlf文件格式
选择add wave
波形图:
总结
本次作业让我了解到了HLS的相关知识,让我对FPGA更感兴趣。我也上手完成了一个简单的入门级HLS程序来进行学习,为以后更复杂深入的学习作基础。