深圳市航顺芯片技术研发有限公司
直播中

李萍

7年用户 1430经验值
私信 关注
[问答]

请问怎样去设计一种基于VHDL语言的数字频率计

什么是测频法?
怎样去设计一种基于VHDL语言的数字频率计?
如何对基于VHDL语言的数字频率计进行仿真

回帖(1)

张辉

2021-8-17 17:01:13
  随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,因此测频计常受到人们的青睐。目前许多高精度的数字频率计都采用单片机加上外部的高速计数器来实现,然而单片机的时钟频率不高导致测频速度比较慢,并且在这种设计中,由于PCB版的集成度不高,导致PCB板走线长,因此难以提高计数器的工作频率。为了克服这种缺点,大大提高测量精度和速度,我们可以设计一种可编程逻辑器件来实现数字频率计。EDA技术是以大规模可编程逻辑器件为设计载体,以硬件语言为系统逻辑描述的主要方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件设计的电子系统到硬件系统的设计,最终形成集成电子系统或专用集成芯片的一门新技术。其设计的灵活性使得EDA技术得以快速发展和广泛应用。
  以Max+PlusⅡ软件为设计平台,采用VHDL语言实现数字频率计的整体设计。伴随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。电子设计自动化是一种实现电子系统或电子产品自动化设计的技术,它与电子技术,微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。EDA的一个重要特征就是使用硬件描述语言(HDL)来完成的设计文件,VHDL语言是经IEEE确认的标准硬件语言,在电子设计领域受到了广泛的接受。
  ·测频法
  测频法的基本思想是让计数器在闸门信号的控制下计数1秒时间,计数结果是1秒内被测信号的周期数,即被测信号的频率。若被测信号不是矩形脉冲,则应先变换成同频率的矩形脉冲。测频法的原理框图如图3-1所示。
  图中,秒脉冲作为闸门信号,当其为高电平时,计数器计数;低电平时,计数器停止计数。显然,在同样的闸门信号作用下,被测信号的频率越高,测量误差越小。当被测频率一定时,闸门信号高电平的时间越长,测量误差越小。但是闸门信号周期越长,测量的响应时间也越长。例如,闸门信号高电平时间为1秒,被测信号频率的真值为2Hz,如图3-2所示。
  
  在闸门信号相同时,测频法的相对误差与被测信号的频率成反比。因此测频法适合于测量频率较高的信号。
  ·测周法
  当被测信号频率较低时,为保证测量精度,常采用测周法。即先测出被测信号的周期,再换算成频率。测周法的实质是把被测信号作为闸门信号,在它的高电平的时间内,用一个标准频率的信号源作为计数器的时钟脉冲。若计数结果为N,标准信号频率为f1,则被测信号的周期为
  T = T1·N
  被测信号的频率为
  f = 1/T1·N = f1/N
  利用测周法所产生的最大绝对误差,显然也等于±1个标准信号周期。如果被测信号周期的真值为T真= T1·N,则T测= T1·(N±1)
  σmax= (f测-f真)/ f真= T真/T测 – 1=±1/(N±1)
  由上式可知,对于一定的被测信号,标准信号的频率越高,则N的值越大,因而相对误差越小。
  ·控制信号模块
  LIBRARY IEEE;
  USE IEEE.STD_LOGIC_1164.ALL;
  USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  ENTITY TESTCTL IS
  PORT(CLKK: IN STD_LOGIC;
  CNT_EN,RST_CNT,LOAD:OUT STD_LOGIC);
  END TESTCTL;
  ARCHITECTURE BEHAVIOR OF TESTCTL IS
  SIGNAL div2clk:STD_LOGIC;
  BEGIN
  PROCESS(CLKK)
  BEGIN
  IF CLKK‘EVENT AND CLKK=’1‘ THEN
  div2clk《=NOT div2clk;
  END IF;
  END PROCESS;
  PROCESS(CLKK,div2clk)
  BEGIN
  IF (CLKK=’0‘ AND div2clk=’0‘) THEN
  RST_CNT《=’1‘;
  ELSE RST_CNT《=’0‘;
  END IF;
  END PROCESS;
  LOAD《=NOT div2clk;CNT_EN《=div2clk;
  END BEHAVIOR;
  其仿真波形如下所示:
  
  图5-3 控制模块信号仿真
  ·计数器模块
  LIBRARY IEEE;
  USE IEEE.STD_LOGIC_1164.ALL;
  USE IEEE.STD_LOGIC_ARITH.ALL;
  USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  ENTITY CNT10 IS
  PORT(CLK,RST,ENA:IN STD_LOGIC;
  OUTY:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
  COUT:OUT STD_LOGIC);
  END CNT10;
  ARCHITECTURE JISHU OF CNT10 IS
  SIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);
  BEGIN
  PROCESS(CLK,RST,ENA)
  BEGIN
  IF(RST=’1‘) THEN
  CQI《=(OTHERS=》’0‘);
  ELSIF(CLK’EVENT AND CLK=‘1’) THEN
  IF(ENA=‘1’) THEN
  IF(CQ) THEN
  CQI《
  COUT《=‘1’;
  ELSE
  CQI《=CQI+1;
  COUT《=‘0’;
  END IF;
  END IF;
  END IF;
  END PROCESS;
  OUTY《=CQI;
  END JISHU;
  其仿真如下所示:
  
  图5-4 计数器仿真模块
  ·锁存器模块设计
  LIBRARY IEEE;
  USE IEEE.STD_LOGIC_1164.ALL;
  ENTITY REG4B IS
  PORT(LOAD:IN STD_LOGIC;
  DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  DOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  END REG4B;
  ARCHITECTURE XIANSHI OF REG4B IS
  BEGIN
  PROCESS(LOAD,DIN)
  BEGIN
  IF(LOAD‘EVENT AND LOAD=’1‘) THEN
  DOUT《=DIN;
  END IF;
  END PROCESS;
  END XIANSHI;
  其仿真波形如下所示:
  
  图5-5 锁存器仿真
  本系统,我们将利用原理图的方式完成系统顶层设计。我们对每个模块生产原理图,如下所示:
  
  
  
  图5-6 系统原理图
  下面我们对几个模块进行搭建。可以得到如下的结果。
  
  图5-7 系统总体原理框图
  5.3 系统仿真
  
  图5-8 1hz信号
  
  图5-9 10hz信号
  
  图5-9 1Khz信号
举报

更多回帖

发帖
×
20
完善资料,
赚取积分