VHDL数字频率计的设计
一.实验目的
二.实验内容
三.实验设计
四.实验步骤
五.实验结果
一.目的
1.学习Quartus Ⅱ/ISE Design Suite软件的基本使用方法。
2.熟悉GW48系列或其他EDA实验开发系统的基本使用方法。
3.学习VHDL基本逻辑电路的综合设计应用。
二.内容
设计并调试好8位十进制数字频率计,并用GW48系列或其他EDA实验开发系统进行硬件验证,具体包括系统结构设计、VHDL程序设计、程序仿真与分析、逻辑综合分析、硬件逻辑验证等内容。
三.设计
总体设计:设计一个8位十进制数字频率计,编写底层文件十进制计数器的源程序CNT10.VHD,编写分频器的源程序CLKGEN.VHD,动态扫描的源程序CTRLS.VHD,动态计数的源程序DISPLAY.VHD,寄存器源程序REG32B.VHD,以及计数使能信号源程序TESTCTL.VHD,由模块构成顶层电路数字频率计的源程序FREQ.VHD,其中底层和顶层电路均采用VHDL文本输入。
设计思路:数字频率计数器其功能是测出某个频率的大小。
频率 = 上升沿脉冲个数 / T , 当T等于1s时候,则频率=上升沿脉冲个数,故测出上升沿脉冲个数,此实验通过一个分配器的操作来达到输出的周期时间为1S。当TSTEN高电平时,允许计数;低电平时,停止计数,并保持其所计的数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进32位锁存器REG32B中,由外部的7段译码器译出并稳定显示。锁存信号之后,必须有一清零信号CLR_CNT对计数器进行清零,为下一秒钟的计数操作做准备。为了产生这个时序图,需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上沿到来时其值翻转。其中,控制信号时钟CLK的频率取1Hz,而信号TSTEN的脉冲恰好为1s,可以用作阀门信号,此时,根据测频的时序要求,可得出信号LOAD和CLR_CNT的逻辑描述
1、用8个CNT10来表示数字进位,利用分频器进行分频
图1基本方案演示
2、CLKGEN分频器分析,这里注意的是我选择的时钟是内部时钟50M,为了产生1s的时钟周期,我需要对其进行5M分频,但是为了能够波形仿真,所以还使用了一个分频常数小的分频器。利用动态扫描和动态计数的方式在数码管上显示,可以动态的显示数字变化,达到频率计的功能。
图2 原理图
四 .步骤
- 分析:利用quartus软件编写底层源程序:编写底层文件十进制计数器的源程序CNT10.VHD,编写分频器的源程序CLKGEN.VHD,动态扫描的源程序CTRLS.VHD,动态计数的源程序DISPLAY.VHD,寄存器源程序REG32B.VHD,以及计数使能信号源程序TESTCTL.VHD,由模块构成顶层电路数字频率计的源程序FREQ.VHD,其中底层和顶层电路均采用VHDL文本输入。
2、文件及工程的建立,用VHDL文件编辑好各个模块的源程序,工程编译观察工程是否实现
图5.1 编译程序结果图
3、工程仿真,建立仿真文件,观察仿真结果
对TESTCTL仿真:
图5.2 TESTCTL波形仿真图
TESTCTL是计数使能信号,控制计数器,锁存器及清零何时工作。TSTEN和LOAD的波形是相反的,由于计数器在工作的时候锁存器并不工作,而计数器不工作的时候,LOAD为1代表锁存器开始工作,也可以看到CLR清零信号在TSTEN和CLK为0的时候来到一个上朓沿,代表进行清零,其中CLK有部分时间的延迟证明了信号的延迟特性。
对FREQ进行波形仿真:
图5.3 FREQ波形仿真图
为了能够让波形能够显示出来,除了将DOUT设为可读之外,还需要将分频常数减小,为了达到测评的效果,将测试频率FSIN设置为2种不同的频率,通过GOUT得出被测频率的大小,其中COM为数码管的公共端,依次动态点亮,其中DOUT的数值对应SEG中数码管的八段管显示。
4、芯片管脚的锁定:
选择硬件相关的芯片EP3C55F484并对程序进行引脚锁定,对应给的常用的引脚锁定图进行锁定。选择好按键和时钟的引脚锁定,其数码管以常用的进行锁定。
图5.4 引脚锁定图
管脚锁定依照图5.5
图5.5管脚锁定依据图
- 逻辑综合结果,查看程序RTL仿真图,熟悉整体电路状态。
图5.6 程序RTL视图
- 编程下载及验证,硬件验证功能是否实现
图5.7 硬件验证
五.结果分析
- 测频结果
可以看出测试结果与被测频率之间有一定的误差,其主要原因是硬件存在信号的传输,所以有一定的延迟特性。
图6. 7 频率计测频结果
2. 源代码分析
--CLKGEN的源程序
--CLKGEN
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CLKGEN IS
PORT(CLK: IN STD_LOGIC;
NEWCLK: OUT STD_LOGIC);
END ENTITY CLKGEN;
ARCHITECTURE ART OF CLKGEN IS
--SIGNAL CNT: INTEGER RANGE 0 TO 10#49999999#;
SIGNAL CNT: INTEGER RANGE 0 TO 10#1#;
BEGIN
PROCESS(CLK) IS
BEGIN
IF CLK'EVENT AND CLK='1' THEN
--IF CNT=10#49999999# THEN CNT<=0;
IF CNT=10#1# THEN CNT<=0;
ELSE CNT<=CNT+1;
END IF;
END IF;
END PROCESS;
PROCESS(CNT) IS
BEGIN
--IF CNT=10#49999999# THEN NEWCLK<='1';
IF CNT=10#1# THEN NEWCLK<='1';
ELSE
NEWCLK<='0';
END IF;
END PROCESS;
END ARCHITECTURE ART;
-- REG32B的源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG32B IS
PORT(LOAD:IN STD_LOGIC; --为1时候代表锁存器工作
DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0); --DIN是计数结果
DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END ENTITY REG32B;
ARCHITECTURE ART OF REG32B IS
BEGIN
PROCESS(LOAD,DIN)IS
BEGIN
IF(LOAD'EVENT AND LOAD='1')THEN
DOUT<=DIN;
END IF;
END PROCESS;
END ARCHITECTURE ART;
-- TESTCTL的源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TESTCTL IS
--其中clk信号由分配器产生
PORT(CLK: IN STD_LOGIC;
TSTEN: OUT STD_LOGIC; --输出时钟信号,用于控制计数器
CLR_CNT: OUT STD_LOGIC; --清零信号,用于清除计数器数据
LOAD: OUT STD_LOGIC); --用于发送给寄存器用于存储数据,其中电平波形于TSTEN相反
END ENTITY TESTCTL;
ARCHITECTURE ART OF TESTCTL IS
SIGNAL DIV2CLK : STD_LOGIC; --2分频时钟信号
BEGIN
PROCESS(CLK) IS
BEGIN
IF CLK'EVENT AND CLK='1' THEN
DIV2CLK<= NOT DIV2CLK; --进行一个翻转
END IF;
END PROCESS;
PROCESS(CLK,DIV2CLK) IS
BEGIN
IF CLK='0'AND DIV2CLK='0' THEN
CLR_CNT<='1';
ELSE CLR_CNT <='0';
END IF;
END PROCESS;
LOAD<=NOT DIV2CLK;
TSTEN <= DIV2CLK;
END ARCHITECTURE ART;
-- FREQ的源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; --六号口为被测频率口,8号口为动态扫描的端口
ENTITY FREQ IS
PORT(FSIN:IN STD_LOGIC;
CLK:IN STD_LOGIC;
CLK2:IN STD_LOGIC;
DOUT:BUFFER STD_LOGIC_VECTOR(31 DOWNTO 0);
COM:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
SEG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ENTITY FREQ;
ARCHITECTURE ART OF FREQ IS
COMPONENT CNT10 IS
PORT(CLK:IN STD_LOGIC;
CLR:IN STD_LOGIC;
ENA:IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
CO:OUT STD_LOGIC);
END COMPONENT CNT10;
COMPONENT REG32B IS
PORT(LOAD:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);
DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END COMPONENT REG32B;
COMPONENT TESTCTL IS
PORT(CLK:IN STD_LOGIC;
TSTEN:OUT STD_LOGIC;
CLR_CNT:OUT STD_LOGIC;
LOAD:OUT STD_LOGIC);
END COMPONENT TESTCTL;
COMPONENT CLKGEN IS
PORT(CLK: IN STD_LOGIC;
NEWCLK: OUT STD_LOGIC);
END COMPONENT CLKGEN;
COMPONENT CTRLS IS
PORT(CLK:IN STD_LOGIC;
SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END COMPONENT CTRLS;
COMPONENT DISPLAY IS
PORT(SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
DATAIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);
COM:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
SEG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT DISPLAY;
SIGNAL SD:STD_LOGIC_VECTOR(31 DOWNTO 0);
--SIGNAL DOUT:STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL S0,S1,S2,S3,S4,S5,S6,S7,S8,SC,SE,SL:STD_LOGIC;
SIGNAL S9:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
U0:CLKGEN PORT MAP(CLK=>CLK,NEWCLK=>S0);
U1:TESTCTL PORT MAP(CLK=>S0,TSTEN=>SE,CLR_CNT=>SC,LOAD=>SL);
U2:CNT10 PORT MAP(FSIN,SC,SE,SD(3 DOWNTO 0),S1);
U3:CNT10 PORT MAP(S1,SC,SE,SD(7 DOWNTO 4),S2);
U4:CNT10 PORT MAP(S2,SC,SE,SD(11 DOWNTO 8),S3);
U5:CNT10 PORT MAP(S3,SC,SE,SD(15 DOWNTO 12),S4);
U6:CNT10 PORT MAP(S4,SC,SE,SD(19 DOWNTO 16),S5);
U7:CNT10 PORT MAP(S5,SC,SE,SD(23 DOWNTO 20),S6);
U8:CNT10 PORT MAP(S6,SC,SE,SD(27 DOWNTO 24),S7);
U9:CNT10 PORT MAP(S7,SC,SE,SD(31 DOWNTO 28),S8);
U10:REG32B PORT MAP(SL,SD(31 DOWNTO 0),DOUT);
U11:CTRLS PORT MAP(CLK2,S9);
U12:DISPLAY PORT MAP(S9,DOUT,COM,SEG);
END ARCHITECTURE ART;
VHDL数字频率计的设计相关推荐
- VHDL实现数字频率计的设计
VHDL实现数字频率计的设计 一.设计要求 二.设计原理 三.代码实现 1.CLKOUT.VHD 2.MUX.VHD 3.TELTCL.VHD 4.CNT10.VHD 5.SEG32B.VHD 6.D ...
- 基于matlab的数字频率计设计 --毕业论文,等精度数字频率计的设计和分析开题报告_毕业论文范文网-论文范文...
毕业论文范文题目:等精度数字频率计的设计和分析开题报告(一),论文范文关键词:等精度数字频率计的设计和分析开题报告(一) 等精度数字频率计的设计和分析开题报告(一)毕业论文范文介绍开始: 1.本课题的 ...
- VHDL电子密码锁设计
主要内容: 采用先进的EDA技术,利用MAX+PLUSⅡ工作平台和VHDL语言,设计一种新型的电子密码锁.该密码锁具有密码预置和误码报警等功能,用一片FPGA芯片实现. 摘要 本文介绍一种利用EDA技 ...
- 计算机组成原理电子时钟设计与实现,《计算机组成原理》课程设计报告-基于VHDL数字电子钟设计与实现.doc...
<计算机组成原理>课程设计报告-基于VHDL数字电子钟设计与实现 长沙理工大学 <计算机组成原理>课程设计报告 XXX 学 院 计算机与通信工程 专 业 网络工程 班 级 网络 ...
- 单片机c语言数字频率计课程设计,单片机数字频率计设计和调试 课程设计论文...
引言 在电子测量领域中,频率测量的精确度是最高的,可达10至10 1.001.jpg (946 Bytes, 下载次数: 30) 2017-2-11 03:25 上传 数量级.因此,在生产过程中许多物 ...
- 左移寄存器vhdl_基于VHDL的移位寄存器设计
摘 要 本文通过对EDA和VHDL的简单说明,阐述了基于 VHDL硬件描述语言的移位寄存器设计方法,程序简单,在电子 设计中有一定的推广价值. 关键词 移位寄存器 设计 EDA VHDL 随着 ...
- 基于51单片机数字频率计的设计与实现
目录 第一章 系统原理与总体设计 1.1系统组成 1.2系统原理 1.3测量原理 1.4频率测量与总体设计 第二章 硬件电路设计 2.1硬件电路框图 2.2数字频率计原理图 2.3硬件电路设计 第三章 ...
- 基于51单片机数字频率计仿真设计(proteus仿真+程序+原理图+参考报告+器件清单)
51单片机数字频率计仿真设计 51单片机数字频率计仿真设计 主要功能 任务书 实物图 仿真图 原理图 信号采集模块 脉冲产生模块 分频模块 程序 设计报告 全部参考资料 资料下载链接 51单片机数字频 ...
- VHDL移位寄存器的设计与实现
主要内容: 本设计根据计算机组成原理中移位寄存器的相关知识,利用VHDL语言设计了三种不同的寄存器:双向移位寄存器.串入串出(SISO)移位寄存器.串入并出(SIPO)移位寄存器. 摘要:系统使用ED ...
最新文章
- Java笔记(25):设计模式概述
- 最长上升子序列之基础
- AngularJS 使用$sce控制代码安全检查
- k8s kubesphere启用可插拔组件(安装前、后均可)
- php 安装rabbitmq扩展无报错版
- 设计模式——创建型模型
- ElementUI + express实现头像上传及后台图片保存
- 炫彩渐变液态海报设计,太skr了!
- 周爱民:真正的架构师是没有title的(图灵访谈)
- notePad++安装及json,xml格式化插件安装
- Vant Weapp - 有赞出品的免费开源微信小程序组件库
- 最新抓包工具BurpSuite2022.2.3 pj版
- Windows微信刷朋友圈
- 如何使用repo管理本地私有仓库
- 阿拉伯数字中文oracle,【oracle】中文数字转阿拉伯数字
- 你见过最心酸的事是什么?
- 将音频转化为MP3格式(lame库)
- Spring Boot教程(四十)使用Flyway来管理数据库版本
- Mythtype公式对齐和分栏分节符后删除空白页
- Unity 开发总结之onValueChanged事件
热门文章
- 实时油价接口 按城市检索加油站
- 岁月让我们学会了选择与放弃
- 一文读懂阿里云挑战 AWS 的底气 | 2018•大复盘
- “温暖中国--贫困民工患病子女生命救助行动”系列活动
- 今年9月开学!香港科技大学(广州)人工智能专业已开始招生!
- std::string int 转换
- Navigation组件的使用详解
- 机构称谷歌新闻业务2018收入47亿美元 谷歌:计算方法有误
- 波士顿大学计算机科学研究生,波士顿大学计算机科学硕士专业
- 西安音乐学院人计算机学院,西安音乐学院.我校5部作品“中国大学生计算机设计大赛”获奖...