[EDA课程设计报告频率计.doc
文本预览下载声明
课 程 设 计 报 告
一、设计目的和要求
课程设计目的
(1).熟悉CPLD的开发软件的基本使用。 (2).理解频率计的测量原理。 (3).掌握CPLD逻辑电路设计方法。 (4).掌握虚拟数字频率计的软件设计。
课程设计的基本要求
在CPLD中设计一个数字频率计电路,设计要求为: 测量范围:1Hz~1MHz 在CPLD中设计一个数字频率计电路,设计要求为: 测量范围:1Hz~1MHz
1)测频控制信号发射器的设计
频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。当TSTEN高电平时,允许计数;低电平时,停止计数,并保持其所计的数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进32位锁存器REG32B中,由外部的7段译码器译出并稳定显示,锁存信号之后必须有一清零信号CLR_CNT对计数器进行清零,为下一秒的计数操作作准备。
测频控制信号发生器是先建立一个由D触发器构成的二分频器,再在每次时钟CLK上沿到来时其值翻转。其中,控制信号时钟CLK的频率取1Hz,而信号TSTEN的脉宽恰好是1s,可以用做闸门信号。此时,根据测频的时序要求,可得出信号LOAD和CLR_CNT的逻辑描述。在计数完成后,即计数使能信号TSTEN在1s的高电平后,利用其反相值的上跳沿产生一个锁存信号LOAD,0.5秒后,CLR_CNT产生一个清零信号上跳沿。
寄存器REG32B的设计
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。若已有32位BCD码存在于此模块的输入口,在信号LOAD的上升沿后即被锁存到寄存器REG32B的内部,并由REG32B的输出端输出,然后由实验板上的7段译码器译成能在数码管上显示的相对应的数值。
3)十进制计数器CNT10的设计
此十进制计数器的特殊之处是,有一时钟使能输入端ENA,用于锁定当前值。当高电平时允许计数,低电平时计数禁止。
4、设计难点
在设计到最后把各个模块组到一块时,有的端口定义不太容易明确。
设计结果与分析
思路问题以及测试结果失败分析
在做组合freq的模块时,由于对每个端口不明确,所以编程时出现了错误,后来仔细的研究了每个模块的端口,然后把端口定义正确了。
然后对freq的波形图进行仿真,刚开始由于设计的频率太高了,导致在计算的时候要话费太多时间,后来经过老师提点,把end time调成8s和fsin的multipled by调成最大的32000,才把结果调小。最终的结果与理论值几乎没有误差。
程序简要说明
10进制计数器模块
library ieee;
use ieee.std_logic_1164.all;
entity cnt10 is
port(clk:in std_logic; --计数时钟信号
clr:in std_logic; --清零信号
ena:in std_logic; --计数使能信号
cq: out integer range 0 to 15; -4位计数结果输出
carry_out:out std_logic); --计数进位
end entity cnt10;
architecture art of cnt10 is
signal cqi:integer range 0 to 15;
begin
process(clk,clr,ena)is
begin
if clr=1then cqi=0; --计数器异步清零
elsif clkevent and clk=1then
if ena=1 then
if cqi=9 then cqi=cqi+1;
else cqi=0;end if; --等于9,则计数器清零
end if;
end if;
end process;
process(cqi)is
begin
if cqi=9 then carry_out=1;
else carry_out=0;end if; --进位输出
end process;
cq=cqi;
end architecture art;
在该模块下,定义了控制输入端ena和清零端clr,clk,输出端carry_out ,进数端cq。
仿真图形如下:
32
显示全部