FPGA的学习分享--03 时钟IP核

这篇具有很好参考价值的文章主要介绍了FPGA的学习分享--03 时钟IP核。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需要掌握:
1.博宸电子ZYNQ7020DEV开发板
2.Vivado 2018.3
3.一定的verilog语法基础

一.任务剖析

1.1 实验任务

通过引入时钟IP核,实现01节led流水灯的速率加快一倍和减小一倍。

1.2 时钟IP核简介

1.2.1 个人理解

在我看来,时钟IP核就是产生多个时钟的“芯片”。将系统时钟输入此芯片,时钟IP核会根据每个人配备的要求,生成不同的时钟。

不同点在于:1.时钟频率 2.占空比


“当然,特别专业的术语还请读者朋友们在网上搜索一下。因为我本人只是一名大二学生,还不能做到说出那么专业的话语。我也不想进行复制粘贴这一没有意义的工作。我只想在这里分享我在学习此开发板的过程和个人的一些理解,是从一名学习者的视角编写的博客,还请各位大佬见谅。”


基于本实验目的,我们可以利用时钟IP核输出两个时钟A,B。时钟A的频率应该是系统时钟频率的二倍(100MHZ)
时钟B的频率应该是系统时钟频率的一半(25MHZ)

1.2.2 时钟IP核的创建

FPGA的学习分享--03 时钟IP核,fpga开发,学习,tcp/ip
双击箭头3中的选项,出现下图
FPGA的学习分享--03 时钟IP核,fpga开发,学习,tcp/ip
配置界面与上图一致。然后点击Output Clocks.进行输出时钟的配置。命名最好带有时钟特点。
FPGA的学习分享--03 时钟IP核,fpga开发,学习,tcp/ip
配置完成后,下拉界面,选择复位低电平有效。这里主要是想与之前的理解保持一致。
FPGA的学习分享--03 时钟IP核,fpga开发,学习,tcp/ip
然后点击OK,这样你就拥有了属于自己的第一个时钟IP核。


之后在软件中间区域的Sources中打开下图的蓝色文件。
FPGA的学习分享--03 时钟IP核,fpga开发,学习,tcp/ip


会看到出现了如图所示代码,接下来只需要将这个模块例化到之前所创建的led流水灯代码中即可。
不过这里为了和01节作出区分,博主新建了一个文件,并命名为pll_clock_stream。本文的代码编写和例化均在这一文件下进行。
FPGA的学习分享--03 时钟IP核,fpga开发,学习,tcp/ip

二. 实验代码

2.1 代码内容

2.1.1 原速率

module pll_clock_stream(
  input			     sys_clk,
  input 		     sys_rst_n,
  
  output reg [3:0]   led       //设置为寄存器类型,否则第二个always模块会报错
  );

//定义一个1s的计时器,时钟频率为50MHz
reg [25:0] cnt;


//定义时钟IP核的不同频率时钟
wire  clk_out100M;
wire  clk_out25M;

//系统时钟sys_clk --> 50MHZ
always @(posedge sys_clk or negedge sys_rst_n) begin
		if (!sys_rst_n)
		cnt <= 26'd0;
		else if(cnt < 26'd5000_0000)
		cnt <= cnt + 1'b1;
		else cnt <= 26'd0;
end

//通过计时器控制led交替闪烁,1s内闪烁4个灯	
always @(cnt) begin
		if(cnt<26'd1250_0000) led <= 4'b0001;
		if(cnt<26'd2500_0000 && cnt >= 26'd1250_0000) led <= 4'b0010;
		if(cnt<26'd3750_0000 && cnt >= 26'd2500_0000) led <= 4'b0100;
		if(cnt<26'd5000_0000 && cnt >= 26'd3750_0000) led <= 4'b1000;
end

clk_wiz_0 u_clk_wiz_0(
        .clk_out100M                 (clk_out100M), 
        .clk_out25M                  (clk_out25M),  
        
        .resetn                      (sys_rst_n),      
        .locked                      (),      
        
        .clk_in1                     (sys_clk)      

);

endmodule

2.1.2 加快一倍

module pll_clock_stream(
  input			     sys_clk,
  input 		     sys_rst_n,
  
  output reg [3:0]   led       //设置为寄存器类型,否则第二个always模块会报错
  );

//定义一个1s的计时器,时钟频率为50MHz
reg [25:0] cnt;


//定义时钟IP核的不同频率时钟
wire  clk_out100M;
wire  clk_out25M;

//系统时钟clk_out100M --> 100MHZ
always @(posedge clk_out100M or negedge sys_rst_n) begin
		if (!sys_rst_n)
		cnt <= 26'd0;
		else if(cnt < 26'd5000_0000)
		cnt <= cnt + 1'b1;
		else cnt <= 26'd0;
end

//通过计时器控制led交替闪烁,1s内闪烁4个灯	
always @(cnt) begin
		if(cnt<26'd1250_0000) led <= 4'b0001;
		if(cnt<26'd2500_0000 && cnt >= 26'd1250_0000) led <= 4'b0010;
		if(cnt<26'd3750_0000 && cnt >= 26'd2500_0000) led <= 4'b0100;
		if(cnt<26'd5000_0000 && cnt >= 26'd3750_0000) led <= 4'b1000;
end

clk_wiz_0 u_clk_wiz_0(
        .clk_out100M                 (clk_out100M), 
        .clk_out25M                  (clk_out25M),  
        
        .resetn                      (sys_rst_n),      
        .locked                      (),      
        
        .clk_in1                     (sys_clk)      

);

endmodule

2.1.3 减小一倍

module pll_clock_stream(
  input			     sys_clk,
  input 		     sys_rst_n,
  
  output reg [3:0]   led       //设置为寄存器类型,否则第二个always模块会报错
  );

//定义一个1s的计时器,时钟频率为50MHz
reg [25:0] cnt;


//定义时钟IP核的不同频率时钟
wire  clk_out100M;
wire  clk_out25M;

//IP时钟clk_out25M --> 25MHZ
always @(posedge clk_out25M or negedge sys_rst_n) begin
		if (!sys_rst_n)
		cnt <= 26'd0;
		else if(cnt < 26'd5000_0000)
		cnt <= cnt + 1'b1;
		else cnt <= 26'd0;
end

//通过计时器控制led交替闪烁,1s内闪烁4个灯	
always @(cnt) begin
		if(cnt<26'd1250_0000) led <= 4'b0001;
		if(cnt<26'd2500_0000 && cnt >= 26'd1250_0000) led <= 4'b0010;
		if(cnt<26'd3750_0000 && cnt >= 26'd2500_0000) led <= 4'b0100;
		if(cnt<26'd5000_0000 && cnt >= 26'd3750_0000) led <= 4'b1000;
end

clk_wiz_0 u_clk_wiz_0(
        .clk_out100M                 (clk_out100M), 
        .clk_out25M                  (clk_out25M),  
        
        .resetn                      (sys_rst_n),      
        .locked                      (),      
        
        .clk_in1                     (sys_clk)      

);

endmodule

2.2 分析

仔细阅读上述三个代码,其主要逻辑与01节都是相同的。只是将时钟的频率改为100MHZ和25MHZ,而这一功能的实现,依靠的就是时钟IP核。

例化”是将时钟IP核和实验代码相连接的桥梁,通过对应端口连接,将时钟IP核输出的clk_out100M时钟引入到实验代码中,令其成为计数器cnt计数时钟上升沿的时钟。又因为clk_out100M的频率恰好是系统时钟sys_clk的2倍,自然cnt计数就快了原先的一倍,也就达到了流水灯速率提高一倍的实验目的。(减小一倍也是同理,只不过clk_out25M是系统时钟频率的一半罢了)

clk_wiz_0 u_clk_wiz_0(
        .clk_out100M                 (clk_out100M), 
        .clk_out25M                  (clk_out25M),  
        
        .resetn                      (sys_rst_n),      
        .locked                      (),      
        
        .clk_in1                     (sys_clk)      

三. 仿真部分

3.1 仿真代码

3.2 波形图展示

3.2.1 原速率

FPGA的学习分享--03 时钟IP核,fpga开发,学习,tcp/ip

3.2.2 加快一倍

FPGA的学习分享--03 时钟IP核,fpga开发,学习,tcp/ip

3.2.3 减小一倍

FPGA的学习分享--03 时钟IP核,fpga开发,学习,tcp/ip

从波形图上方时间互相对照即可得出,流水灯的速率确实加快和减小了一倍。所以本次实验成功。文章来源地址https://www.toymoban.com/news/detail-820406.html

到了这里,关于FPGA的学习分享--03 时钟IP核的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA原理与结构(16)——时钟IP核的使用与测试

    系列文章目录:FPGA原理与结构(0)——目录与传送门         本文介绍xilinx的时钟IP核 Clocking Wizard v6.0的具体使用与测试过程,在学习一个IP核的使用之前,首先需要对于IP核的具体参数和原理有一个基本的了解,具体可以参考: FPGA原理与结构——时钟IP核原理学习 https:/

    2024年02月08日
    浏览(41)
  • 【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之DDR3 IP简单读写测试(六)

    本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光同创PGL22G开发平台)简介 盘古22K开发板是基于紫光同创Logos系列PGL22G芯片设计的一款FPGA开发板,全

    2024年01月23日
    浏览(66)
  • FPGA 低延时 TCP UDP IP协议栈兼容1G 10G 25G MAC

    在计算和数据中心、军事和航天、政府、仪器与测量、金融服务和广播和视频等行业,需要高可靠性的硬件和软件产品,帮助客户更快地开发部署新一代产品,减少技术和市场风险,我司研发的低延迟TCP/IP的IP核的传输速率高于传统网口,延迟较低,可以解决网络通信、数据

    2024年02月21日
    浏览(42)
  • FPGA 中 IP基础学习

    首先,要知道什么是IP。Intellecture Property,相当于软件领域的API函数库,三方开源项目。要开发一个真正可用的电路设计,不管什么领域,总会使用到一些IP,不太可能从头开始。IP分为硬核和软核,我们今天讲的是软核IP。 IP 为了方便使用,业界对于IP 约定了封装的关键格式

    2024年02月16日
    浏览(31)
  • 【Lattice FPGA 开发】IP核的调用

    本文介绍Diamond开发软件进行IP核调用与对应官方文档查找方法。 Diamond软件中,根据所选目标FPGA器件型号的不同,调用IP核的方式不同。共两种:一种是“IPexpress”;另一种是“Clarity Designer”。 IPexpress调用IP核: Clarity Designer调用IP核: 接下来分别对两种情况的调用进行说明

    2024年04月12日
    浏览(49)
  • FPGA实现 TCP/IP 协议栈 纯VHDL代码编写 提供数据回环工程源码和技术支持

    FPGA实现 TCP/IP 协议栈 服务器 纯VHDL代码编写 提供4套vivado工程源码和技术支持 没玩过TCP网络通信都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前网上fpga实现udp协议的源码满天飞,我这里也有不少,但用FPGA纯源码实现TCP的项目却很少,能上

    2024年02月16日
    浏览(47)
  • lv7 嵌入式开发-网络编程开发 03 TCP/IP与五层体系结构

    目录 1 TCP/IP协议族体系结构 1.1 OSI与TCP/IP 1.2 TCP/IP 的体系结构  1.3 TCP/IP 体系结构的另一种表示方法 1.4 沙漏计时器形状的 TCP/IP 协议族 2 五层协议的体系结构 2.1 各层的主要功能  2.2 互联网中客户-服务器工作方式 2.3 同时为多个客户进程提供服务  3 练习 是事实上的国际标

    2024年02月07日
    浏览(68)
  • 学习笔记之FPGA的IP核及其应用

          目录 1. FPGA的IP核定义和分类 2. PLL锁相环  2.1 PLL的基础知识 2.2 PLL核的调用 3. ROM IP核 4. RAM IP核 5. FIFO IP核         FPGA的IP核是在可编程逻辑器件(FPGA)中可以实现特定功能的可重用模块,它们以形式化的方式描述了硬件的功能和接口。如图所示为 PLL 大体的一个结

    2024年03月22日
    浏览(43)
  • FPGA实现 TCP/IP 协议栈 纯VHDL代码编写 提供3套vivado工程源码和技术支持

    FPGA实现 TCP/IP 协议栈 服务器 纯VHDL代码编写 提供4套vivado工程源码和技术支持 没玩过TCP网络通信都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前网上fpga实现udp协议的源码满天飞,我这里也有不少,但用FPGA纯源码实现TCP的项目却很少,能上

    2024年02月04日
    浏览(87)
  • FPGA原理与结构——RAM IP核原理学习

    系列文章目录:FPGA原理与结构(0)——目录与传送门 目录 一、什么是RAM 二、RAM IP介绍 1、RAM分类简介  2、可选的内存算法 (1)Minimum Area Algorithm(最小面积算法) (2)Low Power Algorithm (低功耗算法) (3)Fixed Primitive Algorithm (固定模块算法) (4)小结 3、位宽 4、工作模

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包