基于VHDL的8位十进制频率计设计.doc_第1页
基于VHDL的8位十进制频率计设计.doc_第2页
基于VHDL的8位十进制频率计设计.doc_第3页
基于VHDL的8位十进制频率计设计.doc_第4页
基于VHDL的8位十进制频率计设计.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 基于基于 vhdl 的的 8 位十进制频率计设位十进制频率计设 计计 目录目录 目录目录 1 摘要摘要 2 1 设计目的设计目的 2 2 设计要求设计要求 2 3 设计思路设计思路 2 4 频率计设计原理频率计设计原理 3 4 1 频率计的组成部分 3 4 2 频率计工作原理 3 4 3 频率计各模块介绍 3 5 频率计仿真频率计仿真 7 5 1fctrl控制模块仿真 7 5 2regester寄存器模块仿真 7 5 3seltime扫描模块仿真 7 5 4deled显示模块仿真 8 5 5cnt10 计数器模块仿真 8 5 6 总电路仿真 8 6 频率计各模块程序频率计各模块程序 9 7 频率计下载到实验箱现象频率计下载到实验箱现象 13 8 设计体会设计体会 14 9 参考资料参考资料 14 2 摘要摘要 使用 vhdl 语言来设计数字频率计 给出了原理图和仿真图形 所设 计的电路通过硬件仿真 下载到目标器件上运行 能够满足测量频率的要求 具 有理论与实践意义 实现了电子电路自动化 eda 的过程 关键词关键词 vhdl eda 仿真 fpga 频率计 1 设计目的设计目的 1 1 熟悉 max plusii 10 2 的软件的基本使用方法 1 2 理解频率计的测量原理 1 3 掌握 vhdl 语言的编写方法 1 4 掌握虚拟数字频率计的软件设计 2 设计要求设计要求 在 max plusii 中设计一个数字频率计电路 设计要求为 测量范围 1hz 100mhz 数码管动态扫描显示所测的频率 3 设计思路设计思路 方案一 采用周期法 通过测量待测信号的周期并求其倒数 需要有标准 倍的频率 在待测信号的一个周期内 记录标准频率的周期数 这种方法的计 数值会产生最大为 1 个脉冲误差 并且测试精度与计数器中记录的数值有关 为了保证测试精度 测周期法仅适用于低频信号的测量 方案二 采用直接测频法 直接测频法就是在确定的闸门时间内 记录被 测信号的脉冲个数 由于闸门时间通常不是待测信号的整数倍 这种方法的计 数值也会产生最大为 1 个脉冲误差 进一步分析测量准确度 设待测信号脉 冲周期为 tx 频率为 fx 当测量时间为 t 1s 时 测量准确度为 tx t 1 fx 由此可知直接测频法的测量准确度与信号的频率有关 当待测信号频率较高时 测量准确度也较高 反之测量准确度也较低 因此直接测频法只适合测量频率 较高的信号 不能满足在整个测量频段内的测量精度保持不变的要求 方案三 采用等精度频率测量法 测量精度保持恒定 不随所测信号的变 化而变化 在快速测量的要求下 要保证较高精度的测频 必须采用较高的标 准频率信号 采用高集成度 高速的现场可编程门阵列 fpga 为实现高速 高精 度的测频提供了保证 本设计所采用的测频方法就是直接测频法 3 3 频率计设计原理频率计设计原理 3 1 频率计的组成部分频率计的组成部分 频率计主要由 5 个部分组成 测频控制信号发生器 fctrl 8 个有时钟使能 的十进制计数器 cnt10 1 个锁存器 regester32 显示模块 deled 和控制显示模 块 seltime 数字频率计的框图如下图所示 3 2 频率计工作原理频率计工作原理 频率计是直接用十进制数字来显示被测信号频率的一种测量装置 所谓频 率 就是周期性信号在单位时间 1s 里变化的次数 若在一定时间间隔 t 内测 得的这个周期性信号的重复变化次数 n 则其频率可表示为 f n t 频率测量的基本原理是计算每秒钟内待测信号的脉冲个数 测频的基本原 理要求 fctrl 的计数使能信号 en 能产生一个 1s 脉宽的周期信号 并对频率计的 每一个计数器 cnt10 的使能端进行同步控制 当 en 为高电平时允许计数 为低电平时停止计数 并保持其所计脉冲个数 在停止计数期间 首先需要一个锁存信号 load 的上跳沿将计数器在前 1s 的计数 值锁存进 regester32 中 并由外部的 7 段译码器译出 并稳定显示 锁存信号之后 必 须有一个清零信号对计数器进行清零 为下 1s 的计数操作做准备 测频控制信 号发生器的工作时序图如下图所示 其中控制信号频率始终为 1hz 那么信号 en 的脉宽正好为 1s 可以用作计数 闸门信号 然后根据测频的时序要求 可得出信号 load 和清零信号 clr cnt 的逻 辑描述 计数完成后 利用计数使能信号反向值的上跳沿产生一个锁存信号 load 0 5s 后 clr cnt 产生一个清零信号上跳沿 计数器 cnt10 的特殊之处是 有 一时钟使能输入端 ena 用于锁存计数值 当高电平时计数允许 低电平时计数 禁止 锁存器的设计要求 若已有 24 位 bcd 码存于此模块的输入口 在信号 load 的上跳沿后即被锁存到寄存器 regester 内部 并由 regester 的输出端输出 然后有 实验箱上 7 段译码器译成能在数码管上显示输出的相应数值 4 3 3 频率计各模块介绍频率计各模块介绍 测频控制信号模块 控制模块的作用是产生测频所需要的各种控制信号 控制信号的标准输入 时钟为 1hz 每两个时钟周期进行一次频率测量 该模块产生的 3 个控制信号 分别为 en load clr cnt clr cnt 信号用于在每次测量开始时 对计数 器进行复位 以清除上次测量的结果 该复位信号高电平有效 持续半个时钟 周期的时间 en 为计数允许信号 在 en 信号的上升沿时刻计数模块开始对输 入信号的频率进行测量 测量时间恰为一个时钟周期 正好为单位时间 1s 在 此时间里被测信号的脉冲数进行计数 即为信号的频率 然后将值锁存 并送 到数码管显示出来 设置锁存器的好处是使显示的数据稳定 不会由于周期性 的清零信号而不断闪烁 在每一次测量开始时 都必须重新对计数器清 0 测频控制产生器如下图所示 图中 1hzde clk1 接 cnt en 为计数允许信 号 接计数器 cnt10 的 ena 此图未画出 clr cnt 信号用于在每次测量开 始时 对计数器进行复位 接计数器 cnt10 的 clr load 接锁存器的 load 此图未画出 锁存器模块 测量模块测量完成后 在 load 信号的上升沿时刻将测量值锁存到寄存器中 然后输出到显示模块 锁存器是起数据保持的作用 它将会把数据保存到下次 触发或复位 主要是主从触发器组成的 用于存储数据来进行交换 使数据稳 定下来保持一段时间不变化 直到新的数据将其替换 锁存器 regester 的封装如下图所示 图中 load 接控制测频产生器 ftrl 的 load 而 din 31 0 接计数器 cnt10 的 cq 3 0 dout 31 0 接显示器 seltime 模块的 din 31 0 端 扫描模块 首先扫描模块接一个 clk 时钟 频率为 32768hz din 31 0 接 regester 的 dout 31 0 sel 2 0 锁存到 74ls138 译码器的三个引 脚 以便于让数码管显示 daout 3 0 接 deled 的 s 3 0 端 sel 为一个 7 进制计数器 当 sel 为 000 时 daout 对应着输入 din 的 0 到 3 位 当 sel 为 001 时 daout 对应着输入 din 的 4 到 7 位 以此类推 当 sel 为 111 时 daout 对应 din 的 28 到 31 位 5 seltime 模块如下图所示 sel 接线如右图所示 显示模块 led 有段码和位码之分 所谓段码就是让 led 显示出八位数据 一般情 况下要通过一个译码电路 将输入的 4 位 2 进制数转换为与 led 显示对应的 8 位段码 位码也就是 led 的显示使能端 对于共阴级的 led 而言 低电平使 能 在本设计中位码由扫描模块的 sel 接至 74ls138 进行译码 位码由显示模块 输出 例如 要让 8 个 led 同时工作显示数据 就是要不停的循环扫描每一个 led 并在使能每一个 led 的同时 输入所需显示的数据对应的 8 位段码 虽 然 8 个 led 是依次显示 但是受视觉分辨率的影响 看到的现象是 8 个 led 同时工作 deled 模块如下图所示 s 3 0 经过译码对应着一个 32 位的 dout 而 a 到 g 分别对应 dout 0 至 dout 7 十进制计数器模块 计数器模块是由 8 个带有异步清零端 进位信号输出的模为 10 的计数模块 级连而成 它有一时钟使能输入端 ena 用于锁定计数器 当高电平计数允许 低电平时计数禁止 计数器模块用于对输入信号的脉冲进行计数 该模块有计 数允许 异步清零等端口 以便于控制模块对其进行控制 cnt10 如下图所示 其中 clr 为复位接 fctrl 的 clr cnt 端 ena 接 fctrl 的 en 端 cq 3 0 接锁存器的 dout 31 0 端 6 综上 总电路设计图如下所示 7 5 频率计仿真频率计仿真 5 1fctrl 控制模块仿真 由图可以看出 clk 为一个 1hz 的时钟信号 en 为 clk 的二分频 load 为 en 的非 clr cnt 在 clk 和 en 都为低电平时 为高电平 5 2regester 寄存器模块仿真 由上图可以看出 当 rst 为高电平时 32 位输出 dout 立即全部置零 当 rst 为低电平时 在 load 信号有上升沿时 din 将值赋给 dout 5 3seltime 扫描模块仿真 由上图可以看出 sel 从 000 开始循环计数至 111 当 clk 上升沿到来时 若 sel 为 111 则将 sel 置为 000 重新计数 sel 的 000 至 111 依次对应 daout 从 8 第四位至高四位 5 4deled 显示模块仿真 5 5cnt10 计数器模块仿真 使能信号 ena 一直为高电平 则 clk 来一个上升沿 cq 计一次数 计数范 围为 0 到 9 到 9 后 cq 从 0 开始重新计数 并且 carry out 输出一个高电平 当 clr 信号为高电平时 cq 清零 开始重新计数 5 6 总电路仿真 clk1 为 1hz 基准频率 clk2 为待测频率 clk3 为 32768hz 扫描频率 剩下的几个参数 在前几个仿真中均已提过 此处不再赘述 9 6 频率计各模块程序频率计各模块程序 6 1fctrl 控制模块 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity fctrl is port clk in std logic en out std logic clr cnt out std logic load out std logic end fctrl architecture behav of fctrl is signal div2clk std logic begin process clk begin if clk event and clk 1 then div2clk not div2clk end if end process process clk div2clk begin if clk 0 and div2clk 0 then clr cnt 1 else clr cnt 0 end if end process load not div2clk en div2clk end behav 6 2regester 寄存器模块 library ieee use ieee std logic 1164 all entity regester32 is port load in std logic rst in std logic din in std logic vector 31 downto 0 dout out std logic vector 31 downto 0 10 end regester32 architecture behav of regester32 is signal data std logic vector 31 downto 0 begin process rst load begin if rst 1 then data 0 elsif load event and load 1 then data din end if dout data end process end behav 6 3seltime 扫描模块 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity seltime is port clk in std logic din in std logic vector 31 downto 0 daout out std logic vector 3 downto 0 sel out std logic vector 2 downto 0 end seltime architecture behav of seltime is signal sec std logic vector 2 downto 0 begin process clk begin if clk event and clk 1 then if sec 111 then sec 000 else secdaoutdaoutdaoutdaoutdaoutdaoutdaoutdaoutnull end case end process sel sec end behav 6 4deled 显示模块 library ieee use ieee std logic 1164 all entity deled is port s in std logic vector 3 downto 0 a b c d e f g h out std logic end deled architecture behav of deled is signal data std logic vector 3 downto 0 signal dout std logic vector 7 downto 0 begin datadoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdout 00000000 end case end process h dout 7 g dout 6 f dout 5 e dout 4 d dout 3 c dout 2 b dout 1 a dout 0 end behav 6 5cnt10 计数器模块 library ieee use ieee std logic 1164 all en

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论