CN102650983A - 基于查找表采用三次Bezier函数的基本三角函数求值器 - Google Patents

基于查找表采用三次Bezier函数的基本三角函数求值器 Download PDF

Info

Publication number
CN102650983A
CN102650983A CN2011100467439A CN201110046743A CN102650983A CN 102650983 A CN102650983 A CN 102650983A CN 2011100467439 A CN2011100467439 A CN 2011100467439A CN 201110046743 A CN201110046743 A CN 201110046743A CN 102650983 A CN102650983 A CN 102650983A
Authority
CN
China
Prior art keywords
lut
function
sin
tan
cos
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011100467439A
Other languages
English (en)
Other versions
CN102650983B (zh
Inventor
邓军勇
任刚刚
蒋林
韩俊刚
张彦芳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xi'an Post & Telecommunication College
Original Assignee
Xi'an Post & Telecommunication College
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xi'an Post & Telecommunication College filed Critical Xi'an Post & Telecommunication College
Priority to CN201110046743.9A priority Critical patent/CN102650983B/zh
Publication of CN102650983A publication Critical patent/CN102650983A/zh
Application granted granted Critical
Publication of CN102650983B publication Critical patent/CN102650983B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Eye Examination Apparatus (AREA)
  • Apparatus For Radiation Diagnosis (AREA)
  • Endoscopes (AREA)
  • Measurement And Recording Of Electrical Phenomena And Electrical Characteristics Of The Living Body (AREA)

Abstract

一种用于图形处理器的基于三次Bezier函数的正弦函数、余弦函数、正切函数等基本三角函数的求值器,包括一个预处理电路、一个控制点选择电路、一个Bernstein基函数产生与坐标逼近电路以及一个基本三角函数求值器。预处理电路计算输入的自变量值对应的查找表地址;控制点选择电路根据三角函数的类型和已计算得出的查找表地址确定控制点的x、y坐标,继而又Bernstein基函数产生与坐标逼近电路根据控制点x坐标计算Bernstein基函数并进而确定与输入自变量值逼近达到精度要求的基函数;基本三角函数求值器则根据Bernstein基函数和控制点y坐标计算出最终的三角函数值。该基本三角函数求值器算法简洁,电路结构清晰,运算速度快,精度符合要求,工作可靠。

Description

基于查找表采用三次Bezier函数的基本三角函数求值器
技术领域
本发明涉及一种基本三角函数求值器电路,准确地说,涉及一种用于图形处理器的、基于查找表的、采用三次Bezier函数分段逼近的、基本三角函数求值的电路结构,属于图形处理芯片设计技术领域。
背景技术
从技术、应用及自主知识产权等角度看图形处理器的研发都势在必行,而基本三角函数等曲线的求值逼近则是硬件图形处理的关键电路。在基本三角函数的求值逼近过程中,需要考虑到局部形状的可控性、光滑程度与连续性、稳定性以及难易性等。
Bezier函数是1962年由法国雷诺汽车公司的P·E·Bezier构造的一种以逼近为基础的参数化函数(参数为t)。Bezier方法将函数逼近同几何表示结合起来,将曲线拟合、函数逼近由一组控制顶点唯一确定。当给定空间n+1个点的位置坐标Pk时则Bezier函数曲线上各点坐标的插值公式为:
C ( t ) = Σ k = 0 n P k B k , n ( t ) t∈[0,1]
其中Pk为控制点,构成曲线的特征多边形,n代表Bezier函数的阶数;Bernstein基函数Bk,n(t)是曲线上各点位置坐标的调和函数,当t在[0,1]区间内变化时,对于某一个特定t值,C(t)是特征多边形各顶点Pk的加权平均,权因子依次是
B k , n ( t ) = C n k t k ( 1 - t ) n - k = n ! k ! ( n - k ) ! t k ( 1 - t ) n - k t∈[0,1]     k=0,1,Λ n
Bezier函数曲线是由Bezier特征多边形来定义的,特征多边形由控制点确定。曲线的起点和终点与该多边形的起点、终点重合且多边形的第一条边和最后一条边表示了曲线在起点和终点的切线方向,曲线的形状趋于特征多边形的形状。
发明内容
本发明的目的是:针对图形处理器对基本三角函数等曲线的求值逼近要求,提出一种结构简单、算法清晰、运算速度快、精度符合要求的求值器。
本发明的目的是这样实现的:一种用于图形处理器的基于三次Bezier函数的正弦函数、余弦函数、正切函数等基本三角函数的求值器,包括一个预处理电路U0、一个控制点选择电路U1、一个Bernstein基函数产生与坐标逼近电路U2以及一个基本三角函数求值器U3;
预处理电路(U0)对输入的自变量值进行预处理,即计算该值中包含的查找表子区间个数,从而获得查找表地址;
控制点选择电路(U1)包括三张查找表,分别针对正弦函数、余弦函数和正切函数。考虑到基本三角函数的对称周期性和图形处理器中对函数值的精度要求,查找表将(0,π/2)划分为16个子区间,即(0,π/32)、(π/32,2π/32)、......、(15π/32,π/2),子区间在查找表中的编址依次为0000、0001、0010、0011、......、1111。每个子区间对应4个控制点V0、V1、V2、V3,控制点坐标的计算方法如下:
将区间表示为[a,b],则V0、V3的坐标为(a,f(a))、(b,f(b)),其中f表示正弦函数、余弦函数、正切函数之一;
参照图2,有 f ′ ( a ) = y - f ( a ) x _ inter - a f ′ ( b ) = y - f ( b ) x _ inter - b
求解得 x _ inter = f ( a ) - f ( b ) + b · f ′ ( b ) - a · f ′ ( a ) f ′ ( b ) - f ′ ( a )
继而在分别(a,x_int er)、(x_int er,b)范围内按照三阶Bezier函数搜索V1、V2的坐标,分别可得三张查找表为:
//look-up table for sin
lut_sin[0]=32′b00000000000000000000000000000000;
lut_sin[1]=32′b00000000000000000000000000000000;
lut_sin[2]=32′b00000000000000000000100011110101;
lut_sin[3]=32′b00000000000000000000100011110101;
lut_sin[4]=32′b00000000000000000001000011110000;
lut_sin[5]=32′b00000000000000000001000011110000;
lut_sin[6]=32′b00000000000000000001100100100001;
lut sin[7]=32′b00000000000000000001100100010111;
lut_sin[8]=32′b00000000000000000001100100100001;
lut_sin[9]=32′b00000000000000000001100100010111;
lut_sin[10]=32′b00000000000000000010001110100000;
lut_sin[11]=32′b00000000000000000010001110001001;
lut sin[12]=32′b00000000000000000010101110011100;
lut sin[13]=32′b00000000000000000010101101101010;
lut_sin[14]=32′b00000000000000000011001001000011;
lut_sin[15]=32′b00000000000000000011000111110001;
lut_sin[16]=32′b00000000000000000011001001000011;
lut_sin[17]=32′b00000000000000000011000111110001;
lut_sin[18]=32′b00000000000000000011101110111100;
lut_sin[19]=32′b00000000000000000011101100111011;
lut_sin[20]=32′b00000000000000000100001111111001;
lut_sin[21]=32′b00000000000000000100001100110101;
lut_sin[22]=32′b00000000000000000100101101100101;
lut_sin[23]=32′b00000000000000000100101001010000;
lut_sin[24]=32′b00000000000000000100101101100101;
lut_sin[25]=32′b00000000000000000100101001010000;
lut_sin[26]=32′b00000000000000000101001100010100;
lut_sin[27]=32′b00000000000000000101000110101001;
lut_sin[28]=32′b00000000000000000101101110010010;
lut_sin[29]=32′b00000000000000000101100110110000;
lut_sin[30]=32′b00000000000000000110010010000111;
lut_sin[31]=32′b00000000000000000110000111110111;
lut_sin[32]=32′b00000000000000000110010010000111;
lut_sin[33]=32′b00000000000000000110000111110111;
lut_sin[34]=32′b00000000000000000110101011101110;
lut_sin[35]=32′b00000000000000000110011111100001;
lut_sin[36]=32′b00000000000000000111001110101110;
lut_sin[37]=32′b00000000000000000110111111011111;
lut_sin[38]=32′b00000000000000000111110110101001;
lut_sin[39]=32′b00000000000000000111100010101101;
lut_sin[40]=32′b00000000000000000111110110101001;
lut_sin[41]=32′b00000000000000000111100010101101;
lut_sin[42]=32′b00000000000000001000100110110010;
lut_sin[43]=32′b00000000000000001000001101001001;
lut_sin[44]=32′b00000000000000001001001010110011;
lut_sin[45]=32′b00000000000000001000101011010001;
lut_sin[46]=32′b00000000000000001001011011001011;
lut_sin[47]=32′b00000000000000001000111000111001;
lut_sin[48]=32′b00000000000000001001011011001011;
lut_sin[49]=32′b00000000000000001000111000111001;
lut_sin[50]=32′b00000000000000001001111000111000;
lut_sin[51]=32′b00000000000000001001010001100110;
lut_sin[52]=32′b00000000000000001010011010110110;
lut_sin[53]=32′b00000000000000001001101101000111;
lut_sin[54]=32′b00000000000000001010111111101101;
lut_sin[55]=32′b00000000000000001010001001100111;
lut_sin[56]=32′b00000000000000001010111111101101;
lut_sin[57]=32′b00000000000000001010001001100111;
lut_sin[58]=32′b00000000000000001011011101011010;
lut_sin[59]=32′b00000000000000001010100000100100;
lut_sin[60]=32′b00000000000000001011111111011000;
lut_sin[61]=32′b00000000000000001010111010000000;
lut_sin[62]=32′b00000000000000001100100100001111;
lut_sin[63]=32′b00000000000000001011010100000100;
lut_sin[64]=32′b00000000000000001100100100001111;
lut_sin[65]=32′b00000000000000001011010100000100;
lut_sin[66]=32′b00000000000000001101001011001010;
lut_sin[67]=32′b00000000000000001011101111100101;
lut_sin[68]=32′b00000000000000001101101101001000;
lut_sin[69]=32′b00000000000000001100000110000001;
lut_sin[70]=32′b00000000000000001110001000110001;
lut_sin[71]=32′b00000000000000001100010111100100;
lut_sin[72]=32′b00000000000000001110001000110001;
lut_sin[73]=32′b00000000000000001100010111100100;
lut_sin[74]=32′b00000000000000001110101111101100;
lut_sin[75]=32′b00000000000000001100110000001111;
lut_sin[76]=32′b00000000000000001111010001101010;
lut_sin[77]=32′b00000000000000001101000100000100;
lut_sin[78]=32′b00000000000000001111101101010011;
lut_sin[79]=32′b00000000000000001101010011011011;
lut_sin[80]=32′b00000000000000001111101101010011;
lut_sin[81]=32′b00000000000000001101010011011011;
lut_sin[82]=32′b00000000000000010000001000111101;
lut_sin[83]=32′b00000000000000001101100010110010;
lut_sin[84]=32′b00000000000000010000101010111011;
lut_sin[85]=32′b00000000000000001101110100101111;
lut_sin[86]=32′b00000000000000010001010001110101;
lut_sin[87]=32′b00000000000000001110000111000101;
lut_sin[88]=32′b00000000000000010001010001110101;
lut_sin[89]=32′b00000000000000001110000111000101;
lut_sin[90]=32′b00000000000000010001101110100000;
lut_sin[91]=32′b00000000000000001110010100100110;
lut_sin[92]=32′b00000000000000010010010000011110;
lut_sin[93]=32′b00000000000000001110100011100011;
lut_sin[94]=32′b00000000000000010010110110010111;
lut_sin[95]=32′b00000000000000001110110010000011;
lut_sin[96]=32′b00000000000000010010110110010111;
lut_sin[97]=32′b00000000000000001110110010000011;
lut_sin[98]=32′b00000000000000010011011110010011;
lut_sin[99]=32′b00000000000000001111000001010101;
lut_sin[100]=32′b00000000000000010100000001010011;
lut_sin[101]=32′b00000000000000001111001100011110;
lut_sin[102]=32′b00000000000000010100011010111001;
lut_sin[103]=32′b00000000000000001111010011111010;
lut_sin[104]=32′b00000000000000010100011010111001;
lut_sin[105]=32′b00000000000000001111010011111010;
lut_sin[106]=32′b00000000000000010101000001110100;
lut_sin[107]=32′b00000000000000001111011111001100;
lut_sin[108]=32′b00000000000000010101101110000001;
lut_sin[109]=32′b00000000000000001111101000111011;
lut_sin[110]=32′b00000000000000010101111111011011;
lut_sin[111]=32′b00000000000000001111101100010100;
lut_sin[112]=32′b00000000000000010101111111011011;
lut_sin[113]=32′b00000000000000001111101100010100;
lut_sin[114]=32′b00000000000000010110011100000110;
lut_sin[115]=32′b00000000000000001111110001111010;
lut_sin[116]=32′b00000000000000010110111110000100;
lut_sin[117]=32′b00000000000000001111110111010110;
lut_sin[118]=32′b00000000000000010111100011111101;
lut_sin[119]=32′b00000000000000001111111011000100;
lut_sin[120]=32′b00000000000000010111100011111101;
lut_sin[121]=32′b00000000000000001111111011000100;
lut_sin[122]=32′b00000000000000010111111101100100;
lut_sin[123]=32′b00000000000000001111111101100101;
lut_sin[124]=32′b00000000000000011000011111100010;
lut_sin[125]=32′b00000000000000001111111111111111;
lut_sin[126]=32′b00000000000000011001001000011111;
lut_sin[127]=32′b00000000000000001111111111111111;
//look-up table for cos
lut_cos[0]=32′b00000000000000000000000000000000;
lut_cos[1]=32′b00000000000000010000000000000000;
lut_cos[2]=32′b00000000000000000000100110111010;
lut_cos[3]=32′b00000000000000010000000000000000;
lut_cos[4]=32′b00000000000000000001001000111000;
lut_cos[5]=32′b00000000000000001111111101110001;
lut_cos[6]=32′b00000000000000000001100100100001;
lut_cos[7]=32′b00000000000000001111111011000100;
lut_cos[8]=32′b00000000000000000001100100100001;
lut_cos[9]=32′b00000000000000001111111011000100;
lut_cos[10]=32′b00000000000000000001110110111101;
lut_cos[11]=32′b00000000000000001111111001010000;
lut_cos[12]=32′b00000000000000000010011010111110;
lut_cos[13]=32′b00000000000000001111110101010100;
lut_cos[14]=32′b00000000000000000011001001000011;
lut_cos[15]=32′b00000000000000001111101100010100;
lut_cos[16]=32′b00000000000000000011001001000011;
lut_cos[17]=32′b00000000000000001111101100010100;
lut_cos[18]=32′b00000000000000000011100011101011;
lut_cos[19]=32′b00000000000000001111100111001000;
lut_cos[20]=32′b00000000000000000100000101101010;
lut_cos[21]=32′b00000000000000001111011111011111;
lut_cos[22]=32′b00000000000000000100101101100101;
lut_cos[23]=32′b00000000000000001111010011111010;
lut_cos[24]=32′b00000000000000000100101101100101;
lut_cos[25]=32′b00000000000000001111010011111010;
lut_cos[26]=32′b00000000000000000101010011011110;
lut_cos[27]=32′b00000000000000001111001000111010;
lut_cos[28]=32′b00000000000000000101110101011100;
lut_cos[29]=32′b00000000000000001110111101000001;
lut_cos[30]=32′b00000000000000000110010010000111;
lut_cos[31]=32′b00000000000000001110110010000011;
lut_cos[32]=32′b00000000000000000110010010000111;
lut_cos[33]=32′b00000000000000001110110010000011;
lut_cos[34]=32′b00000000000000000110100100100011;
lut_cos[35]=32′b00000000000000001110101010111111;
lut_cos[36]=32′b00000000000000000111001000100100;
lut_cos[37]=32′b00000000000000001110011100110011;
lut_cos[38]=32′b00000000000000000111110110101001;
lut_cos[39]=32′b00000000000000001110000111000101;
lut_cos[40]=32′b00000000000000000111110110101001;
lut_cos[41]=32′b00000000000000001110000111000101;
lut_cos[42]=32′b00000000000000001000010000010000;
lut_cos[43]=32′b00000000000000001101111011000001;
lut_cos[44]=32′b00000000000000001000110010001110;
lut_cos[45]=32′b00000000000000001101101010001011;
lut_cos[46]=32′b00000000000000001001011011001011;
lut_cos[47]=32′b00000000000000001101010011011011;
lut_cos[48]=32′b00000000000000001001011011001011;
lut_cos[49]=32′b00000000000000001101010011011011;
lut_cos[50]=32′b00000000000000001010000001000100;
lut_cos[51]=32′b00000000000000001100111110011000;
lut_cos[52]=32′b00000000000000001010100011000010;
lut_cos[53]=32′b00000000000000001100101001110000;
lut_cos[54]=32′b00000000000000001010111111101101;
lut_cos[55]=32′b00000000000000001100010111100100;
lut_cos[56]=32′b00000000000000001010111111101101;
lut_cos[57]=32′b00000000000000001100010111100100;
lut_cos[58]=32′b00000000000000001011100100100101;
lut_cos[59]=32′b00000000000000001100000000001011;
lut_cos[60]=32′b00000000000000001100000110100011;
lut_cos[61]=32′b00000000000000001011101001000100;
lut_cos[62]=32′b00000000000000001100100100001111;
lut_cos[63]=32′b00000000000000001011010100000100;
lut_cos[64]=32′b00000000000000001100100100001111;
lut_cos[65]=32′b00000000000000001011010100000100;
lut_cos[66]=32′b00000000000000001100111101110110;
lut_cos[67]=32′b00000000000000001011000001111110;
lut_cos[68]=32′b00000000000000001101011111110100;
lut_cos[69]=32′b00000000000000001010101001010001;
lut_cos[70]=32′b00000000000000001110001000110001;
lut_cos[71]=32′b00000000000000001010001001100111;
lut_cos[72]=32′b00000000000000001110001000110001;
lut_cos[73]=32′b00000000000000001010001001100111;
lut_cos[74]=32′b00000000000000001110101100100111;
lut_cos[75]=32′b00000000000000001001101101111010;
lut_cos[76]=32′b00000000000000001111001110100101;
lut_cos[77]=32′b00000000000000001001010010011100;
lut_cos[78]=32′b00000000000000001111101101010011;
lut_cos[79]=32′b00000000000000001000111000111001;
lut_cos[80]=32′b00000000000000001111101101010011;
lut_cos[81]=32′b00000000000000001000111000111001;
lut_cos[82]=32′b00000000000000010000010010001011;
lut_cos[83]=32′b00000000000000001000011010010000;
lut_cos[84]=32′b00000000000000010000110100001001;
lut_cos[85]=32′b00000000000000000111111100111001;
lut_cos[86]=32′b00000000000000010001010001110101;
lut_cos[87]=32′b00000000000000000111100010101101;
lut_cos[88]=32′b00000000000000010001010001110101;
lut_cos[89]=32′b00000000000000000111100010101101;
lut_cos[90]=32′b00000000000000010001111001110001;
lut_cos[91]=32′b00000000000000000110111111011111;
lut_cos[92]=32′b00000000000000010010011100110001;
lut_cos[93]=32′b00000000000000000110011111100001;
lut_cos[94]=32′b00000000000000010010110110010111;
lut_cos[95]=32′b00000000000000000110000111110111;
lut_cos[96]=32′b00000000000000010010110110010111;
lut_cos[97]=32′b00000000000000000110000111110111;
lut_cos[98]=32′b00000000000000010011010100000100;
lut_cos[99]=32′b00000000000000000101101100011011;
lut_cos[100]=32′b00000000000000010011110101000000;
lut_cos[101]=32′b00000000000000000101001101100000;
lut_cos[102]=32′b00000000000000010100011010111001;
lut_cos[103]=32′b00000000000000000100101001010000;
lut_cos[104]=32′b00000000000000010100011010111001;
lut_cos[105]=32′b00000000000000000100101001010000;
lut_cos[106]=32′b00000000000000010100111000100110;
lut_cos[107]=32′b00000000000000000100001100110101;
lut_cos[108]=32′b00000000000000010101011001100010;
lut_cos[109]=32′b00000000000000000011101100111011;
lut_cos[110]=32′b00000000000000010101111111011011;
lut_cos[111]=32′b00000000000000000011000111110001;
lut_cos[112]=32′b00000000000000010101111111011011;
lut_cos[113]=32′b00000000000000000011000111110001;
lut_cos[114]=32′b00000000000000010110100011010001;
lut_cos[115]=32′b00000000000000000010100100100111;
lut_cos[116]=32′b00000000000000010110111111000110;
lut_cos[117]=32′b00000000000000000010001001000011;
lut_cos[118]=32′b00000000000000010111100011111101;
lut_cos[119]=32′b00000000000000000001100100010111;
lut_cos[120]=32′b00000000000000010111100011111101;
lut_cos[121]=32′b00000000000000000001100100010111;
lut_cos[122]=32′b00000000000000011000000000101000;
lut_cos[123]=32′b00000000000000000001000111110101;
lut_cos[124]=32′b00000000000000011000100100101001;
lut_cos[125]=32′b00000000000000000000100011110101;
lut_cos[126]=32′b00000000000000011001001000011111;
lut_cos[127]=32′b00000000000000000000000000000000;
//look-up table for tan
lut_tan[0]=32′b00000000000000000000000000000000;
lut_tan[1]=32′b00000000000000000000000000000000;
lut_tan[2]=32′b00000000000000000000100010110100;
lut_tan[3]=32′b00000000000000000000100010110100;
lut_tan[4]=32′b00000000000000000001000011110000;
lut_tan[5]=32′b00000000000000000001000011110001;
lut_tan[6]=32′b00000000000000000001100100100001;
lut_tan[7]=32′b00000000000000000001100100110110;
lut_tan[8]=32′b00000000000000000001100100100001;
lut_tan[9]=32′b00000000000000000001100100110110;
lut_tan[10]=32′b00000000000000000010001000010111;
lut_tan[11]=32′b00000000000000000010001001000010;
lut_tan[12]=32′b00000000000000000010101001010100;
lut_tan[13]=32′b00000000000000000010101010101011;
lut_tan[14]=32′b00000000000000000011001001000011;
lut_tan[15]=32′b00000000000000000011001011101011;
lut_tan[16]=32′b00000000000000000011001001000011;
lut_tan[17]=32′b00000000000000000011001011101011;
lut_tan[18]=32′b00000000000000000011101000110011;
lut_tan[19]=32′b00000000000000000011101100101011;
lut_tan[20]=32′b00000000000000000100001010110001;
lut_tan[21]=32′b00000000000000000100010000100110;
lut_tan[22]=32′b00000000000000000100101101100101;
lut_tan[23]=32′b00000000000000000100110110101000;
lut_tan[24]=32′b00000000000000000100101101100101;
lut_tan[25]=32′b00000000000000000100110110101000;
lut_tan[26]=32′b00000000000000000101001101010101;
lut_tan[27]=32′b00000000000000000101011001010010;
lut_tan[28]=32′b00000000000000000101101111010011;
lut_tan[29]=32′b00000000000000000101111111010111;
lut_tan[30]=32′b00000000000000000110010010000111;
lut_tan[31]=32′b00000000000000000110101000001001;
lut_tan[32]=32′b00000000000000000110010010000111;
lut_tan[33]=32′b00000000000000000110101000001001;
lut_tan[34]=32′b00000000000000000110111110001001;
lut_tan[35]=32′b00000000000000000111011011101111;
lut_tan[36]=32′b00000000000000000111100000001000;
lut_tan[37]=32′b00000000000000001000000110011000;
lut_tan[38]=32′b00000000000000000111110110101001;
lut_tan[39]=32′b00000000000000001000100011010101;
lut_tan[40]=32′b00000000000000000111110110101001;
lut_tan[41]=32′b00000000000000001000100011010101;
lut_tan[42]=32′b00000000000000001000010110011001;
lut_tan[43]=32′b00000000000000001001001100001001;
lut_tan[44]=32′b00000000000000001000111000010111;
lut_tan[45]=32′b00000000000000001001111001110110;
lut_tan[46]=32′b00000000000000001001011011001011;
lut_tan[47]=32′b00000000000000001010101100001101;
lut_tan[48]=32′b00000000000000001001011011001011;
lut_tan[49]=32′b00000000000000001010101100001101;
lut_tan[50]=32′b00000000000000001001110110110101;
lut_tan[51]=32′b00000000000000001011010100001101;
lut_tan[52]=32′b00000000000000001010011001110101;
lut_tan[53]=32′b00000000000000001100001000111110;
lut_tan[54]=32′b00000000000000001010111111101101;
lut_tan[55]=32′b00000000000000001101001000011000;
lut_tan[56]=32′b00000000000000001010111111101101;
lut_tan[57]=32′b00000000000000001101001000011000;
lut_tan[58]=32′b00000000000000001011011111011101;
lut_tan[59]=32′b00000000000000001101111101011111;
lut_tan[60]=32′b00000000000000001100000001011011;
lut_tan[61]=32′b00000000000000001110111010010111;
lut_tan[62]=32′b00000000000000001100100100001111;
lut_tan[63]=32′b00000000000000001111111111111111;
lut_tan[64]=32′b00000000000000001100100100001111;
1ut_tan[65]=32′b00000000000000001111111111111111;
lut_tan[66]=32′b00000000000000001100111111111001;
lut_tan[67]=32′b00000000000000010000110111010010;
lut_tan[68]=32′b00000000000000001101100010111001;
lut_tan[69]=32′b00000000000000010010000001100110;
lut_tan[70]=32′b00000000000000001110001000110001;
lut_tan[71]=32′b00000000000000010011011111101111;
lut_tan[72]=32′b00000000000000001110001000110001;
lut_tan[73]=32′b00000000000000010011011111101111;
lut_tan[74]=32′b00000000000000001110101001100010;
lut_tan[75]=32′b00000000000000010100110001001010;
lut_tan[76]=32′b00000000000000001111001011100001;
lut_tan[77]=32′b00000000000000010110001111000010;
lut_tan[78]=32′b00000000000000001111101101010011;
lut_tan[79]=32′b00000000000000010111111100100001;
lut_tan[80]=32′b00000000000000001111101101010011;
lut_tan[81]=32′b00000000000000010111111100100001;
lut_tan[82]=32′b00000000000000010000001111000110;
lut_tan[83]=32′b00000000000000011001101010000000;
lut_tan[84]=32′b00000000000000010000110001000100;
lut_tan[85]=32′b00000000000000011011101000010011;
lut_tan[86]=32′b00000000000000010001010001110101;
lut_tan[87]=32′b00000000000000011101111011110001;
lut_tan[88]=32′b00000000000000010001010001110101;
lut_tan[89]=32′b00000000000000011101111011110001;
lut_tan[90]=32′b00000000000000010001111001110001;
lut_tan[91]=32′b00000000000000100000101111011111;
lut_tan[92]=32′b00000000000000010010011010101110;
lut_tan[93]=32′b00000000000000100011101011010111;
lut_tan[94]=32′b00000000000000010010110110010111;
lut_tan[95]=32′b00000000000000100110101000001001;
lut_tan[96]=32′b00000000000000010010110110010111;
lut_tan[97]=32′b00000000000000100110101000001001;
lut_tan[98]=32′b00000000000000010011011110010011;
lut_tan[99]=32′b00000000000000101010111000110110;
lut_tan[100]=32′b00000000000000010011111111010000;
lut_tan[101]=32′b00000000000000101111100111100100;
lut_tan[102]=32′b00000000000000010100011010111001;
lut_tan[103]=32′b00000000000000110100101111101011;
lut_tan[104]=32′b00000000000000010100011010111001;
lut_tan[105]=32′b00000000000000110100101111101011;
lut_tan[106]=32′b00000000000000010101000010110101;
lut_tan[107]=32′b00000000000000111100001001100110;
lut_tan[108]=32′b00000000000000010101100011110010;
lut_tan[109]=32′b00000000000001000101000101100100;
lut_tan[110]=32′b00000000000000010101111111011011;
lut_tan[111]=32′b00000000000001010000011011111111;
lut_tan[112]=32′b00000000000000010101111111011011;
lut_tan[113]=32′b00000000000001010000011011111111;
lut_tan[114]=32′b00000000000000010110101100011111;
lut_tan[115]=32′b00000000000001100010111011110011;
lut_tan[116]=32′b00000000000000010111001100011010;
lut_tan[117]=32′b00000000000001111100001001011001;
lut_tan[118]=32′b00000000000000010111100011111101;
lut_tan[119]=32′b00000000000010100010011100110110;
lut_tan[120]=32′b00000000000000010111100011111101;
lut_tan[121]=32′b00000000000010100010011100110110;
lut_tan[122]=32′b00000000000000010110101100011111;
lut_tan[123]=32′b00000000000001100010111011110011;
lut_tan[124]=32′b00000000000000010111001100011010;
lut_tan[125]=32′b00000000000001111100001001011001;
lut_tan[126]=32′b00000000000000011001001000011111;
lut_tan[127]=32′b01110111010110111010001001100101;
U1根据三角函数的类型和已计算得出的查找表地址确定控制点的x、y坐标并分别送给U2和U3,具体计算过程为:
假定三角函数类型为sin,计算得出的查找表地址为addr,则4个控制点V0、V1、V2、V3的x、y坐标分别为lut_sin[addr]、lut_sin[addr+1]、lut_sin[addr+2]、lut_sin[addr+3]、lut_sin[addr+4]、lut_sin[addr+5]、lut_sin[addr+6]、lut_sin[addr+7]。
Bernstein基函数产生与坐标逼近电路U2根据控制点x坐标计算Bernstein基函数并进而确定与输入自变量值逼近达到精度要求的基函数b03、b13、b23、b33,四个基函数被送到求值器U3;
基本三角函数求值器U3根据Bernstein基函数和4个控制点的y坐标计算出最终的三角函数值。
这样就完成了基本三角函数的求值工作,该电路在完成函数求值过程中,数据精度可以达到0.01%,满足图形处理器中函数求值的精度要求。该求值器算法简洁,电路结构清晰,运算速度快,精度符合要求,工作可靠。
附图说明
图1是基于三次Bezier函数的基本三角函数的求值器电路模块图;
图2是三次Bezier函数控制点计算示意图。
具体实施方式
下面结合附图具体介绍本发明所采用的技术方案和工作原理。传统的硬件电路设计通常采用电路图方式来详细描述电路的设计结构。用电路图方式描述硬件电路的结构是硬件设计的第二代设计工具,随着科学技术的迅猛发展,硬件描述语言(HDL)已经成为第三代硬件设计工具。所以该电路采用verilog硬件描述语言加以实施。
首先说明电路各模块的接口信号。本发明的电路信号流图如图1所示。其模块输入输出接口说明如表1所示;预处理电路(U0)输入输出接口说明如表2所示;控制点选择电路(U1)的输入输出接口说明如表3所示;Bernstein基函数产生与坐标逼近电路(U2)的输入输出接口说明如表4所示;基本三角函数坐标产生电路(U3)的输入输出接口说明如表5所示。
表1,模块接口信号说明
  信号名称   信号说明   含义
  x_coord[31:0]   IN   输入的自变量值。
  clk   IN   全局时钟信号。
  rst_n   IN   全局复位信号。
  lut_sel[1:0]   IN   函数类型选择信号。
  start   IN   运算启动信号。
  y_coord[31:0]   OUT   输出的计算结果函数值。
表2,预处理电路(U0)接口信号说明
  信号名称   信号说明   含义
  x_coord[31:0]   IN   输入的自变量值。
  clk   IN   全局时钟信号。
  rst_n   IN   全局复位信号。
  start   IN   运算启动信号。
  lut_addr[3:0]   OUT   送到U1的查找表地址信号。
  sel_en   OUT   送到U1的查找使能信号。
表3,控制点选择电路(U1)的接口信号说明
  信号名称   信号说明  含义
  lut_addr[3:0]   IN  来自U0的查找表地址信号。
  sel_en   IN  来自U0的查找使能信号。
  clk   IN  全局时钟信号。
  rst_n   IN  全局复位信号。
  lut_sel[1:0]   IN  函数类型选择信号。
  v0_x_coord[31:0]   OUT  经选择后的控制点V0的x坐标。
  V1_x_coord[31:0]   OUT  经选择后的控制点V1的x坐标。
  V2_x_coord[31:0]   OUT  经选择后的控制点V2的x坐标。
  V3_x_coord[31:0]   OUT  经选择后的控制点V3的x坐标。
  ctrl_valid   OUT  控制点有效指示信号。
表4,Bernstein基函数产生与坐标逼近电路(U2)的接口信号说明
  信号名称   信号说明  含义
  clk   IN  全局时钟信号。
  rst_n   IN  全局复位信号。
  v0_x_coord[31:0]   IN  来自U1的控制点V0的x坐标。
  V1_x_coord[31:0]   IN  来自U1的控制点V1的x坐标。
  V2_x_coord[31:0]   IN  来自U1的控制点V2的x坐标。
  V3_x_coord[31:0]   IN  来自U1的控制点V3的x坐标。
  ctrl_valid   IN  控制点有效指示信号。
  b03[31:0]   OUT  经计算符合精度要求的基函数b03
  b13[31:0]   OUT  经计算符合精度要求的基函数b13
  b23[31:0]   OUT  经计算符合精度要求的基函数b23
  b33[31:0]   OUT  经计算符合精度要求的基函数b33
  cpt_en   OUT  三角函数值计算使能信号。
表5,基本三角函数坐标产生电路(U3)的接口信号说明
  信号名称   信号说明  含义
  clk   IN  全局时钟信号。
  rst_n   IN  全局复位信号。
  v0_y_coord[31:0]   IN  来自U1的控制点V0的y坐标。
  V1_y_coord[31:0]   IN  来自U1的控制点V1的y坐标。
  V2_y_coord[31:0]   IN  来自U1的控制点V2的y坐标。
  V3_y_coord[31:0]   IN  来自U1的控制点V3的y坐标。
  cpt_en   IN  三角函数值计算使能信号。
  b03[31:0]   IN  来自U2的基函数b03
  b13[31:0]   IN  来自U2的基函数b13
  b23[31:0]   IN  来自U2的基函数b23
  b33[31:0]   IN  来自U2的基函数b33
  y_coord[31:0]   OUT  输出的计算结果函数值。
电路的Verilog语言描述的核心代码如下:
Figure BSA00000440485800231
Figure BSA00000440485800241
Figure BSA00000440485800251
Figure BSA00000440485800261
Figure BSA00000440485800271
Figure BSA00000440485800281
Figure BSA00000440485800291
Figure BSA00000440485800301
Figure BSA00000440485800321
Figure BSA00000440485800331
本发明已经在“GPU中关键模块硬件加速器的电路设计与原型实现”的项目中加以采用,经过实际验证,结果表明该电路的功能满足预期目标,可以可靠工作,实现了发明目的。

Claims (1)

1.一种用于图形处理器的基于三次Bezier函数的正弦函数、余弦函数、正切函数等基本三角函数的求值器,包括一个预处理电路U0、一个控制点选择电路U1、一个Bernstein基函数产生与坐标逼近电路U2以及一个基本三角函数求值器U3;其特征在于:
预处理电路U0对输入的自变量值进行预处理,计算该值中包含的查找表子区间个数,从而获得查找表地址;
控制点选择电路U1根据三角函数的类型和已计算得出的查找表地址确定控制点的x、y坐标并分别送给U2和U3;
Bernstein基函数产生与坐标逼近电路U2根据控制点x坐标计算Bernstein基函数并进而确定与输入自变量值逼近达到精度要求的基函数;
基本三角函数求值器U3根据Bernstein基函数和控制点y坐标计算出最终的三角函数值。
CN201110046743.9A 2011-02-25 2011-02-25 基于查找表采用三次Bezier函数的基本三角函数求值器 Expired - Fee Related CN102650983B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110046743.9A CN102650983B (zh) 2011-02-25 2011-02-25 基于查找表采用三次Bezier函数的基本三角函数求值器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110046743.9A CN102650983B (zh) 2011-02-25 2011-02-25 基于查找表采用三次Bezier函数的基本三角函数求值器

Publications (2)

Publication Number Publication Date
CN102650983A true CN102650983A (zh) 2012-08-29
CN102650983B CN102650983B (zh) 2016-06-15

Family

ID=46692991

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110046743.9A Expired - Fee Related CN102650983B (zh) 2011-02-25 2011-02-25 基于查找表采用三次Bezier函数的基本三角函数求值器

Country Status (1)

Country Link
CN (1) CN102650983B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107783756A (zh) * 2016-08-31 2018-03-09 深圳市中兴微电子技术有限公司 一种获取角度相关值的方法和装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1630745A2 (en) * 2004-08-27 2006-03-01 Microsoft Corporation Rendering of outline fonts
CN101515306A (zh) * 2009-03-26 2009-08-26 山东理工大学 基于G1连续三角Bézier曲面的产品STL模型重建方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1630745A2 (en) * 2004-08-27 2006-03-01 Microsoft Corporation Rendering of outline fonts
US20060044312A1 (en) * 2004-08-27 2006-03-02 Microsoft Corporation Rendering outline fonts
CN101515306A (zh) * 2009-03-26 2009-08-26 山东理工大学 基于G1连续三角Bézier曲面的产品STL模型重建方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107783756A (zh) * 2016-08-31 2018-03-09 深圳市中兴微电子技术有限公司 一种获取角度相关值的方法和装置

Also Published As

Publication number Publication date
CN102650983B (zh) 2016-06-15

Similar Documents

Publication Publication Date Title
CN103236064B (zh) 一种基于法向量的点云自动配准方法
CN103645725B (zh) 一种机器人示教轨迹规划方法和系统
CN104020770B (zh) 基于多项式的uuv空间轨迹规划方法
Lu et al. A hydrodynamic optimization design methodology for a ship bulbous bow under multiple operating conditions
CN103744346A (zh) 一种电子凸轮曲线生成方法
Nair et al. Cascade interpolation for semi‐Lagrangian advection over the sphere
CN104535067A (zh) 一种基于分区搜索的脉冲信号到达时间快速计算方法
Li et al. Study of CORDIC algorithm based on FPGA
Liu et al. Gravity aided positioning based on real-time ICCP with optimized matching sequence length
CN102650983A (zh) 基于查找表采用三次Bezier函数的基本三角函数求值器
CN104794311A (zh) 一种时间自由条件下的全局最优双脉冲轨道转移方法
CN105160092A (zh) 一种适用于热防护系统瞬态温度场计算的热环境插值方法
CN202498542U (zh) 可加密式活络样卡
CN103365827A (zh) 一种高精度正弦/余弦函数的计算方法
CN103065363A (zh) 一种杆塔三维模型快速导入场景方法
Wenda et al. Real-time SAR-CORDIC Algorithm and Application in Signal Generation and Scene Simulation
CN103065039B (zh) 一种基于欧拉公式的高精度正弦/余弦函数计算方法
Koo et al. A Design of High-speed Phase Calculator for 3D Depth Image Extraction from TOF Sensor Data
Liu et al. A validated high-resolution hydro power time-series model for energy systems analysis
Liu et al. A real-time high-precision interpolation algorithm for general-typed parametric curves in CNC machine tools
Lai et al. A generic sun-tracking algorithm for on-axis solar collector in mobile platforms
Yoshikawa et al. Development of Fixed-point Square Root Operation for High-level Synthesis
Zou Polygonal plot scaling method for plant protection of rotor-like UAVs
Wang et al. Simple GPS Automatic Navigation Design
Xu et al. A new nonlinear parameterized model order reduction technique combining the interpolation method and Proper Orthogonal Decomposition

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: 710121 Shaanxi city of Xi'an province Changan District Wei Guolu Xi'an University of Posts and Telecommunications

Applicant after: XI'AN University OF POSTS & TELECOMMUNICATIONS

Address before: 710121 Shaanxi city of Xi'an province Changan District Wei Guolu Xi'an University of Posts and Telecommunications

Applicant before: Xi'an University of Posts & Telecommunications

COR Change of bibliographic data

Free format text: CORRECT: APPLICANT; FROM: XI'AN POST + TELECOMMUNICATION COLLEGE TO: XI'AN UNIVERSITY OF POSTS + TELECOMMUNICATIONS

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160615