数字频率计的设计与实现.doc_第1页
数字频率计的设计与实现.doc_第2页
数字频率计的设计与实现.doc_第3页
数字频率计的设计与实现.doc_第4页
数字频率计的设计与实现.doc_第5页
免费预览已结束,剩余39页可下载查看

下载本文档

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

文档简介

摘要 I 摘 要 本文介绍了使用 VHDL 开发 FPGA 的一般流程 重点介绍了频率计的基 本原理和相应的测量方案 最终采用了一种基于 FPGA 的数字频率的实现方法 该设计采用硬件描述语言 VHDL 在软件开发平台 ISE 上完成 可以在较高速 时钟频率 100MHz 下正常工作 该设计的频率计能准确的测量频率在 1Hz 到 100MHz 之间的信号 使用 ModelSim 仿真软件对 VHDL 程序做了仿真 并完成了综合布局布线 最终下载到芯片 Spartan II 上取得良好测试效果 关键词 关键词 FPGA VHDL ISE 自顶向下 Abstract II Abstract This paper introducing a general process to develop FPGA product with VHDL focuses on the basic principle and measurement scheme of digital cymometer A scheme achieved by FPGA is adopted In this design plan we use a popular hardware description language VHDL and finish the program on the development platform ISE The final production can measure the signal s frequency between 1Hz and 100MHz This system uses the simulation tool ModelSim to run and debug the VHDL program and design the circuit placement A good result can be achieved when the program was burnt on the chip Spartan II Keywords FPGA VHDL ISE Top down 目录 III 目 录 第一章 引言 1 第二章 基于 FPGA 的 VHDL 设计流程 2 2 1 概述 2 2 2 VHDL 语言介绍 2 2 2 1 VHDL 的特点 3 2 2 2 基于 VHDL 的自顶向下设计方法 4 第三章 数字频率计的软件开发环境 6 3 1 开发环境 6 3 2 ISE 介绍 6 3 2 1 建立项目工程 6 3 2 2 行为仿真 8 3 2 3 建立顶层原理图 10 3 2 4 综合 12 3 2 5 布局布线 15 3 2 6 下载及硬件仿真 15 第四章 数字频率计的设计与实现 17 4 1 任务要求 17 4 2 测量原理 18 4 2 1 电子计数器测频方法 18 4 2 2 误差分析 19 4 2 3 等精度测量 22 4 3 原理框图 24 4 4 各模块的功能及实现 24 4 4 1 闸门信号产生器模块 24 4 4 2 六位计数器模块 26 4 4 3 锁存器模块 29 目录 IV 4 4 4 显示器模块 30 4 5 频率计的综合实现 34 4 6 分配引脚和下载实现 36 第五章 实验结果及分析 38 5 1 实验结果 38 5 2 结果分析 39 参考文献 54 第一章 引言 1 第一章 引言 在电子技术领域内 频率是一个最基本的参数 频率与其它许多电参量的 测量方案 测量结果都有十分密切的关系 如时间 速度等都涉及到或本身可 转化为频率的测量 因此 频率的测量就显得更为重要 而且 目前在电子测 量中 频率的测量精确度是最高的 现在市场上有各种多功能 高精度 高频率 的数字频率计 但价格不菲 而在实际工程中 不是对所有信号的频率测量都 要求达到非常高的精度 因此 本文提出了一种能满足一般测量精度要求 但 成本低廉的数字频率计的设计方案 本文主要任务是针对设计的要求 基于 FPGA 利用硬件描述语言 VHDL 完成数字频率计的设计 通过仿真 分析 综合并最终下载到 FPGA 里面去实 现 除被测信号的整形部分 键输入部分以外 其余全部在一片 FPGA 芯片上 实现 整个系统非常精简 而且具有灵活的现场可更改性 在不更改硬件电路 的基础上 对系统进行各种改进还可以进一步提高系统的性能 该数字频率计 具有高速 精确 可靠 抗干扰性强和现场可编程等优点 经实验表明 其测 量精度基本能达到 且系统成本非常低廉 可作为学生数字逻辑设计综合 8 10 实验或自制数字频率计的备选方案 电子科技大学学士学位论文 2 第二章 基于 FPGA 的 VHDL 设计流程 2 1 概述概述 数字频率计是数字电路中的一个典型应用 实际的硬件设计用到的器件较 多 连线比较复杂 而且会产生比较大的延时 造成测量误差 可靠性差 频 率计的设计有传统方法和现代方法 传统的设计方法耗时耗功 设计强度大 且容易出错 设计的质量不一定是最好的 自然我们考虑到现代方法 即二十 世纪八十年代兴起的电子设计自动化技术 英文为 Electronic Design Auto 缩 写为 EDA 在 EDA 设计工具中 用的最广泛的是 VHDL 和 VERILOG 当然 还有其它的 比较 VHDL 和 VERILOG 在顶层设计方面 VHDL 优于 VERILOG 在门级电路设计方面 VERILOG 优于 VHDL 随着复杂可编程逻 辑器件 CPLD 的广泛应用 以 EDA 工具作为开发手段 运用 VHDL 语言 将使整个系统大大简化 提高整体的性能和可靠性 本次的频率计设计主要是 顶层设计 目的是设计 6 位十进制频率计 学习常用的数字系统设计方法 采 用 VDHL 编程设计实现的数字频率计 除被测信号的整形部分 键输入部分 以外 其余全部在一片 FPGA 芯片上实现 整个系统非常精简 而且具有灵活 的现场可更改性 在不更改硬件电路的基础上 对系统进行各种改进还可以进 一步提高系统的性能 该数字频率计具有高速 精确 可靠 抗干扰性强和现 场可编程等优点 2 2 VHDL 语言介绍语言介绍 VHDL Very high speed Integrated Circuit Hardware Description Language 诞 生于 1982 年 1987 年底 VHDL 被 IEEE The Institute of Electrical and Electronics Engineers 和美国国防部确认为标准硬件描述语言 自 IEEE 公布 了 VHDL 的标准版本 IEEE 1076 之后 各 EDA 公司相继推出了自己的 VHDL 设计环境 并宣布自己的设计工具可以和 VHDL 接口 此后 VHDL 在 电子设计领域得到了广泛的接受 并逐步取代了原有的非标准硬件描述语言 1993 年 IEEE 对 VHDL 进行了修订 从更高的抽象层次和系统描述能力上扩 第二章 基于 FPGA 的 VHDL 设计流程 3 展 VHDL 的内容 公布了新版本的 VHDL 即 IEEE 标准的 1076 1993 版本 现在 VHDL 和 VERILOG 作为 IEEE 的工业标准硬件描述语言 又得到众多 EDA 公司的支持 在电子工程领域 已成为事实上的通用硬件描述语言 有 专家认为 在新的世纪中 VHDL 和 VERILOG 语言将承担起几乎全部的数字 系统设计任务 2 2 1 VHDL 的特点的特点 VHDL 主要用于描述数字系统的结构 行为 功能和接口 除了含有许多 具有硬件特征的语句外 VHDL 的语言形式 描述风格以及句法十分类似于一 般的计算机高级语言 VHDL 的程序结构特点是将一项工程设计 或称为设计 实体 可以是一个元件 一个电路模块或一个系统 分成外部 又称为可视部 分 即端口 和内部 又称为不可视部分 即设计实体的内部功能和算法完 成部分 在对一个设计实体定义了外部界面后 一旦其内部开发完成后 其它 的设计就可以直接调用这个实体 这种将设计实体分成内外部分的概念是 VHDL 系统设计的基本点 应用 VHDL 进行工程设计的优点是多方面的 具 体如下 1 与其它的硬件描述语言相比 VHDL 具有更强的行为描述能力 从而 决定了它成为系统设计领域最佳的硬件描述语言 强大的行为描述能力是避开 具体的器件结构 从逻辑行为上描述和设计大规模电子系统的重要保证 就目 前流行的 EDA 工具和 VHDL 综合器而言 将基于抽象的行为描述风格的 VHDL 程序综合成为具体的 FPGA 和 CPLD 等目标器件的网表文件已不成问题 只是在综合与优化效率上略有差异 2 VHDL 最初是作为一种仿真标准格式出现的 因此 VHDL 既是一种硬 件电路描述和设计语言 也是一种标准的网表格式 还是一种仿真语言 其丰 富的仿真语句和库函数 使得在任何大系统的设计早期 即尚未完成 就能 用于查验设计系统的功能可行性 随时可对设计进行仿真模拟 即在远离门级 的高层次上进行模拟 使设计者对整个工程设计的结构和功能的可行性做出决 策 3 VHDL 语句的行为描述能力和程序结构决定了它具有支持大规模设计 的分解和已有设计的再利用功能 符合市场所需求的 大规模系统高效 高速 的完成必须由多人甚至多个开发组共同并行工作才能实现的特点 VHDL 中设 计实体的概念 程序包的概念 设计库的概念为设计的分解和并行工作提供了 有力的支持 电子科技大学学士学位论文 4 4 对于用 VHDL 完成的一个确定的设计 可以利用 EDA 工具进行逻辑 综合和优化 并自动地把 VHDL 描述设计转变成为门级网表 这种方式突破 了门级电路设计的瓶颈 极大地减少了电路设计的时间和可能发生的错误 降 低了开发成本 应用 EDA 工具的逻辑优化功能 可以自动地把一个综合后的 设计变成一个更高效 更高速的电路系统 反过来 设计者还可以容易地从综 合和优化后的电路获得设计信息 返回去更新修改 VHDL 设计描述 使之更 为完善 5 VHDL 对设计的描述具有相对独立性 设计者可以不懂硬件的结构 也不必管最终设计实现的目标器件是什么 而进行独立的设计 正因为 VHDL 硬件描述与具体的工艺技术和硬件结构无关 VHDL 设计程序的硬件实现目标 器件有广阔的选择范围 其中包括各系列的 CPLD FPGA 及各种门阵列实现 目标 6 由于 VHDL 具有类属描述语句和子程序调用等功能 对于已完成的设 计 在不改变源程序的条件下 只需要改变端口类属参量或函数 就能轻易地 改变设计的规模和结构 2 2 2 基于基于 VHDL 的自顶向下设计方的自顶向下设计方法法 2 2 2 1 自顶向下设计的步骤 1 设计说明 用自然语言表达系统项目的功能特点和技术参数等 2 建立 VHDL 行为模型 即将设计说明已转化为 VHDL 行为模型 建立 模型是为了通过 VHDL 仿真器对整个系统进行系统行为仿真和性能评估 3 VHDL 行为仿真 这一阶段可以利用 VHDL 仿真器对顶层系统的行为 模型进行仿真测试 检查模拟结果 继而进行修改和完善 4 VHDL RTL 级建模 即将 VHDL 的行为模型表达为 VHDL 行为代码 5 前端功能仿真 即对 VHDL RTL 级模型进行仿真 简称功能仿真 6 逻辑综合 使用逻辑综合工具将 VHDL 行为代码描述转化为结构化的 门级电路 7 测试向量生成 8 功能仿真 9 结构综合 10 门级时序仿真 第二章 基于 FPGA 的 VHDL 设计流程 5 11 硬件测试 2 2 2 2 Top down 设计方法的优点 1 完全符合设计人员的设计思路 从功能描述开始 到最后的物理实现 2 功能设计可完全独立于物理实现 采用 Top Down 设计方法 功能输 入采用国际标准的 HDL 输入方法 HDL 可不含有任何器件的物理信息 因此 工程师可以有更多的空间去集中精力进行功能描述 设计师可以在设计过程的 最后阶段任意选择或更改物理器件 不会在设计一开始就受到最终所采用器件 的约束 3 设计可再利用 设计结果完全可以以一种知识产权 IP Intellectual Property 的方式作为设计师或设计单位的设计成果 应用于不同的产品设计 中 做到成果的再利用 4 易于设计的更改 设计工程师可在极短的时间内修改设计 对各种 FPGA CPLD 结构进行设计结果规模 门消耗 和速度 时序 的比较 选择 最优方案 5 设计和处理大规模复杂电路 目前的 FPGA CPLD 器件正向高集成度 深亚微米工艺发展 为设计系统的小型化 低功耗 高可靠性等提供了集成的 手段 6 设计周期缩短 生产率大大提高 产品上市时间提前 性能明显提高 产品竞争力加强 据统计 采用 Top Down 设计方法的生产率可达到传统设计 方法 2 到 4 倍 电子科技大学学士学位论文 6 第三章 数字频率计的软件开发环境 本章主要介绍项目中将要用到了一系列软件 包括用于 VHDL 语言编写 和编译的 ISE 软件和用于程序仿真的仿真软件 ModelSim 3 1 开发环境开发环境 随着可编程器件纷纷超越百万门级 设计者面临的产品性能与设计效率的 挑战也越来越大 设计者必须合理选择各 EDA 厂家提供的加速设计的工具软 件 这样才能在较短的时间内设计出高效稳定的产品 在本次设计中 由于选 择的 FPGA 芯片是由 Xilinx 公司生产的 所以我们主要使用 ModelSim 和 ISE 软件进行仿真和综合 3 2 ISE 介绍介绍 本节主要介绍在 XILINX 的 ISE 集成软件环境中 如何用 VHDL 和原理图 的方式进行设计输入 如何用 ModelSim 仿真工具对设计进行功能仿真和时序 仿真 如何实现设计 3 2 1 建立项目工程建立项目工程 建立新的项目工程 选择 File 再选择 New Project 如图就可以 了 第三章 数字频率计的软件开发环境 7 图 3 3 ISE 建立新工程 选择使用的可编程器件类型 device family 器件族名 device 器件型号 package 封装 speed grade 速度 top level module type 顶层文件类型 synthesis tool 综合工具 simulator 仿真工具 generated simulation language 生成的仿真模 型语言 图 3 4 选择器件 然后一路 NEXT 最后点击完成 刚生成的工程是没有类型的 需要自己加 入 方法是在 sources in project 中右击 选择 add sources 选择你写的 文件加入即可 如果要新写程序 用同样的方法 选择 new sources 即可 会 弹出如下对话框 让你选择 New Sources 的类型 电子科技大学学士学位论文 8 图 3 5 选择 New Sources 的类型 选择 vhdl module 写上文件名 在下一页可以写上输入输出口 也可以 不写 一路 NEXT 到完成就可以 这样就可以开始写代码或继续下一步综合了 要打开或编辑新建的文件 直接在 sources in project 窗口中双击该文件即可 3 2 2 行为仿真行为仿真 1 在工程项窗口 Project Window 的源文件中选中计数器 counter vhd 2 选择 Project New Source 3 在新的对话框中选择新文件类型为 Test Bench Waveform 4 键入文件名为 counter tbw 5 点击 Next 在其他工程项中你可以将你的 testbench 波形与其他源文件 关联 6 一直 Next 直到 Finish 此时 HDL Bencher 程序自动启动并等候你输入 所需的时序需求 你现在可以指定仿真所需的时间参数 时钟高电平时间和时 钟低电平时间一起定义了设计操作必须达到的时钟周期 输入建立时间定义了 输入在什么时候必须有效 输出有效延时 定义了有效时钟沿到达后多久必须 输出有效数据 默认的初始化时间设置如下 时钟高电平时间 Clock high time 50 ns 时钟低电平时间 Clock low time 50 ns 输入建立时间 Input setup time 10 ns 输出有效时间 Output valid delay 10 ns 7 点击 OK 接受默认的时间设定 Testbench waveform 窗口如下 第三章 数字频率计的软件开发环境 9 图 3 6 Testbench Waveform 在 HDL Bencher 的波形中 初始化计数器输入如下 在每个单元的蓝色区域输入激励 a 在 CLK 第 1 周期下点击 RESET 单元直到该单元变为 b 在 CLK 第 2 周期下点击 RESET 单元直到该单元变为低 c 在 CLK 第 3 周期下点击 CE 单元直到该单元变为高 d 在 CLK 第 2 周期下点击 DIR 单元直到该单元变为高 图 3 7 激励输入 e 将你的 testbench 文件存盘 选择 File Save Waveform 或点击工具栏的 存盘图标 接下来 HDL Bencher 会提示你设置你希望仿真的时钟周期数 f 在 End the testbench cycles after the last input assignment 对话框中输入 8 默认值为 1 g 点击 OK 退出 HDL Bencher 新的 testbench 波形源文件 counter tbw tbw 自动加入到该工程项中 8 生成预期的输出响应 我们进行行为仿真以验证计数器模块的功能 a 在 Sources in Project 窗口中选择 counter tbw tbw 文件 b 在 Processes for Current Source 窗口中点击 符号展开 ModelSim 仿真 器的层次结构找到并双击 Simulate Behavioral VHDL Model 此时 ModelSim 仿 电子科技大学学士学位论文 10 真器自动启动 c 对于第一次运行 ModelSim 的用户会显示一个对话框需要在其中做以下 处理 选中 Do not show this dialog again 选项 点击 Run ModelSim 此对话框在 你重新安装或重新配置 ModelSim 之前将不再显示你的仿真结果现在显示在 ModelSim 的波形窗口 wave window d 点击 Zoom Zoom Full 点击 Zoom Zoom in e 拖动波形窗口下端的滚动条至窗口的最左端 图 3 8 仿真图 3 2 3 建立顶层原理图建立顶层原理图 3 2 3 1 生成原理图符号 1 在 Sources in Project 窗口中选中计数器模块 counter vhd 2 在 Processes for Current Source 窗口中 点击设计输入实用程序 Design Entry Utilities 之前的 符号然后双击创建原理图符号 Create Schematic Symbol 经过以上步骤 名称为 counter 的图形化元件被放入到工程项库中 3 2 3 2 创建顶层原理图 1 在工程项导航器 Project Navigator 菜单中 选择 Project New Source 2 选择原理图 Schematic 为源类型 3 输入原理图名为 top 4 先点击 Next 再点击 Finish 此时原理图编辑器 ECS 自动启动并 在其原理图窗口中打开一张空图 第三章 数字频率计的软件开发环境 11 3 2 3 3 例化 VHDL 模块 1 在菜单中选择 Add Symbol 或者在工具栏中点击 Add Symbol 图标 2 从元件符号列表 在屏幕右侧 中选择计数器 counter 注意不要在类别 Categories 窗口中作任何选择 3 点击左键可将计数器 counter 放置在光标所在的位置出现 4 按 ESC 键退出添加符号 Add Symbol 模式 图 3 9 例化 VHDL 模块 3 2 3 4 原理图连线 1 首先激活划线功能通过在菜单中选择 Add Wire 或者在工具栏中点击 Add Wire 图标 2 添加一根悬空线和延展连线 在计数器模块的某一管脚单击鼠标 然 后将连线拉伸到需要的长度 再在连线端点处双击鼠标 给计数器模块的每一 管脚添加连线 3 添加两个元件符号之间的连线 在一个计数器模块的管脚处单击鼠标 在另一个计数器模块的对应管脚处双击鼠标 连接好线后按 ESC 键退出添加 连线 Add Wire 模式 电子科技大学学士学位论文 12 图 3 10 原理图连线 3 2 3 5 添加输入输出管脚标记 1 在菜单中选择 Add I O Marker 或在工具栏中点击 Add I O Marker 图 标 连接好的图如下 图 3 11 添加输入输出管脚 2 连接步骤 首先为 clock reset ce load dir1 和 dir2 添加输入标记 同时为总线 din1 3 0 和 din2 3 0 添加输入标记 在工具栏右边的参数单选框中 选择输入 Input 将鼠标移动到输入信号线的端点 此时光标处显示出输入标 记的图形 点击鼠标左键 输入标记会将网络名或总线名包含在标记图形的内 第三章 数字频率计的软件开发环境 13 部 3 按如下步骤为 count 总线添加双向信号标记 在工具栏右边的参数单选 框中选择双向 Bidirectional 将鼠标移动到输出信号线的端点 此时光标处显 示出双向信号标记的图形 点击鼠标左键 4 在菜单中选择 File Save 保存原理图 退出原理图编辑器 ECS 3 2 4 综合综合 3 2 4 1 Synthesize 综合 当你编写程序后 并把顶层原理图连接好以后 就可以综合了 选中你的 顶层文件 双击 Synthesize Synplify Pro 图 3 12 综合 如果出现上图的小勾 表示综合没有问题 你可以双击 View RTL Schematic 来查看综合后的 RTL 原理图 3 2 4 2 定义输入输出管脚约束 选中顶层文件 双击下图中的 Assign Package Pins 该操作会提示系统将 生成一个 ucf 文件 选择是 系统将自动启动 Xilinx Pace 电子科技大学学士学位论文 14 图 3 13 分配引脚 图 3 14 Xilinx Pace 现在就可以在 LOC 栏写上管脚名 定义 I O 电平类型 输出电流大小等 需要注意的是一些 I O 是有特殊用处的 不能胡乱分配 定义完后保存退出 第三章 数字频率计的软件开发环境 15 3 2 5 布局布线布局布线 双击 Implement Design 会依次执行 Translate Map Place use IEEE STD LOGIC 1164 ALL 电子科技大学学士学位论文 26 use IEEE STD LOGIC ARITH ALL use IEEE STD LOGIC UNSIGNED ALL entity controller is port clk 48MHz rst in std logic clk 1Hz out std logic end controller architecture Behavioral of controller is signal m48M counter std logic vector 25 downto 0 signal interal std logic begin process clk 48MHz rst frequency divider begin if rst 0 then m48M counter 0 x 0000000 or 26 0 interal 0 else if clk 48MHz event and clk 48MHz 1 then rising edge clk 48MHz if m48M counter x 2DC6BFF then m48M counter 0 interal 0 else m48M counter m48M counter 1 interal 1 end if end if end if end process clk 1Hz interal end Behavioral 仿真结果可以看出 闸门信号的产生完全符合预期的要求 模块以及结果 示意图如图 4 1 所示 第四章 频率计的设计与实现 27 4 4 2 六位计数器模块六位计数器模块 前面已经介绍到 由于在 FPGA 电路中 乘除法比较耗费资源 所以这里 为了得到六位计数器的六个 BCD 同时避免除法 求余运算 程序采用六个模十 的计数器通过前级触发后级的方式来实现 用 VHDL 语言实现时 考虑到 VHDL 语言和高级语言相差较大 所以这里采 用前级触发后级的异步设计思想 通过第一级对测试信号的模十计数 如果信 号技术超过十 则触发下一级计数器计数加一 所以这里需要使用六个技术模 块 第一个计数模块与后面的计数模块不同 考虑上面的思路 第一级技术模 块的程序如下 library IEEE use IEEE STD LOGIC 1164 ALL use IEEE STD LOGIC ARITH ALL use IEEE STD LOGIC UNSIGNED ALL entity count first is port clk 48MHz clk test rst in std logic carry out out std logic bcd code out std logic vector 3 downto 0 end count first 图 4 1 闸门信号仿真结果 电子科技大学学士学位论文 28 architecture Behavioral of count first is signal basic cnt std logic vector 3 downto 0 signal carry inter std logic begin process clk test rst frequency divider begin if rst 0 then basic cnt 0 x 0000000 or 26 0 carry inter 1 else if clk test event and clk test 1 then if basic cnt x 9 then basic cnt 0 carry inter 0 else basic cnt basic cnt 1 carry inter 1 end if end if end if end process bcd code basic cnt carry out carry inter end Behavioral 同时后面的几级技术模块的功能一致 所以可以使用一个公用的模块来实 现 主要是使用上级的模十进数来触发下级模块计数 程序如下 library IEEE use IEEE STD LOGIC 1164 ALL use IEEE STD LOGIC ARITH ALL use IEEE STD LOGIC UNSIGNED ALL entity count general is port clk 48MHz carry in rst in std logic bcd code out std logic vector 3 downto 0 carry out out std logic end count general architecture Behavioral of count general is signal basic cnt std logic vector 3 downto 0 signal carry inter std logic begin 第四章 频率计的设计与实现 29 process carry in rst frequency divider begin if rst 0 then basic cnt 0 x 0000000 or 26 0 carry inter 1 else if carry in event and carry in 0 then if basic cnt x 9 then basic cnt 0 carry inter 0 else basic cnt basic cnt 1 carry inter 1 end if end if end if end process bcd code basic cnt carry out carry inter end Behavioral 通过上面程序的设计 我们可以最终将其组合成为一个六位的计数器 其 原理图以及封装图 4 2 所示 图 4 2 VHDL 语言实现的六位计数器的封 装图 左 以及内部原理图 右 电子科技大学学士学位论文 30 为了验证其计数功能 在验证过程中 给测试信号管脚 clk test 一个 频率 1MHz 的测试信号 得到如图 4 3 结果 从上面的结果可以看出 计数器可以很精确地记录输入信号在 1s 之内的 脉冲信号 同时能够在超过量程和将溢出信号 overflow 置低 4 4 3 锁存器模块锁存器模块 通过前面的工作 一个可以测量信号在 1s 之内脉冲个数的计数器已经实 现 但是由于程序的结果最终要显示给用户 而最终结果之内在 1s 最后一刻 才能计算出来 所以无法直接显示 需要一个数据锁存器来辅助实现 锁存器 的主要功能就是在计数器工作 1s 之后锁存住六位的计数结果 直到下一个 1s 结果得到后再更新数据 所以通过利用控制器模块产生的 1s 定时脉冲 频率 计数器的结果就可以稳定的显示了 由于这部分程序比较简单 这里也就不做 仿真验证了 VHDL 程序如下 library IEEE use IEEE STD LOGIC 1164 ALL use IEEE STD LOGIC ARITH ALL use IEEE STD LOGIC UNSIGNED ALL entity latch is Port in1 in STD LOGIC VECTOR 3 downto 0 in2 in STD LOGIC VECTOR 3 downto 0 in3 in STD LOGIC VECTOR 3 downto 0 图 4 3 计数器仿真结果 第四章 频率计的设计与实现 31 in4 in STD LOGIC VECTOR 3 downto 0 in5 in STD LOGIC VECTOR 3 downto 0 in6 in STD LOGIC VECTOR 3 downto 0 in7 in STD LOGIC out1 out STD LOGIC VECTOR 3 downto 0 out2 out STD LOGIC VECTOR 3 downto 0 out3 out STD LOGIC VECTOR 3 downto 0 out4 out STD LOGIC VECTOR 3 downto 0 out5 out STD LOGIC VECTOR 3 downto 0 out6 out STD LOGIC VECTOR 3 downto 0 out7 out STD LOGIC flop clk in STD LOGIC end latch architecture Behavioral of latch is begin process flop clk begin if flop clk event and flop clk 0 then out1 in1 out2 in2 out3 in3 out4 in4 out5 in5 out6 in6 out7 in7 end if end process end Behavioral 4 4 4 显示器模块显示器模块 实验拟采用六个数码管来动态显示程序的测频结果 所以在现实模块就需 要一个位选生成器来实现位选信号的产生 一个多路复用器来实现根据位选信 号选择对应的显示 bcd 码以及一个 bcd 码到低有效数码管的段选码译码器 4 4 4 1 位选模块位选模块 如同上面介绍到的一样 位选模块的主要任务就是产生合适的位选信号来 实现数码管的位选以及控制多路复用器来实现信号的选择 由于动态显示需要 单个数码管显示的最小频率为 25Hz 这里取整个位选信号产生的频率为 250Hz 为了实现固定频率 对晶振信号的定时是必不可少的 同时还要在程 电子科技大学学士学位论文 32 序达到固定时间 4ms 后 是位选信号发生变化 总结起来 用 VHDL 语言实 现的程序如下 library IEEE use IEEE STD LOGIC 1164 ALL use IEEE STD LOGIC ARITH ALL use IEEE STD LOGIC UNSIGNED ALL entity sel generator is port clk 48MHz rst in std logic clk 250Hz out std logic selects out std logic vector 2 downto 0 end sel generator architecture Behavioral of sel generator is signal m48M counter std logic vector 25 downto 0 signal selects temp std logic vector 2 downto 0 signal inter 250Hz std logic begin process clk 48MHz frequency divider begin if rst 0 then selects temp 0 m48M counter 0 inter 250Hz 1 else if clk 48MHz event and clk 48MHz 1 then m48M counter m48M counter 1 if m48M counter x 2EE00 then inter 250Hz 1 m48M counter 0 if selects temp x 5 then selects temp 0 else selects temp selects temp 1 end if else m48M counter m48M counter 1 inter 250Hz 0 end if end if end if end process 第四章 频率计的设计与实现 33 selects not selects temp clk 250Hz bcd outbcd outbcd outbcd outbcd outbcd outbcd outsegmentsegmentsegmentsegmentsegmentsegmentsegmentsegmentsegmentsegmentsegment 0000000 end case end process enableUser Constraints Floorplane IO Pre Synthesis 来实现管脚的锁定 最终负责锁 管脚的 ucf 文件内容如下所示 NET clk test LO

温馨提示

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

评论

0/150

提交评论