EDA实验------数控分频器设计(QuartusII)

目录

一、实验目的

二、实验原理

三、实验内容

四、实验步骤

五、注意事项

六、思考题

七、实验过程

分频器的基本原理

什么是分频器?

 如何去分频?

1.创建新项目

2.创建Verilog文件,写入代码

3.连接电路 

​编辑 锁相环的创建

 4.烧录文件


一、实验目的

  1. 学习数控分频器的设计、分析和测试方法。
  2. 了解和掌握分频电路实现的方法。
  3. 掌握EDA技术的层次化设计方法。

二、实验原理

        数控分频器的功能就是当输入端给定不同的输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器来设计完成的,方法是将计数溢出位与预置数加载输入信号相接得到。

三、实验内容

        本实验要求完成的任务是在时钟信号的作用下,通过输入四位的拨码开关输入不同的数据,改变分频比,使输出端口输出不同频率的时钟信号,达到数控分频的效果。在实验中时,数控分频器的数字时钟输入2HZ作为输入的时钟信号(所以事先要先通过编程得到这个时钟信号),用四位拨码开关做为数据的输入,当拨码开关置为一个二进制数时,在输出端口输出对应频率的时钟信号,用输出端口接LED灯来观察频率的变化。

四、实验步骤

图示如下:

表4-1  端口管脚分配表

端口名

对应FPGA管脚

说       明

CLK

209

时钟为10KHZ

DIN

212、213、34、35

输入数据

LED

167

分频输出

LED_CS

174

  1. 打开QUARTUSII软件,新建一个工程。
  2. 新建一个Schematic File 文件。
  3. 新建一个锁相环将输入的50MHz的时钟分频成10MHz。
  4. 新建两个Verilog File,打开Verilog编辑器对话框,第一个文件的功能是将10MHz分频成2Hz。第二个文件的功能是实现数控分频器设计。
  5. 按照实验原理和自己的想法,在Verilog编辑窗口编写Verilog程序。
  6. 编写完Verilog程序后,保存起来。
  7. 从设计文件创建模块。
  8. 对自己编写的Verilog程序进行编译并仿真,对程序的错误进行修改。
  9. 在 Schematic File文件中,在空白处双击鼠标左键,在 Symbol 对话框左上角的libraries 中,分别将 创建的模块放在图形文件 Schematic File中,加入输入、输出引脚,双击每个引脚,进行引脚命名,并锁定管脚,将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)
  10. 编译仿真无误后,依照拨码开关、LED与FPGA的管脚连接表(表1-1、表1-2)或参照附录进行管脚分配。表4-1是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。
  11. 用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编程思想一致。

五、注意事项

  1. 注意观察当输入数据改变是输出的反应。
  2. 一定要把没用的管教设置成三态输入。
  3. 对实验现象进行分析总结。

六、思考题

  1. 简述锁相环的基本原理及应用。
  2. 总结本次实验的心得体会。

七、实验过程

分频器的基本原理

什么是分频器?

分频就是生成一个新时钟,该新时钟的频率是原有时钟频率的整数分之一倍,新周期是原有周期的整数倍。再简单来说,让你手撕一个四分频电路,就是写代码生成一个周期是原来四倍的时钟,如果手撕一个三分频电路,就是写代码生成一个周期是原来三倍的时钟。但是奇数分频会比偶数分频复杂一些。

 如图所示,这就是一个二分频的结果图,堆输入信号CP进行二分频。

 如何去分频?

很简单,我们只需要去进行数数就可以了,对输入信号进行周期数数,比如要进行4分频的话,那么我们对输入信号周期数到2,就进行一次翻转,然后再数到2又一次进行翻转,那么输出信号的一个周期就等于输入信号的4个周期。(如下图所示)

 分频分为奇数分频和偶数分频,上面的例子是对于偶数分频的,偶数分频是比较简单的,只需要去对半开就行了,一半是低电平另一半就是高电平。但是对于奇数分频的话会比较麻烦,奇数分频我们可以把奇数分频转换为偶数分频去实现,也就是说其中有一段是为空电平的,比如5分频,对输入信号进行周期数数,把输入信号其中一个周期设置为空电平即可,然后剩下4个周期数到其中一半为低电平,另一半为高电平就行了。下面项目我就以偶数分频为示例,如果你们对奇数分频感兴趣的话可以去自己试试。

1.创建新项目

打开你的QuartusII,然后点击New project,就去创建新项目。

 然后设置项目的路径和名称(自己设置就好了)

选择相对应的芯片类型(看自己情况选择) 

 创建完成!

2.创建Verilog文件,写入代码

点击New,创建文件

 选择Verilog文件,创建

然后就是写代码,写完之后就进行保持文件,把文件的名称跟模块的名称改成一样。(必须一致)

根据实验要求我们要去创建两个Verilog文件,如下所示: 

第一个文件 div.v 文件,此文件目的是把输入信号的10MHz频率转换为2Hz频率。代码如下。

module div(clk,out_clk);
input wire clk;
output out_clk;
reg out_clk;reg [26:0] cnt;
always@(posedge clk )beginif(cnt == 2500000)beginout_clk = out_clk +1;cnt = 0;end elsebegincnt = cnt +1;endend endmodule 

第二个文件就是去实现数控分频,也就是前面一个文件分频后的2Hz输入信号进行分频。代码如下:

module clk_even_div(input clk,//输入信号input [3:0] num,//输入要进行的分频数,偶数output reg clk_div//输出信号频率
);reg [3:0] cnt=4'd0;//临时数据,进行数数统计always @(posedge clk)
beginif(cnt==num/2-1)//如果数到一半,输出信号就进行翻转begincnt<=cnt+4'd1;clk_div<=1'b1;endelse if(cnt==num-1)//如果数完了之后,再次翻转begincnt<=4'd0;clk_div<=1'b0;endelse	//其他情况的话就进行继续数数begincnt<=cnt+4'd1;end
end
endmodule

然后写完之后保存,注意代码模块的名称必须与文件的名称一致!!

最后就是点击编译运行,运行无误。代码完成之后就进入到下一步,连接电路。

3.连接电路 

 创建block文件

 然后对前面写好的Verilog文件,去创建子模块文件,如图所示,鼠标右键,点击创建子模块文件。如图所示:

点开元器件,这里我们就可以看到project文件夹下面有我们前面Verilog文件的模块元器件。 

 锁相环的创建

根据实验的要求,我们要去创建一个锁相环,所以这里我单独拿出来讲这么去创建这么一个锁相环。

这里,我们点击箭头指向的这个按钮。 

然后就是勾选第一个,意思是创建一个自定义的元器件。 

  1.  搜索pll
  2. 下面就会显示出ALPLL,点击选中
  3. 然后进行命名
  4. 勾选AHDL,最后点击Next下一步

 看到这里,我们根据实验要求,把这个输入频率改为50MHz,然后点击下一步

 然后就是这选项都不勾选,直接继续下一步

 然后,这里我们点击输入你想要的输出频率,这里我们就设置为输出10MHz的频率,最后就是Next下一步。

然后下一步就是勾选这个 然后点击完成就行了。

点开元器件,我们就可以看到这里生成了一个我们设置的锁相环了,拿出来用就行了 最后,进行电路图的连接了,我这里就已经连接好了。

剩下的就是去进行引脚的配置了。 

 弄完之后,保存这个block文件,然后设置为顶层文件,最后点击编译运行

 运行无误后,我们就可以进行烧录操作了。

 4.烧录文件

点开此处。

 这里我们会看到,下面有一个芯片,这个也就是我们写好了的sof文件,然后就是通过你的电脑接口去连接到开发板,如果你看到上面有一个No Hardware的时候,你点击旁边的按钮进行接口设置,设置为USB接口即可(USB线连接了你的开发板就会自动显示出来的)。最后点击start就可以进行烧录了。 

以上就是本期的全部内容了,我们下一次见! 

分享一张壁纸:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu18.04安装google浏览器

下载google安装包 wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 安装google浏览器 sudo dpkg -i google-chrome-stable_current_amd64.deb 执行安装 sudo apt-get -f install 启动浏览器 在应用程序中找到google图标点击运行

物联网AI MicroPython学习之语法 GPIO输入输出模块

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; GPIO 介绍 模块功能: GPIO通用输入输出。 接口说明 GPIO - 构建GPIO对象 函数原型&#xff1a;Pin(port, dir , pull)参数说明&#xff1a; 参数类型必选参数&#xff1f;说明portintY对应开发板的引脚号…

基础课4——客服中心管理者面临的挑战

客服管理者在当今的数字化时代也面临着许多挑战。以下是一些主要的挑战&#xff1a; 同行业竞争加剧&#xff1a;客服行业面临着来自同行业的竞争压力。为了获得竞争优势&#xff0c;企业需要不断提高自身的产品和服务质量&#xff0c;同时还需要不断降低成本、提高效率。然而…

【入门Flink】- 11Flink实现动态TopN

基本处理函数&#xff08;ProcessFunction&#xff09; stream.process(new MyProcessFunction())方法需要传入一个 ProcessFunction 作为参数&#xff0c;ProcessFunction 不是接口 &#xff0c; 而是一个抽象类 &#xff0c;继承了AbstractRichFunction&#xff0c;所有的处…

Oracle(2-2)Oracle Net Architecture

文章目录 一、基础知识1、Oracle Net Connections Oracle网络连接2、C/S Application Connection C/S应用程序连接3、OSI Communication Layers OSI通信层4、Oracle Protocol Support Oracle协议支持5、B/S Application Connections B/S应用程序连接6、TwoTypes JDBC Drivers 两…

Vue 2学习(路由、history 和 hash 模式、)-day014

一、路由简介 路由&#xff08;route&#xff09;就是一组 key-value 的对应关系多个路由&#xff0c;需要经过路由器&#xff08;router&#xff09;的管理 在 Vue 中也有路由&#xff0c;Vue 中的路由主要是通过 vue-rounter 这个插件库来实现&#xff0c;它的作用就是专门用…

力扣双周赛 -- 117(容斥原理专场)

class Solution { public:long long c2(long long n){return n > 1? n * (n - 1) / 2 : 0;}long long distributeCandies(int n, int limit) {return c2(n 2) - 3 * c2(n - limit 1) 3 * c2(n - 2 * limit) - c2(n - 3 * limit - 1);} };

Python+selenium自动化测试

批量执行完用例后&#xff0c;生成的测试报告是文本形式的&#xff0c;不够直观&#xff0c;为了更好的展示测试报告&#xff0c;最好是生成HTML格式的。 unittest里面是不能生成html格式报告的&#xff0c;需要导入一个第三方的模块&#xff1a;HTMLTestRunner 一、导入HTML…

Peoeasy机器人:原点无法重置问题

机械手在伺服关闭的模式下&#xff0c;插入定位插销&#xff0c;进入机构设定重置原点&#xff0c;发现PUU值没有变化 问题原因 台达软件版本比较多&#xff0c;每个版本重置原点的模式和马达偏差角的默认值是有一定差异的。再重置原点之前尽可能先确认一下重置原点的模式和马…

博流BL602芯片 - 烧录配置

硬件介绍 淘宝上买的核心板&#xff0c;大概结构如上。 直接插入电脑usb&#xff0c;即可实现供电、下载&#xff08;控制BOOT/EN&#xff09;、串口通讯 固件包 1、环境配置 1.1串口 开发板使用了 CH340G 的 USB 转串口芯片&#xff0c;自行安装CH340串口驱动。 1.2编译环境…

【Android】统一系统动画

需求&#xff1a;除panel动画效果为弹出之外&#xff0c;其余的应用效果为渐入渐出 从系统层面统一把控动画效果&#xff0c;而不是单个应用自己处理 Android系统版本&#xff1a;9.0 代码地址 \frameworks\base\core\res\res\values\styles.xml 当时看注释&#xff0c;以为…

iOS:何为空指针和野指针

一&#xff1a;什么是空指针和野指针 1、空指针 ①.没有存储任何内存地址的指针就成为空指针&#xff08;NULL指针&#xff09; ②.空指针就是被赋值为0的指针&#xff0c;在没有被具体初始化之前&#xff0c;其值为0. //以下都是空指针&#xff0c;eg: Person *p1 NULL; …

RGB转Bayer,一个小数点引发的血案

前几天写了一个RGB数据转Bayer格式的函数&#xff0c;经过测试功能正常。后来把这个函数用到一个数据库构建中&#xff0c;结果数据库出来的结果一直是一张黑图&#xff0c;追查了好几个小时&#xff0c;总算把这只虫子找出来了&#xff0c;原来是一个整数后面的小数点作祟。 …

⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 约束 ⑦【MySQL】约束条件1. 约束的基本使用2.…

Flutter笔记:使用Flutter构建响应式PC客户端/Web页面-案例

Flutter笔记 使用Flutter构建响应式PC客户端/Web页面-案例 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/detai…

软件工程-第7章 面向对象方法基础

第7章 面向对象方法基础 面向对象的基本概念 面向对象方法的世界观&#xff1a;一切系统都是由对象构成的&#xff0c;他们的相互作用、相互影响&#xff0c;构成了大千世界的各式各样系统。面向对象方法是一种以对象、对象关系等来构造软件系统模型的系统化方法。 面向对象 …

从0到0.01入门React | 009.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Mac M3 芯片安装 Nginx

Mac M3 芯片安装 Nginx 一、使用 brew 安装 未安装 brew 的可以参考 【Mac 安装 Homebrew】 或者 【Mac M2/M3 芯片环境配置以及常用软件安装-前端】 二、查看 nginx 信息 通过命令行查看 brew info nginx可以看到 nginx 还未在本地安装&#xff0c;显示 Not installed …

k8s之Helm

理论&#xff1a; 什么是 He lm 在没使用 helm 之前&#xff0c;向 kubernetes 部署应用&#xff0c;我们要依次部署 deployment、svc 等&#xff0c;步骤较繁琐。 况且随着很多项目微服务化&#xff0c;复杂的应用在容器中部署以及管理显得较为复杂&#xff0c;helm 通过打包…