logo资料库

eda设计的数字频率计实验报告.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
一、实验目的
二、实验内容及要求
三、实验原理
四、实验仪器、材料
五、方案设计
六、实验过程及原始记录
(一)实验过程
(二)实验原始记录
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FTCTRL IS
END FTCTRL;
ARCHITECTURE behav OF FTCTRL IS
BEGIN
PROCESS( CLKK )
BEGIN
END IF;
END PROCESS;
BEGIN
IF CLKK='0' AND Div2CLK='0' THEN RST_CNT<=
ELSE RST_CNT <= '0'; END IF;
END PROCESS;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNTER16B IS
END COUNTER16B;
ARCHITECTURE behav OF COUNTER16B IS
PROCESS(FIN, CLR, ENABL)
VARIABLE CQ1:STD_LOGIC_VECTOR(3 DOWNTO 0);
VARIABLE CQ2:STD_LOGIC_VECTOR(3 DOWNTO 0);
VARIABLE CQ3:STD_LOGIC_VECTOR(3 DOWNTO 0);
VARIABLE CQ4:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF CLR='1' THEN
CQ3:=(OTHERS=>'0');
CQ4:=(OTHERS=>'0');
DOUT<=CQ4&CQ3&CQ2&CQ1;
IF ENABL='1' THEN
IF CQ1<9 THEN CQ1:=CQ1+1;
ELSE CQ1:=(OTHERS=>'0');
END IF;
ELSE CQ2:=(OTHERS=>'0');
END IF;
END IF;
ELSE CQ3:=(OTHERS=>'0');
END IF;
END IF;
ELSE CQ4:=(OTHERS=>'0');
END IF;
END IF;
END IF;
END IF;
DOUT<=CQ4&CQ3&CQ2&CQ1;
END PROCESS;
ENTITY REG16B IS
DIN : IN STD_LOGIC_VECTOR(15 DOWNT
DOUT : OUT STD_LOGIC_VECTOR(15 DOWN
END REG16B;
ARCHITECTURE behav OF REG16B IS
PROCESS(LK, DIN)
BEGIN
END IF;
END PROCESS;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FREQTEST IS
FSIN : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR(15 DOWNT
END FREQTEST;
ARCHITECTURE struc OF FREQTEST IS
END COMPONENT;
COMPONENT COUNTER16B
END COMPONENT;
COMPONENT REG16B
DIN : IN STD_LOGIC_VECTOR(15 DOWNTO 0
DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO
END COMPONENT;
SIGNAL TSTEN1 : STD_LOGIC;
SIGNAL CLR_CNT1 : STD_LOGIC;
SIGNAL DTO1 : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(6 DOWNTO
BEGIN
U1 : FTCTRL PORT MAP(CLKK =>CLK1HZ,CNT_EN=>TST
ENABL => TSTEN1, DOUT=>DTO1 );
CLK1HZ信号给的周期是2500ns FSIN信号给的周期是20ns,2500/20=125
七、实验结果及分析
(一)、代码测试部分:
(二)硬件测试部分:
八、实验体会
九、思考题
教师评阅意见: 实验成绩: 一、实验目的 签名: 年 月 日 该实验的目的是使学生进一步熟悉数字系统中较常用的频率测量方法数字频率计 的功能和要求,掌握更复杂的数字系统层次化、模块化设计方法。 二、实验内容及要求 (一)实验要求: 1. 四位十进制数字频率计; 2. 测量范围:1Hz~10kHz; 3. 显示时间不少于 1S; 4. 具有记忆显示的功能,即在测量过程中不刷新数据,等结束后才显示测量结果, 给出待测信号的频率值,并保存到下一次测量结束。 (二)实验内容: 1、根据实验要求编写出相应的模块的代码,模块有测频控制电路,计数器,锁存 器,频率顶层文件。 2、在编写好代码后,把每个模块在仿真软件 QuartusⅡ中对源程序测试仿真,然后 通过仿真的波形,来检验结果是否正确。 3、仿真结果正确后,下载到硬件上,检验结果是否正确,并与软件的测试结果进 行对比,观察在硬件上能否实现所要求的功能。 三、实验原理 根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为 1 秒 的输入信号脉冲计数允许的信号;1 秒计数结束后,计数值被锁入锁存器,计数器清 0, 为下一测频计数周期作好准备。测频控制信号可以由一个独立的发生器来产生,即原理 图中的 FTCTRL。FTCTRL 的计数使能信号 CNT_EN 能产生一个 1 秒脉宽的周期信号, 并对频率计中的 16 位二进制计数器 COUNTER16B 的 ENABL 使能端进行同步控制。 当 CNT_EN 高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止 计数期间,首先需要一个锁存信号 LOAD 的上跳沿将计数器在前 1 秒钟的计数值锁存 1
进锁存器 REG16B 中,并由外部的 16 进制 7 段译码器译出,显示计数值。设置锁存器 的好处是数据显示稳定,不会由于周期性的清 0 信号而不断闪烁。锁存信号后,必须有 一清 0 信号 RST_CNT 对计数器进行清零,为下 1 秒的计数操作作准备。 四、实验仪器、材料 1.计算机; 2.GW48-CK 实验箱。 五、方案设计 1、本次设计性实验我们组有两个成员,我主要负责测频控制电路,计数器,锁存 器三个模块的设计。 2、首先设计出原理图根据原理图设计具体方案,原理图如下: 由原理知道,测频控制电路必须有一个脉宽为 1 秒的输入信号脉冲计数允 许的信号,有一个对锁存器控制的信号,由一个对计数器清零的信号,由一个 对计数器使能的信号,所以该测控电路的实体 ENTITY 部分应该有一个输入 CLKK 和三个输出 CNT_EN、RST_CNT、Load。在结构体 ARCHITECTURE 中 实现相应的功能。 2
3、计数器的设计: 由于要求设计四位十进制数字频率计,所以计数器的输出就要求有 16 位, 每四位代表十进制的一位,每四位能从 0 计数到 9。当个位清零时,给一个信号 给十位,让十位开始计数,个位每次都清零就给十位一个信号,让十位开始计 数,而当个位和十位都清零时,给百位一个信号让百位开始计数,每次个位和 十位都清零时,就给百位一个信号,让其计数,千位也是如此,每当个位,十 位,百位都清零时,就给千位一个信号让其计数。由于要求测量范围是 1Hz~ 10kHz,所以设计的计数器最大能达到 9999HZ。没有设计最后的进位端。 综上所述,计数器的实体 ENTITY 部分要有三个输入即:待测信号 FIN, 使能端 ENABL,清零端 CLR。而输出要是一个 16 位的标准逻辑矢量。具体的 计数功能在结构体 ARCHITECTURE 中实现。 4、我在设计好这二个模块后,由我的同组成员设计顶层文件和锁存器。引脚的 配置等工作由我们一起完成,然后我们一起讨论和研究结果正确与否。 六、实验过程及原始记录 (一)实验过程 1、将写好的代码在 QuartusⅡ中仿真调试,对每个模块进行仿真,观察波形是否 正确,然后再对顶层文件仿真,观察是否实现了所要求的频率计的功能。 2、配好引脚编译后,下载到硬件进行测试,输入不同的频率,观察是否是数字 频率计。 (二)实验原始记录 1、原始代码: (1)测频控制电路模块 LIBRARY IEEE; --测频控制电路 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FTCTRL IS PORT (CLKK : IN STD_LOGIC; CNT_EN : OUT STD_LOGIC; RST_CNT : OUT STD_LOGIC; Load : OUT STD_LOGIC ); END FTCTRL; ARCHITECTURE behav OF FTCTRL IS SIGNAL Div2CLK : STD_LOGIC; -- 1Hz -- 计数器时钟使能 -- 计数器清零 -- 输出锁存信号 3
BEGIN PROCESS( CLKK ) BEGIN IF CLKK'EVENT AND CLKK = '1' THEN -- 1Hz 时钟 2 分频 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 behav; (2)、计数器的模块: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNTER16B IS --16 位计数器 PORT (FIN:IN STD_LOGIC; CLR:IN STD_LOGIC; ENABL:IN STD_LOGIC; DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); -- 计数结果 -- 时钟信号 -- 清零信号 -- 计数使能信号 END COUNTER16B; ARCHITECTURE behav OF COUNTER16B IS BEGIN PROCESS(FIN, CLR, ENABL) VARIABLE CQ1:STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE CQ2:STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE CQ3:STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE CQ4:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR='1' THEN CQ1:=(OTHERS=>'0'); -- 清零 4
CQ2:=(OTHERS=>'0'); CQ3:=(OTHERS=>'0'); CQ4:=(OTHERS=>'0'); DOUT<=CQ4&CQ3&CQ2&CQ1; ELSIF FIN'EVENT AND FIN='1' THEN -- 个位开始计数 IF ENABL='1' THEN IF CQ1<9 THEN CQ1:=CQ1+1; ELSE CQ1:=(OTHERS=>'0'); END IF; IF CQ1=0 THEN IF CQ2<9 THEN CQ2:=CQ2+1; ELSE CQ2:=(OTHERS=>'0'); --十位开始计数 END IF; END IF; IF CQ2=0 AND CQ1=0 THEN IF CQ3<9 THEN CQ3:=CQ3+1; ELSE CQ3:=(OTHERS=>'0'); END IF; END IF; IF CQ3=0 AND CQ2=0 AND CQ1=0 THEN --百位开始计数 IF CQ4<9 THEN CQ4:=CQ4+1; ELSE CQ4:=(OTHERS=>'0'); END IF; END IF; END IF; END IF; DOUT<=CQ4&CQ3&CQ2&CQ1; END PROCESS; END behav; (3)锁存器模块: 该部分代码不是我编写的,是同组成员所写: LIBRARY IEEE; --16 位锁存器 USE IEEE.STD_LOGIC_1164.ALL; --是千位开始计数 5
ENTITY REG16B IS PORT ( LK : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(15 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ); END REG16B; ARCHITECTURE behav OF REG16B IS BEGIN PROCESS(LK, DIN) BEGIN IF LK'EVENT AND LK = '1' THEN DOUT <= DIN; END IF; END PROCESS; END behav; (4)顶层文件 该部分代码也不是我编写的,是同组成员所写: LIBRARY IEEE; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY FREQTEST IS --频率计顶层文件 PORT ( CLK1HZ : IN STD_LOGIC; FSIN : IN STD_LOGIC; DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ); END FREQTEST; ARCHITECTURE struc OF FREQTEST IS COMPONENT FTCTRL PORT (CLKK : IN STD_LOGIC; CNT_EN : OUT STD_LOGIC; RST_CNT : OUT STD_LOGIC; Load : OUT STD_LOGIC ); END COMPONENT; COMPONENT COUNTER16B PORT (FIN : IN STD_LOGIC; CLR : IN STD_LOGIC; ENABL : IN STD_LOGIC; -- 1Hz -- 计数器时钟使能 -- 计数器清零 -- 输出锁存信号 -- 时钟信号 -- 清零信号 -- 计数使能信号 6
DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); -- 计数结果 END COMPONENT; COMPONENT REG16B PORT ( LK : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(15 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ); END COMPONENT; SIGNAL TSTEN1 : STD_LOGIC; SIGNAL CLR_CNT1 : STD_LOGIC; SIGNAL Load1 : STD_LOGIC; SIGNAL DTO1 : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(6 DOWNTO 0); BEGIN U1 : FTCTRL PORT MAP(CLKK =>CLK1HZ,CNT_EN=>TSTEN1, RST_CNT =>CLR_CNT1,Load =>Load1); U2 : U3 : REG16B PORT MAP( LK => Load1, DIN=>DTO1, DOUT => DOUT); COUNTER16B PORT MAP( FIN => FSIN, CLR => CLR_CNT1, ENABL => TSTEN1, DOUT=>DTO1 ); END struc; 2、仿真的波形 (1)测频控制电路的波形: 7
(2)、计数器的波形: (3)锁存器波形: (4)顶层文件的波形:即最后观察是否实现了设计功能的波形 CLK1HZ 信号给的周期是 2500ns FSIN 信号给的周期是 20ns,2500/20=125 8
分享到:
收藏