EDA实验:数字频率计(FREQ)设计(VHDL)

2023-11-03

目录

一:实验要求

二:程序源代码

2.1   CLKGEN的VHDL源程序及分析

 2.2  REG32B的VHDL源程序及分析

 2.3  TESTCTL的VHDL源程序及分析

2.4  FREQ的VHDL源程序及分析

 三:硬件实验现象

四:对实验步骤详细分析

4.1   RTL图

4.2 引脚锁定

4.3  TESTCTL波形仿真

4.4   FREQ波形仿真

4.5 测频测试结果


一:实验要求

设计并调试好8位十进制数字频率计,并用GW48系列或其他EDA实验开发系统(事先应选定拟采用的实验芯片的型号)进行硬件验证

                        图1: 实验电路

设计思路:数字频率计数器其实就是对数字秒表的进一步深入,其功能是测出某个频率的大小

要测出某个频率的大小那就是设定一秒钟周期,周期内测试的频率的脉冲上升沿多少。

频率 =  上升沿脉冲个数 /  T    当T等于1s时候,则  频率=上升沿脉冲个数。

为了能够在数码管上显示依旧需要加CTRLS(动态扫描)和DISPLAY(动态显示),而1S的周期哪来的呢,这是可以设定由内部产生或者外部产生,这里我设置为内部产生,通过一个分配器的操作来达到输出的周期时间为1S。

为了能够测量多次频率,那么就需要对前面一次频率进行一个保存,当前面频率保存的时候,计数器不工作,并且给一个清零信号将前一次测频的结果清除。

二:程序源代码

对于上篇文章一致的代码不再讲述,大家可以进行一个移植操作。

2.1   CLKGEN的VHDL源程序及分析

其中CLKGEN分析在前一篇文章有详细说明,这里注意的是我选择的时钟是内部时钟50M,为了产生1s的时钟周期,我需要对其进行5M分频,但是为了能够波形仿真,所以还使用了一个分频常数小的分频器。

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;

 2.2  REG32B的VHDL源程序及分析

锁存器的工作原理就是将前一次测评的结果进行保存,并且传输到动态显示端,由于要将前一次测评结果清零所以锁存器的效果能够防止硬件不稳定的现象。

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;

 2.3  TESTCTL的VHDL源程序及分析

由于是多次测评,所以需要对程序进行一个整体的控制,测评控制模块非常重要,控制计数器何时工作,控制锁存器何时工作,对测评结果何时清零。 

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;

2.4  FREQ的VHDL源程序及分析

这是数字频率计的顶层文件,利用元件例化语句,将各模块进行一个连接。

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;

 三:硬件实验现象

测频器硬件现象

四:对实验步骤详细分析

4.1   RTL图

 从图中可以看到整体的模块连接,和设计的原理图相一致,并且大家仔细观察:其中的线条粗细是不一样的,对于信号线和一般的连接线相比是粗一些,其中的原理应该是信号传输的特性。

4.2 引脚锁定

对于数码管的显示端和驱动和第一篇DTCNT9999设置一致,具体分析在第一篇文章

其中不同的是,我使用了内部时钟PIN_T1。将测频的引脚设置为6号引脚,8号引脚为动态扫描端口,本实验不需要使用按键。 

4.3  TESTCTL波形仿真

可以看出,TSTEN和LOAD的波形是相反的,由于计数器在工作的时候锁存器并不工作,而计数器不工作的时候,LOAD为1代表锁存器开始工作,也可以看到CLR清零信号在TSTEN和CLK为0的时候来到一个上朓沿,代表进行清零,其中CLK有部分时间的延迟证明了信号的延迟特性。

4.4   FREQ波形仿真

 为了能够让波形能够显示出来,除了将DOUT设为可读之外,还需要将分频常数减小,为了达到测评的效果,将测试频率FSIN设置为俩种不同的频率,通过GOUT得出被测频率的大小,其中COM为数码管的公共端,依次动态点亮,其中DOUT的数值对应SEG中数码管的八段管显示。

4.5 测频测试结果

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

最后:如果需要人数较多,我会对项目进行一个开源,如果对你有用,请给一个点赞,多谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EDA实验:数字频率计(FREQ)设计(VHDL) 的相关文章

  • Hutool改变我们的coding方式(二)

    Hutool改变我们的coding方式 Hutool 简介 Hutool如何改变我们的coding方式 文档 安装 Maven
  • 计算机Java项目|基于SSM的微课学习系统

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 计算机Java项目|在线图书管理

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|电影购票系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • APP开发毕业设计|ssm爱心小屋公益机构智慧管理APP

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 如何将数组类型作为泛型类型参数传递给 VHDL 包?

    我正在 VHDL 2008 中开发通用包 列表 该包具有元素类型的泛型类型 如果我在包中声明此元素类型的数组类型 那么它就是一个新类型 所以对于例如整数 我的新整数数组将与 ieee 库中的整数向量不兼容 所以我还需要传入数组类型 例如in
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 【一种新的Burton-Miller型奇异边界方法(BM-SBM)】用于声学设计灵敏度分析,2D和3D声学设计灵敏度分析的奇异边界方法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 2D 2 2 3D
  • 【js学习之路】遍历数组api之 `filter `和 `map`的区别

    一 前言 数组是我们在项目中经常使用的数据类型 今天我们主要简述作用于遍历数组的api filter 和 map 的区别 二 filter和map的共同点 首先 我们主要阐述一下 filter 和 map 的共同点 api的参数都是回调函数
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)

    目录 一 简介 1 1 什么是幂等 1 2 为什么需要幂等性 1 3 接口超时 应该如何处理 1 4 幂等性对系统的影响 二 Restful API 接口的幂等性 三 实现方式 3 1 数据库层面 主键 唯一索引冲突 3 2 数据库层面 乐
  • 计算机Java项目|人体健康信息管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • Java进阶之旅第七天

    Java进阶之旅第七天 文章目录 Java进阶之旅第七天 方法引用 介绍 代码展示 结果 方法引用的分类
  • 敏感列表中的哪个信号触发该过程

    在VHDL中 当模拟测试平台时 我有一个过程和一个敏感度列表 是否可以查看敏感列表中的哪个信号触发了该过程 我知道这可能取决于工具 我正在使用 Xilinx ISE 模拟器是否提供此信息 您可以使用 transaction属性结合 even
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • VHDL 中的 NULL 语句

    其实际目的是什么nullVHDL 中的声明 考虑以下代码 1 CASE s IS BEGIN WHEN 0 gt y lt 0 WHEN 1 gt NULL END CASE 2 CASE s IS BEGIN WHEN 0 gt y lt
  • VHDL 中的进程是可重入的吗?

    一个进程是否可以连续运行两次或多次VHDL 如果在进程的顺序执行未完成的情况下发生另一个事件 在敏感信号列表上 会发生什么 有可能还是我的VHDL流程中的模型完全错误 进程运行时不会发生任何事件 当进程被事件唤醒时 它会运行到完成 结束进程
  • 仅使用 std_logic_vector 包将 std_logic_vector 与常量进行比较

    我仅在 VHDL 文件中使用以下包 library IEEE use IEEE STD LOGIC 1164 ALL 在代码中 我将 std logic vector 信号 A 与常量值进行比较 例如 if A lt 00001011 th
  • VHDL 中的 #define 等价物是什么

    VHDL 中的 define ifdef 和 ifndef 相当于什么 我想使用泛型作为 define 并根据它们更改设计 举一个简单的例子 定义一个字符串泛型并用它来确定时钟是单时钟还是差分时钟 generic something boo
  • 设计用于初始化的VHDL状态机

    如何最明智地设计用于初始化芯片的 VHDL 状态机 我当前的设计是 伪代码 案例状态 当 s0 gt VHDL CODE FOR WRITING VALUE TO REGISTER状态 s1 当 s1 gt VHDL CODE FOR WR

随机推荐

  • 廉价的家用工作站方案:ThinkPad 存储升级及数据迁移

    最近 给当台式服务器一样使用了两年的 ThinkPad 做了存储升级和数据迁移 对硬盘也做了额外的散热处理 本篇文章里 我们分享下相关的经验和思考 希望能够帮助到有同样诉求的你 写在前面 本文的 主角 是一台 7x24 小时使用了两年的 T
  • 【基础篇】关于专栏介绍及ESP32环境搭建(vs code)

    前言 本专栏将会从零到实战的学习ESP32开发 将会持续更新 其中大概包括基础篇 实战篇和提高篇以及一些常见的错误如何解决 一 ESP32介绍 ESP32是 Espressif 开发的一系列低成本 低功耗的片上系统 SoC 微控制器 包括
  • matlab练习程序(模拟退火SA)

    模拟退火首先从某个初始候选解开始 当温度大于0时执行循环 在循环中 通过随机扰动产生一个新的解 然后求得新解和原解之间的能量差 如果差小于0 则采用新解作为当前解 如果差大于0 则采用一个当前温度与能量差成比例的概率来选择是否接受新解 温度
  • 带头结点的头插法和尾插法创建单链表

    首先我们先定义一个链表的结构体 typedef int DataType typedef struct Node DataType data struct Node next SLNode SLnode 定义链表的结构体 因为是带头节点的链
  • Easyx-----c++实现经典Windows扫雷

    一些说明 关于扫雷的基本实现 我在这篇博客已经详细介绍Easyx c语言实现简易版扫雷 考拉爱睡觉鸭 的博客 CSDN博客 这里不再描述 主要是以c 单例设计模式的方式实现扫雷 多加了右键点击笑脸作弊功能 不会扫雷的小伙伴也可以愉快玩耍了
  • vue3的slot插槽用法,`slot-scope` are deprecated

    前言 vue3的插槽使用方法发生了改变 和vue2相比较 使用vue2的写法 会报错 slot scope are deprecated vue2 上下对应 title是自己随便起的名字 1 定义一个普通的插槽 可以用div 任何标签 di
  • 用堆实现优先级队列(Priority Queue)

    1 优先级队列定义 优先级队列 priority queue 是0个或多个元素的集合 每个元素都有一个优先权 对优先级队列执行的操作有 1 查找 2 插入一个新元素 3 删除 一般情况下 查找操作用来搜索优先权最大的元素 删除操作用来删除该
  • Java Web学习笔记1

    URL格式说明 http www aspxfans com 8080 news index asp boardID 5 ID 24618 page 1 name 从上面的URL可以看出 一个完整的URL包括以下几部分 1 协议部分 该URL
  • JWT-RS256公钥和私钥创建

    摘要 最近在做ASP NET Core 微服务项目中 用到JWT RS256 创建公钥和私钥来替代原先的对称加密方式 于是在网上找一些创建秘钥的工具 搜了很多终于找到一个非常方便的工具 在这里贡献给大家 操作步骤 请看截图 工具下载链接下载
  • QuotaExceededError the quota has been exceeded --- Firefox 报错解决

    QuotaExceededError the quota has been exceeded Firefox 报错解决 Firefox 报错 QuotaExceededError the quota has been exceeded 在F
  • 联想小新Pro13解决黑苹果下麦克风不可用(曲线救国)

    众所周知 联想小新Pro13在安装黑苹果系统之后不能正常地使用麦克风的功能 这也成为了除开原装网卡无隔空和随航以外 小新Pro13在黑苹果下唯一不能使用的功能了 今天来讲一下我是如何解决这个问题的 解决思路 首先讲一下解决思路 写驱动是不会
  • DMAIC方法的五个步骤

    DMAIC是指一种数据驱动的质量战略 用于改进流程 是公司 六西格玛质量计划 的组成部分 DMAIC是五个相互关联的阶段的首字母缩写 定义 测量 分析 改进和控制 DMAIC方法旨在允许灵活性和迭代工作 它是 定义 测量 分析 改进 和 控
  • 记一次通过binlog日志恢复MySQL数据库的经历

    通过binlog日志恢复MySQL数据库的数据 一 起因 起因是我在自己服务器上搭建的博客被黑客攻击 黑客删除了我的数据库并且要求支付比特币才给我恢复 博客所有的表和数据都被清空 只留下了勒索金额和地址 如图 穷鬼如我当然是 二 恢复数据
  • 认识djiango第一章(展示日志)

    定义 Django是python的一个主流web框架 提供一站式解决方案 开发成本低 内建ORM 数据管理后台 登录认证 表单 RESTAPI等功能 适合开发中大型项目 其他web框架 Flask 轻量级 Tornado 异步 注 本次编写
  • JAVA求素数和模拟条件

    题目 牛宝在新的一年里打算扫除过去身上的坏运气 故他打算筛选出今年第1 365天中符合今年自己的那些幸运数字 在今年对应数字的那一天做特殊的事 这些数字受限于乾卦和坤卦两个卦象条件 牛宝需自己破译出来才行 你能帮助他吗 根据牛宝得知的乾坤卦
  • 【Python之路——基础回顾90列】

    基础 1 求绝对值 求绝对值或复数的模 gt gt gt abs 6 6 2 元素都为真 接受一个迭代器 如果迭代器的 所有元素 都为真 那么返回 True 否则返回 False gt gt gt all 0 1 2 3 False gt
  • 7,tcl双引号和花括号

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 关于xilinx vivado FPGA XDC约束的所有讲解文档汇总 关于xilinxvivadoFPGAXDC约
  • BeanUtils和JSON对象复制性能对比

    对比对象 常见的BeanUtils有2个 spring有BeanUtils 浅拷贝 apache的commons也有BeanUtils 深拷贝 测试 200000次循环 测试次数 200000次循环 测试结果 依旧是20倍左右的差距 循环2
  • Windows Server 2008 的十大重要新特性

    Windows Server 2008 十项重要新技术 在微软的新产品Windows server 2008中 相比以前版本的 服务器 操作系统 又融入了十项强大的新技术 不敢说这些技术是否真的能让用户得到更好的服务 但就微软而言 体现了其
  • EDA实验:数字频率计(FREQ)设计(VHDL)

    目录 一 实验要求 二 程序源代码 2 1 CLKGEN的VHDL源程序及分析 2 2 REG32B的VHDL源程序及分析 2 3 TESTCTL的VHDL源程序及分析 2 4 FREQ的VHDL源程序及分析 三 硬件实验现象 四 对实验步