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

news2024/9/20 22:28:51

目录

一、实验目的

二、实验原理

三、实验内容

四、实验步骤

五、注意事项

六、思考题

七、实验过程

分频器的基本原理

什么是分频器?

 如何去分频?

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 )
	begin
		if(cnt == 2500000)
		begin
		out_clk = out_clk +1;
		cnt = 0;
		end 
			
		else
			begin
			
			cnt = cnt +1;
			
			end
	end 

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)
begin
		if(cnt==num/2-1)//如果数到一半,输出信号就进行翻转
		begin
			cnt<=cnt+4'd1;
			clk_div<=1'b1;
		end
		
		else if(cnt==num-1)//如果数完了之后,再次翻转
		begin
			cnt<=4'd0;
			clk_div<=1'b0;
		end
		
		else	//其他情况的话就进行继续数数
		begin
			cnt<=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.coloradmin.cn/o/1212539.html

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

相关文章

9.基于SpringBoot3+MybatisPlus定制化代码生成器类

我们在3.基于SpringBoot3集成MybatisPlus中讲到自定义代码生成器&#xff0c;但是往往遗留代码生成的类格式或者命名不符合要求&#xff0c;需要手工修改&#xff0c;但是当表很多时就比较头痛,所以我们自定义模板在进行代码生成 1. 新建MyTemplateEngine.java类 里面大多实现…

企业大文件传输的四大误区:你还在用传统的FTP和网盘吗?

在当前数字化时代&#xff0c;数据已经成为企业的核心资产&#xff0c;而文件传输则是数据流动的重要方式。企业需要高效、安全、稳定地传输各种类型和规模的文件&#xff0c;无论是内部协作还是外部交付。然而&#xff0c;很多企业在文件传输方面存在一些误区&#xff0c;导致…

“大数据分析师”来了,提高职业含金量,欢迎来领

大数据分析师是指在不同行业中&#xff0c;专门从事相关数据的收集、整理、分析&#xff0c;并依据数据通过科学算法模型进行行业研究、评估和预测等工作的专项人才。应用行业涉及互联网信息技术企业、科研院校、金融行业、制造业、物流、生物医疗、农业等大数据相关行业。 常…

Unity中Shader矩阵的逆矩阵

文章目录 前言一、逆矩阵的表示二、逆矩阵的作用四、逆矩阵的计算五、顺序的重要性六、矩阵的逆总结1、求矩阵的逆前&#xff0c;这个矩阵必须得是个方阵2、只有 A x A ^-1^ A^-1^ x A 1时&#xff0c;A的逆才是A^-1^3、求2x2矩阵的逆&#xff1a;交换 a 和 b 的位置&#xf…

线程安全问题及其解决

文章目录 一. 线程安全问题1.1 线程不安全的例子1.2 线程不安全的原因1.2.1 随即调度, 抢占式执行1.2.2 修改共享数据1.2.3 修改操作非原子性1.2.4 内存可见性1.2.5 指令重排序1.2.6 总结 二. 线程安全问题的解决2.1 synchronized(解决前三个问题)2.1.1 synchronized 的锁是什么…

flutter开发web应用支持浏览器跨域设置

开发web应用难免会遇到跨域问题&#xff0c;所以flutter设置允许web跨域的设置是要在你的flutter安装路径下面 flutter\bin\cache 找到flutter_tools.stamp文件&#xff0c;然后删除掉&#xff1a;这个文件是临时缓存文件 然后找到 flutter\packages\flutter_tools\lib\src\web…

上位机模块之圆形测量,基于halcon的二次开发

夸克网盘可自取。链接&#xff1a;https://pan.quark.cn/s/ac192950e051 //在此之前可以先浏览2篇博客&#xff0c;分别是序列化与反序列化和ROI绘制获取 https://blog.csdn.net/m0_51559565/article/details/134422834 //序列化与反序列化 https://blog.csdn.net/m0_51559565…

【文件读取/包含】任意文件读取漏洞 afr_2

1.1漏洞描述 漏洞名称任意文件读取漏洞 afr_2漏洞类型文件读取漏洞等级⭐⭐漏洞环境dockers攻击方式 1.2漏洞等级 高危 1.3影响版本 暂无 1.4漏洞复现 1.4.1.基础环境 靶场dockers工具BurpSuite 1.4.2.环境搭建 1.kali创建docker-compose.yml文件 touch docker-compose.ym…

msvcp140_CODECVT_IDS.dll丢失怎么办,分享两个有效的方法

在计算机使用的过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“缺少xxx.dll文件”。这些文件是动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它们包含了程序运行所需的函数和资源。而msvcp140_CODECVT_IDS.dll就是其中之一。那么&#…

PY32F002B从压缩包到实现串口printf输出

最近学习使用芯领的PY32F002B开发板&#xff0c;记录学习历程供有同样需求的人参考。 本文主要讲述利用开发板实现printf语句串口输出。 开发环境的初步搭建 官方提供了一个压缩文件&#xff0c;文件名py32f002B_231026.zip&#xff0c; 链接&#xff1a;https://pan.baidu.c…

名城银河湾220㎡5室2厅2厨3卫,精致美学演绎的格调感。福州中宅装饰,福州装修

以手作维度构境, 跳脱约定成俗的风格, 转化内外地域分际, 于静谧中凝聚丰厚的美学能量, 谦虚且沉默以对 项目信息 项目名称 | 名城银河湾 设计地址 | 福建福州 项目面积 | 220㎡ 项目户型 | 5室2厅2厨3卫 设计风格 | 现代轻奢 全案设计师通过对业主的自身的情况和生活…

博流BL602芯片 - 烧录配置

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

APISpace 验证码短信API接口案例代码

1.验证码短信API产品介绍 APISpace 的 验证码短信API&#xff0c;支持三大运营商&#xff0c;虚拟运营商短信发送&#xff0c;电信级运维保障&#xff0c;独享专用通道&#xff0c;3秒可达&#xff0c;99.99&#xff05;到达率&#xff0c;支持大容量高并发。可批量发送多个号码…

前端 vue 面试题 (一)

文章目录 v-if,v-show差别v-for和v-if虚拟dom解决什么问题vue的data为什么返回函数不返回对象比较vue&#xff0c;reactvue双向绑定原理vue虚拟dom 的diff算法vue 虚拟dom的diff算法的时间复杂度vue2与vue3的区别vue数据缓存&#xff0c;避免重复计算单页应用怎么跨页面传参vue…

Java追加式将内容写入yml文件

前言 最近需要使用java的jackson-dataformat-yaml写yml文件&#xff0c;但多数情况是在现有的文件内容中追加地写一部分新的内容。网上查了一下没有查到有直接追加的api&#xff0c;看源码偶然间找到了一个实现思路&#xff0c;记录一下。 追加写入到yml文件 使用的工具是jac…

SAPRouter Certificate即将过期更新证书

今日收到SAP发的一封邮件提示SAPRouter Certificate即将过期&#xff0c;顺便记录下更新证书的方法步骤。 1、登录SAProuter服务器&#xff0c;用户使用安装SAProuter的用户&#xff0c;我的是saprter用户 进入到/saprouter目录&#xff0c;备份certreq cred_V2 local.pse src…

深度学习_13_YOLO_图片切片及维度复原

需求&#xff1a; 在对获取的图片进行识别的时候&#xff0c;如果想减少不必要因素的干扰&#xff0c;将图片切割只对有更多特征信息的部分带入模型识别&#xff0c;而剩余有较多干扰因素的部分舍弃&#xff0c;这就是图片切割的目的&#xff0c;但是又由于模型对图片的维度有较…

DNS服务器典型配置

文章目录 安装主程序bind和安全插件bind-root修改主配置文件/etc/named.conf正向解析 安装主程序bind和安全插件bind-root yum install bind-chroot修改主配置文件/etc/named.conf vim /etc/named.conf将listen-on和allow-query的ip或域名换成any 表示为服务器所有的IP地址启…

【数据处理】Python:实现求条件分布函数 | 求平均值方差和协方差 | 求函数函数期望值的函数 | 概率论

猛戳订阅&#xff01; &#x1f449; 《一起玩蛇》&#x1f40d; &#x1f4ad; 写在前面&#xff1a;本章我们将通过 Python 手动实现条件分布函数的计算&#xff0c;实现求平均值&#xff0c;方差和协方差函数&#xff0c;实现求函数期望值的函数。部署的测试代码放到文后了&…