• 一.实验目的

  • 二.实验内容

  • 三.实验设计

  • 四.实验步骤

  • 五.实验结果

  • 一.目的

  • 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    原理图

四 .步骤

  1. 分析:利用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管脚锁定依据图

  1. 逻辑综合结果,查看程序RTL仿真图,熟悉整体电路状态。

图5.6  程序RTL视图

  1. 编程下载及验证,硬件验证功能是否实现

图5.7 硬件验证

五.结果分析

  1. 测频结果

可以看出测试结果与被测频率之间有一定的误差,其主要原因是硬件存在信号的传输,所以有一定的延迟特性。

图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数字频率计的设计相关推荐

  1. VHDL实现数字频率计的设计

    VHDL实现数字频率计的设计 一.设计要求 二.设计原理 三.代码实现 1.CLKOUT.VHD 2.MUX.VHD 3.TELTCL.VHD 4.CNT10.VHD 5.SEG32B.VHD 6.D ...

  2. 基于matlab的数字频率计设计 --毕业论文,等精度数字频率计的设计和分析开题报告_毕业论文范文网-论文范文...

    毕业论文范文题目:等精度数字频率计的设计和分析开题报告(一),论文范文关键词:等精度数字频率计的设计和分析开题报告(一) 等精度数字频率计的设计和分析开题报告(一)毕业论文范文介绍开始: 1.本课题的 ...

  3. VHDL电子密码锁设计

    主要内容: 采用先进的EDA技术,利用MAX+PLUSⅡ工作平台和VHDL语言,设计一种新型的电子密码锁.该密码锁具有密码预置和误码报警等功能,用一片FPGA芯片实现. 摘要 本文介绍一种利用EDA技 ...

  4. 计算机组成原理电子时钟设计与实现,《计算机组成原理》课程设计报告-基于VHDL数字电子钟设计与实现.doc...

    <计算机组成原理>课程设计报告-基于VHDL数字电子钟设计与实现 长沙理工大学 <计算机组成原理>课程设计报告 XXX 学 院 计算机与通信工程 专 业 网络工程 班 级 网络 ...

  5. 单片机c语言数字频率计课程设计,单片机数字频率计设计和调试 课程设计论文...

    引言 在电子测量领域中,频率测量的精确度是最高的,可达10至10 1.001.jpg (946 Bytes, 下载次数: 30) 2017-2-11 03:25 上传 数量级.因此,在生产过程中许多物 ...

  6. 左移寄存器vhdl_基于VHDL的移位寄存器设计

    摘 要 本文通过对EDA和VHDL的简单说明,阐述了基于 VHDL硬件描述语言的移位寄存器设计方法,程序简单,在电子 设计中有一定的推广价值. 关键词 移位寄存器   设计  EDA  VHDL 随着 ...

  7. 基于51单片机数字频率计的设计与实现

    目录 第一章 系统原理与总体设计 1.1系统组成 1.2系统原理 1.3测量原理 1.4频率测量与总体设计 第二章 硬件电路设计 2.1硬件电路框图 2.2数字频率计原理图 2.3硬件电路设计 第三章 ...

  8. 基于51单片机数字频率计仿真设计(proteus仿真+程序+原理图+参考报告+器件清单)

    51单片机数字频率计仿真设计 51单片机数字频率计仿真设计 主要功能 任务书 实物图 仿真图 原理图 信号采集模块 脉冲产生模块 分频模块 程序 设计报告 全部参考资料 资料下载链接 51单片机数字频 ...

  9. VHDL移位寄存器的设计与实现

    主要内容: 本设计根据计算机组成原理中移位寄存器的相关知识,利用VHDL语言设计了三种不同的寄存器:双向移位寄存器.串入串出(SISO)移位寄存器.串入并出(SIPO)移位寄存器. 摘要:系统使用ED ...

最新文章

  1. Java笔记(25):设计模式概述
  2. 最长上升子序列之基础
  3. AngularJS 使用$sce控制代码安全检查
  4. k8s kubesphere启用可插拔组件(安装前、后均可)
  5. php 安装rabbitmq扩展无报错版
  6. 设计模式——创建型模型
  7. ElementUI + express实现头像上传及后台图片保存
  8. 炫彩渐变液态海报设计,太skr了!
  9. 周爱民:真正的架构师是没有title的(图灵访谈)
  10. notePad++安装及json,xml格式化插件安装
  11. Vant Weapp - 有赞出品的免费开源微信小程序组件库
  12. 最新抓包工具BurpSuite2022.2.3 pj版
  13. Windows微信刷朋友圈
  14. 如何使用repo管理本地私有仓库
  15. 阿拉伯数字中文oracle,【oracle】中文数字转阿拉伯数字
  16. 你见过最心酸的事是什么?
  17. 将音频转化为MP3格式(lame库)
  18. Spring Boot教程(四十)使用Flyway来管理数据库版本
  19. Mythtype公式对齐和分栏分节符后删除空白页
  20. Unity 开发总结之onValueChanged事件

热门文章

  1. 实时油价接口 按城市检索加油站
  2. 岁月让我们学会了选择与放弃
  3. 一文读懂阿里云挑战 AWS 的底气 | 2018•大复盘
  4. “温暖中国--贫困民工患病子女生命救助行动”系列活动
  5. 今年9月开学!香港科技大学(广州)人工智能专业已开始招生!
  6. std::string int 转换
  7. Navigation组件的使用详解
  8. 机构称谷歌新闻业务2018收入47亿美元 谷歌:计算方法有误
  9. 波士顿大学计算机科学研究生,波士顿大学计算机科学硕士专业
  10. 西安音乐学院人计算机学院,西安音乐学院.我校5部作品“中国大学生计算机设计大赛”获奖...