原创 等精度数字频率计

2009-6-9 21:55 4345 6 12 分类: FPGA/CPLD

doc最近在做课程设计,题目是等精度的数字频率计,我们队用FPGA和51单片机结合的1602液晶显示的方法,终于实现了,等精度就是等精度,误差比纯单片机实现的频率计好太多了,由于实验室的信号源只有3MHZ的产生信号,我们暂时只能测试了3M左右,精度达到千分之一,按原理来看应该至少可以测到<50MHZ的.现在先将FPGA部分的程序贴出来.


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;


entity pinlvji is


 port(
   bclk : in std_logic;
   tclk : in std_logic;
   clr  : in std_logic;
   cl   : in std_logic;
   spul : in std_logic;
   start: out std_logic;
   eend : out std_logic;
   sel  : in std_logic_vector(2 downto 0);
   data : out std_logic_vector(7 downto 0));
 end pinlvji;
 
architecture behav of pinlvji is


 signal bzq,tsq : std_logic_vector(31 downto 0);
 signal ena,pul : std_logic;
 signal ma,clk1,clk2,clk3 :std_logic;
 signal q1,q2,q3,bena :std_logic;
 signal ss : std_logic_vector(1 downto 0);


   begin
 start <= ena;
 data  <=bzq(7 downto 0)  when sel="000"  else
    bzq(15 downto 8)  when sel="001"  else
    bzq(23 downto 16)  when sel="010"  else
    bzq(31 downto 24)  when sel="011"  else
    tsq(7 downto 0)    when sel="100"  else
    tsq(15 downto 8)   when sel="101"  else
    tsq(23 downto 16)  when sel="110"  else
    tsq(31 downto 24)  when sel="111"  else
    tsq(31 downto 24);
  
 bzh : process(bclk,clr)
   begin
    if clr='1' then bzq<=(others=>'0');
    elsif bclk'event and bclk='1'  then
     if bena ='1' then bzq<=bzq+1;
     end if;
    end if;
   end process;
 
 tf : process(tclk,clr,ena)
   begin
    if clr='1' then tsq<=(others=>'0');
    elsif tclk'event and tclk='1'  then
     if ena ='1' then tsq<=tsq+1;
     end if;
    end if;
   end process;
   
 process(tclk,clr)
  begin
   if clr='1' then ena<='0';
   elsif tclk'event and tclk ='1' then ena<=cl;
   end if;
  end process;
  
 ma<=(tclk and cl) or not(tclk or cl);
 clk1<= not ma; clk2<=ma and q1; clk3<= not clk2; ss<= q2& q3;
 
 dd1 : process(clk1,clr)
  begin
   if clr='1' then q1<='0';
   elsif clk1'event and clk1='1' then q1<='1';
   end if;
  end process;
 dd2 : process(clk2,clr)
     begin
   if clr='1' then q2<='0';
   elsif clk2'event and clk2='1' then q2<='1';
   end if;
  end process;
 
 dd3 : process(clk3,clr)
     begin
   if clr='1' then q3<='0';
   elsif clk3'event and clk3='1' then q3<='1';
   end if;
  end process;
  
 pul  <='1'  when ss="10"  else
     '0';
 eend <='1'  when ss="11" else
     '0';
 bena <=ena  when spul='1' else
     pul  when spul='0' else
     pul;
  
end behav;       
     
       
  
  
    
   

文章评论6条评论)

登录后参与讨论

用户373365 2011-8-27 19:19

能不能给我给完整的程序呀?wnwhss@whu.edu.cn

用户205130 2009-6-8 18:58

有没完整的啊。。急用!!

用户176734 2009-5-15 09:34

你的单片机是怎样从那边读取数据的呢?我想要一份单片机的程序看看,谢啦!belimaru@163.com 要是用汇编写的我就不要了,看不太懂。最好是C写的。

jizzll_617398179 2009-3-1 21:06

不知道你的FPGA和单片机分别完成什么功能?能提供一份单片机的程序么?jizzll@126.com

用户123067 2008-5-5 21:04

用FPGA来做1602的显示有些麻烦,我的显示部分是交给51单片机来做的,我这里有的也只是网上用1602显示'年'字的程序.

用户1336714 2008-5-5 08:48

我现在在写FPGA驱动液晶 不知道怎么写 能不能把你的程序给我观摩一下 我的QQ:493100062
相关推荐阅读
用户123067 2012-10-24 22:08
20121024-Nios2 Flash Programmer演示 (二)
25: 注意,此次使用的软件打开时出现的是下面这个Eclipse的紫色图,如果是下面的这个蓝色图,表示软件打开错误了。 26: 27: 28: 29:修改C程序如下图所示,点亮或熄灭所...
用户123067 2012-10-24 22:02
20121024-Nios2 Flash Programmer演示 (一)
/*****************************************************************************   名称:20121024-Nios...
用户123067 2009-06-09 21:52
quartus5.1的安装方法和licence
https://static.assets-stash.eet-china.com/album/old-resources/2009/6/9/1363e5ed-73cb-4b27-b4c6-d51b8...
用户123067 2009-06-09 21:43
基于FPGA的函数信号发生器
https://static.assets-stash.eet-china.com/album/old-resources/2009/6/9/31624017-9293-4e1b-8a00-c4ac5...
用户123067 2009-06-09 20:58
modelsim安装方法
1  Modelsim安装步骤<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />此处以...
我要评论
6
6
关闭 站长推荐上一条 /2 下一条