论坛风格切换切换到宽版
发帖 回复
返回列表  提醒:不能用迅雷等P2P下载,否则下载失败标(二级)的板块,需二级才能下载,没二级不要购买,下载不了
  • 3253阅读
  • 0回复

[技术文章]FPGA学习——等精度测频(转) [复制链接]

上一主题 下一主题
离线2dmin
 

性别:
帅哥
发帖
15760
金币
13894
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看楼主 倒序阅读 使用道具 0楼 发表于: 2012-08-25
RO.GD$ 3n  
由于最近一直在与队员一起攻克题目,所以没时间写博客,现在把最近做的东西总结一下,希望对大家有帮助。 n[DQ5l  
以前一直是用测频率法来测信号的频率,就是在一秒内测被测频率的个数,即为频率,这种方法在高频时还行,低频就误差比较大,无论是用FPGA还是单片机都差不多,所以我们这次用了一种相对更精确的测量方法——等精度测频法,主导思想是利用一个D触发器保证测量时间是被测频率的整数倍,对被测频率和基准频率进行计数,利用计数值求出被测频率,这种方法在高频低频段均适用,由于测量误差只与基准频率和闸门时间有关,与被测频率无关,故称之为等精度测频。 Z3jh-{0  
由于FPGA对数据处理有困难,所以我们用FPGA计数,然后把数据传给单片机处理,显示数据。我们这次的测频范围为0.01HZ到50MHZ,精确到小数点后两位,测频误差在10的-5次方以下。 GVS-_KP\  
我做的是FPGA的部分,先附上思路: -+MGs]),  
等精度测频就是对基准频率和待测频率在一段时间内分别计数,通过一个D触发器确保计数时间是待测频率的整数倍,系统的误差只与门控时间和基准频率有关,与待测频率无关,达到等精度测频的目的。计数器是用两个32位二进制计数器,通过一个3—8选择器把64位变成8位,传给单片机,经单片机处理后恢复出两个计数值,计算出频率。 fXfBDB  
RTL图 _ nFsC  
附上程序,欢迎探讨 s}"5uDfn1F  
分频模块——产生基准频率1MHZ方波 FyD^\6/x  
LIBRARY IEEE; VG FWF3s  
USE IEEE.STD_LOGIC_1164.ALL; qkQ _#  
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 7 0pt5O3]  
ENTITY FENPIN IS OS|uZ<"Rq3  
PORT( '2)c;/-E  
CLK:IN STD_LOGIC; %f??O|O3  
CLOCK:OUT STD_LOGIC T'YHV}b}vX  
); &G63ReW7 @  
END ENTITY; >JdA,i}1  
ARCHITECTURE ART OF FENPIN IS CbPCj.MH  
SIGNAL COUNT :INTEGER RANGE 0 TO 10#49#; Qa*?iD  
BEGIN @L?X}'0xI4  
PROCESS(CLK)IS fpMnA  
BEGIN ?naPti1GX  
IF(CLK'EVENT AND CLK='1')THEN iV+'p->/  
IF(COUNT=10#49#)THEN COUNT<=0; 6 0C;J!D  
ELSE COUNT<=COUNT+1; Q2^~^'Y k  
END IF; 'p0|wM_  
END IF; VjZ_L_U}  
END PROCESS; 38Rod]\E  
PROCESS(COUNT)IS 8R !3}kx  
BEGIN aJh=4j~.  
IF(COUNT>=10#24#)THEN >)5=6{x  
CLOCK<='1'; \Xy]z  
ELSE CLOCK<='0'; {8L)Fw  
END IF; [h"#Gwb=;  
END PROCESS;  ?gZJ v  
END ARCHITECTURE; -KzU''  
D触发器模块——保证测量时间是被测频率整数倍 \)?mIwo7~  
LIBRARY IEEE; {sn:Lj0  
USE IEEE.STD_LOGIC_1164.ALL; e[`E-br^  
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 'vgO`  
ENTITY DCHUFA IS /t "p^9!^  
PORT( XBJ9"G5  
CLK:IN STD_LOGIC; WW.\5kBl8  
CLR:IN STD_LOGIC; m>po+7"b  
D:IN STD_LOGIC; sOyWsXd+R'  
Q:OUT STD_LOGIC 5f54E|vD  
); iEDZ\\,  
END ENTITY; lHYu-}TNP  
ARCHITECTURE ART OF DCHUFA IS = mn jIp  
SIGNAL Q1:STD_LOGIC; fVR:m`'Iq_  
BEGIN {d|R67~V  
PROCESS(CLR,CLK) V<} ^n  
BEGIN $Cu/!GA4.>  
IF(CLR='0')THEN Q1<='0'; %}z/_QZ  
ELSE IF(CLK'EVENT AND CLK='1')THEN E\M{/.4 4  
Q1<=D; *%0f^~!G<p  
END IF; 4SG22$7W  
END IF; )p.+39]{2  
END PROCESS; ?FRR";  
Q<=Q1; T7;)HFGeW  
END ARCHITECTURE; v}6YbY Tq  
计数模块 o3H+.u$  
LIBRARY IEEE; 0F'75  
USE IEEE.STD_LOGIC_1164.ALL; d}f| HOFq  
USE IEEE.STD_LOGIC_UNSIGNED.ALL; -`e=u<Y9@  
ENTITY JISHU IS fgxsC7P$  
PORT( 0XlX7Sk+  
CLK:IN STD_LOGIC; '-#6;_ i<  
CLR,ENA:IN STD_LOGIC; W7N Hr5RC  
OQ:OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ;WIL?[;w  
); ~qNpPIrGr  
END ENTITY; oH+UuP2a-J  
ARCHITECTURE ART OF JISHU IS oeXNb4; 4  
SIGNAL TMP:STD_LOGIC_VECTOR(31 DOWNTO 0); dRZor gar  
BEGIN ";~}"Yz?[  
PROCESS(CLK,CLR,ENA)IS }iy`Ko+B"b  
BEGIN dE5DH~ldV  
IF(CLR='0')THEN TMP<="00000000000000000000000000000000"; MCma3^/1  
ELSIF(ENA='1')THEN Q6S[sTKR  
IF(CLK'EVENT AND CLK='1')THEN f{e*R#+&  
TMP<=TMP+1; ADX}  
END IF; Q}jbk9gM5  
END IF; ^ v3+w"2  
END PROCESS; )!dELS \ix  
PROCESS(ENA) $52Te3n  
BEGIN sF;1)7]Pq  
IF ENA'EVENT AND ENA='0' THEN ?Di, '  
OQ<=TMP; K/[v>(<  
END IF; k?Jzy  
END PROCESS; }wR)p  
END ARCHITECTURE; BO\l>\)Ir  
64转8模块——方便单片机读取数据 '$)Wp_  
LIBRARY IEEE; >Z^7=5K"O  
USE IEEE.STD_LOGIC_1164.ALL; 2h&pm   
USE IEEE.STD_LOGIC_UNSIGNED.ALL; I#l9  
ENTITY JISHU IS [[D}vL8d  
PORT( "!)8bTW  
CLK:IN STD_LOGIC; \Y9=d E}  
CLR,ENA:IN STD_LOGIC; ~E^EF{h   
OQ:OUT STD_LOGIC_VECTOR(31 DOWNTO 0) Y tGH>0}h  
); @6*<Xs =  
END ENTITY; af{;4Cr  
ARCHITECTURE ART OF JISHU IS hl~(&D1^  
SIGNAL TMP:STD_LOGIC_VECTOR(31 DOWNTO 0); |iM*}Ix-  
BEGIN mC~W/KReA  
PROCESS(CLK,CLR,ENA)IS dab>@z4  
BEGIN mS~3QV  
IF(CLR='0')THEN TMP<="00000000000000000000000000000000"; `j>qOT  
ELSIF(ENA='1')THEN 5, Yk5?l<'  
IF(CLK'EVENT AND CLK='1')THEN |0f\>X I  
TMP<=TMP+1; any\}   
END IF; *ep!gT*4  
END IF; #bu`W!p}  
END PROCESS; =< CH(4!  
PROCESS(ENA) |r-<t  
BEGIN 4)j<(5  
IF ENA'EVENT AND ENA='0' THEN n+GCL+Mo  
OQ<=TMP; rvE!Q=y~  
END IF; M/V >25`  
END PROCESS; x6DH0*[.  
END ARCHITECTURE; L&3=5Bf9  
顶层模块 ^DZiz[X+|  
LIBRARY IEEE; \yG_wZs  
USE IEEE.STD_LOGIC_1164.ALL; 4kXx(FE  
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 5!nZvv  
ENTITY FENPIN IS 7 oZ-D~3  
PORT( p'w[5'  
CLK:IN STD_LOGIC; `MTOe 1  
CLOCK:OUT STD_LOGIC l"*>>/U k  
); &I(|aZx?J  
END ENTITY; 0jq&i#yNB  
ARCHITECTURE ART OF FENPIN IS i0AC.]4e"  
SIGNAL COUNT :INTEGER RANGE 0 TO 10#49#; ^|sxbP  
BEGIN I:6xDDpZG`  
PROCESS(CLK)IS +}+hTY$a  
BEGIN !Rb7q{@>  
IF(CLK'EVENT AND CLK='1')THEN wFqz.HoB  
IF(COUNT=10#49#)THEN COUNT<=0; =m/2)R{  
ELSE COUNT<=COUNT+1; E"G. _<3J8  
END IF; g<.8iW 'c  
END IF; /asyj="N7  
END PROCESS; 3F.O0Vz  
PROCESS(COUNT)IS >a4Bfnf"eI  
BEGIN },Z -w_H  
IF(COUNT>=10#24#)THEN JAiV7v4&R  
CLOCK<='1'; ] lO$oO  
ELSE CLOCK<='0'; k6Tpaf^  
END IF; O_iX 1@SW  
END PROCESS; gdG: &{|x  
END ARCHITECTURE;


评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

一般

差劲
快速回复
限150 字节
 
上一个 下一个