千家信息网

HLS Lesson20的示例分析

发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,今天就跟大家聊聊有关HLS Lesson20的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.改善吞吐率:本质是通过改善并行度实现的
千家信息网最后更新 2025年01月28日HLS Lesson20的示例分析

今天就跟大家聊聊有关HLS Lesson20的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1.改善吞吐率:本质是通过改善并行度实现的

当pipeline作用于函数的时候,从IO角度来看数据是没有空隙的,而作用于循环时候,则相邻的两个循环之间会有一个空隙

2.改善latency

3.改善area

实例:cordic

这里要求z0的取值范围为[-π/2,π/2],对于[-π,π]的数就需要先进行预处理映射到[-π/2,π/2],然后再计算,最后再进行后处理。

#include"cordic.h"

void pre_cir_cordic(di_t full_alpha,di_t &alpha,flag_t &flag)

{

if(full_alpha>PI/2)

{

alpha=PI-full_alpha;

flag=2;

}

else if(full_alpha<-PI/2)

{

alpha=-PI-full_alpha;

flag=3;

}

else

{

alpha=full_alpha;

flag=0;

}

}

void cir_cordic_calc(di_t alpha,flag_t flag,do_t &mysin,do_t &mycos,flag_t &flag_delay)

{

const int N = 16;

do_t xi[N];

do_t yi[N];

di_t zi[N];

flag_t flag_delay_a[N];

xi[0]=Kn;

yi[0]=0;

zi[0]=alpha;

flag_delay_a[0]=flag;

const di_t myarctan[16] ={

#include"myarctan.h";

};

int m=0;

loop:

for(m=0;m

{

if(zi[m]>=0)

{

xi[m+1]=xi[m]-(yi[m]>>m);

yi[m+1]=yi[m]+(xi[m]>>m);

zi[m+1]=zi[m]-myarctan[m];

}

else

{

xi[m+1]=xi[m]+(yi[m]>>m);

yi[m+1]=yi[m]-(xi[m]>>m);

zi[m+1]=zi[m]+myarctan[m];

}

flag_delay_a[m+1]=flag_delay_a[m];

}

mysin=yi[N-1];

mycos=xi[N-1];

flag_delay=flag_delay_a[N-1];

}

void post_cir_cordic(do_t mysin,do_t mycos,flag_t flag_delay,do_t &sin_out,do_t &cos_out)

{

switch(int(flag_delay))

{

case 2:sin_out=mysin;cos_out=-mycos;break;

case 3:sin_out=mysin;cos_out=-mycos;break;

default:sin_out=mysin;cos_out=mycos;break;

}

}

void cir_cordic(di_t full_alpha,do_t &sin_out,do_t &cos_out)

{

di_t alpha;

flag_t flag;

do_t mysin;

do_t mycos;

flag_t flag_delay;

pre_cir_cordic(full_alpha,alpha,flag);

cir_cordic_calc(alpha,flag,mysin,mycos,flag_delay);

post_cir_cordic(mysin,mycos,flag_delay,sin_out,cos_out);

}

看完上述内容,你们对HLS Lesson20的示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0