等精度频率计的新方法Word格式.docx
- 文档编号:16315145
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:31
- 大小:54.90KB
等精度频率计的新方法Word格式.docx
《等精度频率计的新方法Word格式.docx》由会员分享,可在线阅读,更多相关《等精度频率计的新方法Word格式.docx(31页珍藏版)》请在冰豆网上搜索。
但当被测信号的周期较短时,会使精度大大下降。
方案三:
等精度测频,按定义式F=N/T进行测量,但闸门时间随被测信号的频率变化而变化。
如图1所示,被测信号Fx经放大整形形成时标ГX,将时标ГX经编程处理后形成时基TR。
此方案闸门时间随被测信号的频率变化而变化,其测量精度将不会随着被测信号频率的下降而降低。
综上所述,选用第三种等精度测频方案。
FX
图1测频方案方框图
1.2.串行BCD码除法介绍
测频方案中用到了定义式:
F=N/T,即要用到除法运算。
利用FPGA实现二进制除法运算,一种方法是采用逼近法,这种方法速度低、准确性不高。
另一种方法是采取被除数与除数的倒数相乘的方法,即将除数作为寄存器的地址,其倒数的小数部分作为寄存器的内容,通过一次寄存器寻址来计算除数的倒数。
这种方法在一个时钟周期内即可完成一个完整的除法运算,虽然速度较高,但对于多字节除法运算,不仅程序复杂,而且占用资源较多。
根据频率计的实际情况,本设计采用串行除法运算,利用多个时钟周期完成一个完整的除法运算,从而兼顾了频率计对速度和资源两方面的要求。
1.2.1.多位串行BCD码减法原理:
在数字串行除法运算中,减法运算是必不可少的部分。
数字串行BCD码的减法运算是将P位的BCD码分为P个宽为4的二进制数,然后从低位开始相减,在P个时钟周期内完成减法操作。
如果输入的操作数位数为8,那么串行BCD码减法器可以在8个时钟周期内完成8位BCD码减法运算。
数字串行减法的控制也比较简单,1位BCD码减法运算完成,进行移位操作,并且移位次数加1,然后通过采用start信号指示新计算周期。
当移位次数为n时,输出移位寄存器完成串/并转换,输出结果。
设计者可以根据实际情况,通过选择不同的n,提高设计的灵活性。
本设计选择n=8。
该设计在提高速度的同时,节省了资源。
实验证明,采用1OOMHz的工作频率,实现一个8位BCD码串行减法运算,耗用的资源却小于实现2位BCD码并行减法运算所耗用的资源。
1.2.2.多位串行BCD码除法原理:
本设计采用循环式除法运算,循环原理可以用下面的公式表示:
ω[j+1]=rω[j]-dqj+1
式中,ω[j]为第j步的余数,ω[0]为被除数;
d为除数;
qj+1为第j+1步所得的商;
r为与移位步长有关的常数,在此取为16。
除法运算循环图表如图2所示。
图2串行BCD码除法运算算循环图
循环步骤如下:
1.将ω[j]左移四位,构成rω[j]。
2.通过多次BCD码减法运算,求得部分商qJ+1,得到部分余数。
3.部分余数、部分商移位,准备下次循环。
高速串行BCD码除法是建立在BCD码减法运算基础上的循环运算。
用被除数减除数得到部分余数的BCD码,如果够减,则使商加1;
否则,余数和商同时左移四位,并记录移位的次数m,根据对有效位数的不同要求,可以对m进行赋值,如果要求保留8位有效数字,则m=8。
在这种循环除法运算中,减少循环的次数是提高运算速度比较有效的方法。
在一般循环式除法运算中,是从低位开始进行循环相减,循环次数等于商。
如果是8位除法运行,则得到一个8位的商,要进行8位次的BCD码减法循环,例如:
56895230/8=7111903.8,要进行7111903.8次循环,计算的速度可想而知。
在本设计中借鉴了一般十进制除法的运算方法,从高位开始相减,大大减少了循环次数。
下面以一个例子说明它的原理:
1.将被除数和除数移位,使其第一位BCD码不为0000,并记录移位的次数P(例如:
56895230/80000000,p=8)。
2.比较最高位的大小,如果除数的最高位大于被除数的最高位,则将除数右移4位,同时将P减1(即:
56895230/08000000,且p=7)。
3.得到的数卢为小数点的位置(F:
7说明小数点的位置在第七位数后)。
4.循环相减。
当部分余数小于08000000,再将部分余数左移四位,继续进行相减。
循环m次后即可得到m个有效数字的结果,然后根据p可以确定小数点的位置。
使用这种方法计算一个8位数的除法运算,循环减法次数最大为80次,每次循环使用时间为8个时钟周期。
如果工作频率为100MHz,则最长的运算时间为6.4μs,运算速度大大提高。
二.单元电路设计
2.1.整形电路:
图3输入信号整形电路图
三.软件设计
3.1.程序流程图:
频率测量程序流程图如图所示。
图4频率测量程序流程图
四.系统测试
4.1.使用仪器:
直流稳压电源:
DCPOWERSUPPLYDF1731SL2A,ZhongCeElectronicsCO.,LTD;
数字万用表:
UT101MULTIMETER金创电子仪器厂;
FPGA实验仪:
DP-FPGA,广州致远电子有限公司;
4.2.测试数据:
被测次数
1
2
3
4
5
6
7
8
被测频率(Hz)
测得频率(Hz)
测量误差(%)
五.结论及参考文献
5.1.参考文献:
1.潘松,黄计业.EDA技术实用教程[m].北京:
科学出版社.2002。
2.黄智伟主编,王彦,陈文光,朱卫华编著.全国大学生电子设计竞赛训练教程[M].北京:
电
子工业出版社2005.
3.南华大学第六届全国电子设计竞赛全体参赛成员.第六届电子大赛资料[C](多谢老师提供).
4.王松武,蒋志坚.通用仪器【M】.哈尔滨:
哈尔滨工程大学出版社.2002。
5.高吉祥.电子技术基础实验与课程设计【M】.北京:
电子工业出版社.2002。
六.附件
6.1.元件清单:
Designator
PartType
Quantity
Footprint
电阻
3.3k
axial0.4
10k
100k
电容
瓷片电容
rad0.1
插针
2针
sip2
3针
sip3
20针
idc20
芯片
DAC0832
DIP20
电解电容
rb.2/.4
液晶
2x16字符型
led-a
集成运放
LM324
DIP14
RES2
6.2.程序清单:
--/*DJDPLJ_TOP.VHD*/--顶层模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Uncommentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitivecomponents.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entitydjdplj_topis
Port(rst,clk:
instd_logic;
dc,das:
rs,wr,e:
outstd_logic;
lcd_data:
inoutstd_logic_vector(7downto0));
enddjdplj_top;
architectureBehavioralofdjdplj_topis
componentcepinis
Port(bz:
dc:
rst,cl:
bzclk,dcclk:
outstd_logic_vector(31downto0));
endcomponentcepin;
componentdivis
Port(clk,rst:
bei,chu:
instd_logic_vector(31downto0);
shang:
outstd_logic_vector(31downto0);
dian:
outintegerrange-10to10);
endcomponentdiv;
componentlcdis
data:
inoutstd_logic_vector(7downto0);
pl:
d:
inintegerrange-10to10);
endcomponentlcd;
componentresetis
cl,clr:
outstd_logic);
endcomponentreset;
signalrst1,cl1,clr1,clkk:
std_logic;
signalbzclk1,dcclk1,shang1:
std_logic_vector(31downto0);
signaldian1:
integerrange-10to10;
signaldc1:
begin
u1:
cepinportmap(bz=>
clkk,dc=>
dc1,rst=>
clr1,cl=>
cl1,bzclk=>
bzclk1,dcclk=>
dcclk1);
u2:
divportmap(clk=>
clk,rst=>
rst1,bei=>
dcclk1,chu=>
bzclk1,shang=>
shang1,dian=>
dian1);
u3:
lcdportmap(clk=>
rst1,rs=>
rs,wr=>
wr,e=>
e,data=>
lcd_data,pl=>
shang1,d=>
u4:
resetportmap(clk=>
rst1,cl=>
cl1,clr=>
clr1);
process(clk,rst)
variablecnt:
integerrange0to15;
ifrst='
0'
then
cnt:
=0;
clkk<
='
;
elsifrising_edge(clk)then
ifcnt=15then
cnt:
=notclkk;
else
=cnt+1;
endif;
endif;
endprocess;
integerrange0to3200000;
ifcnt<
=10000then
rst1<
1'
elsifcnt<
=20000then
=30000;
=rst;
process(das,dc)
ifdas='
dc1<
=dc;
endBehavioral;
--/*RESET.VHD*/--复位模块
entityresetis
cl,clr:
endreset;
architectureBehavioralofresetis
integerrange0to32000000;
then
clr<
cl<
ifcnt=1000000then--cnt=1000000
clr<
elsifcnt=2000000then--cnt=2000000
elsifcnt=3000000then--cnt=3000000
cl<
elsifcnt=19000000then--cnt=19000000
elsifcnt=20000000then--cnt=20000000
--/*DIV.VHD*/--串行BCD码除法模块
entitydivis
enddiv;
architectureBehavioralofdivis
typessisarray(1to8)ofstd_logic_vector(3downto0);
signals:
ss;
signala,b:
signaln:
signalc:
integerrange0to8;
signalk:
integerrange1to7;
signald:
integerrange0to1;
process(clk,k,n,c,s,bei,chu,a,b,rst)
integerrange0to31;
variablem:
std_logic_vector(3downto0);
k<
=5;
n<
=7;
c<
=8;
cnt:
m:
="
0000"
s<
=(("
),("
));
shang<
=(others=>
'
);
casekis
when1=>
ifb(31downto28)=0then
b<
=b(27downto0)&
"
ifn<
10then
n<
=n+1;
else
k<
endif;
else
k<
=2;
endif;
when2=>
ifa<
bthen
&
b(31downto4);
n<
=n-1;
ifn=0then
=3;
when3=>
ifa(cnt+3downtocnt)>
=b(cnt+3downtocnt)+dthen
a(cnt+3downtocnt)<
=a(cnt+3downtocnt)-b(cnt+3downtocnt)-d;
d<
=a(cnt+3downtocnt)+10-b(cnt+03downtocnt)-d;
=1;
ifcnt<
28then
cnt:
=cnt+4;
=4;
when4=>
m:
=m+1;
cnt:
d<
ifa<
=bthen
s(c)<
=m;
m:
ifc=1then
c<
=c-1;
ifa(31downto28)=0then
a<
=a(27downto0)&
else
b<
endif;
when7=>
ifa>
=bthen
a<
ifc>
=2then
when5=>
a<
=bei;
b<
=chu;
shang<
=s(8)&
s(7)&
s(6)&
s(5)&
s(4)&
s(3)&
s
(2)&
s
(1);
k<
=6;
dian<
=n;
n<
m:
c<
cnt:
when6=>
ifa(31downto28)=0then
=a(27
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精度 频率计 新方法
![提示](https://static.bdocx.com/images/bang_tan.gif)