1、2 创建一个VivadoHLS工程 Xilinx Forums用Vivado-HLS实现低latency 除法器George Wang Xilinx DSP Specialist Table of Contents1 Vivado HLS 简介 32 创建一个Vivado-HLS工程 42.1 打开Vivado HLS GUI 42.2 创建新工程 52.3 添加源文件 62.4 添加测试文件 82.5 创建solution 103 C Validation 124 C Synthesis 135 Explore 不同新的Solution 151 Vivado HLS 简介Xilinx Viv
2、ado High-Level Synthesis (HLS) 工具将 C, C+,或者 SystemC 设计规范,算法转成 Register Transfer Level (RTL)实现,可综合到Xilinx FPGA。将DSP算法快速转到RTL FPGA 实现将C 至 RTL时间缩短 4 倍基于 C 语言的验证时间缩短100倍RTL 仿真时间缩短 3 倍2 创建一个Vivado-HLS工程2.1 打开Vivado HLS GUI双击桌面上Vivado HLS GUI 图标, 或从Start All Programs Vivado Vivado HLS GUI打开GUI之后,Vivado-HL
3、S welcome界面如下所示:2.2 创建新工程在 Welcome Page, 选择Create New Project2.3 添加源文件指定顶层需要综合的源文件名,并添加文件.本除法器设计采用移位算法#include radix2div.hquotient_t radix2div ( dividend_t dividend, / (numerator) divisor_t divisor, / (denominator) remainder_t *remainder / ) #pragma AP latency max=3#pragma AP pipeline quotient_i_t q
4、uo, y; / +1 bits unsigned subtract_t sub_out, rem_r; / +1 bits signed boolean_t last_bit, next_bit; loop_cnt_t i; / last_bit = 0; rem_r = 0; if (LOOP_MAX 32) quo = 0ULL; else quo = 0; / div_booth_label0: for (i = 0; i LOOP_MAX; i = i+1) / concurrent blocks sub_out = rem_r - divisor; y = dividend & 1
5、 (LOOP_MAX-i-2); if ( y = 0 ) next_bit = 0; else next_bit = 1; if (sub_out 0) / remainder - denominator is negative quo = quo 1; if (i != LOOP_MAX-1) rem_r = rem_r 1; rem_r = rem_r | next_bit; else / remainder - denominator is positive quo = quo 1; quo = quo | 1; if (i != LOOP_MAX-1) rem_r = sub_out
6、 1; rem_r = rem_r | next_bit; else rem_r = sub_out; / end for*remainder = rem_r;return quo; 2.4 添加测试文件添加测试文件.#include #include #include radix2div.h/quotient_t radix2div ( dividend_t dividend, / (numerator) divisor_t divisor, / (denominator) remainder_t *remainder / );/int test_divider (dividend_t di
7、vidend, divisor_t divisor ) quotient_t quotient; remainder_t remainder; quotient = radix2div(dividend,divisor,&remainder); fprintf(stdout, dividend = %u, divisor = %u quotient = %u remainder = %u n, dividend, divisor, quotient, remainder); fprintf(stdout, - n); if (quotient = dividend/divisor) & (remainder = dividend-(divisor*quotient) ) printf (PASS n); else printf (FAIL n); return 1; /int main () int i, j;dividend_t max_num;max_num = 0;j = LOOP_MAX-1;for (i = 0; i new solution。 在同一个工程里面,可以使用同一套源代码,进行不同solutions的尝试。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1