软件的定时中断很难控制精准触发沿的位置,可以通过 PL-PS 的中断完成精准的定时中断。PL 的中断通过 Verilog 代码产生,这样紧密结合 PS-PL 的处理,发挥各自的优势。

一、PL 侧定时中断

1.实际要求

① 上升沿中断;

② 高电平宽度不小于1us;

③ 中断计数器的时钟为 200Mhz;

④ 有两个中断: 3ms 和0.5ms

2.Verilog中断代码

1 //**************************************************************************2 //*** 名称 : genintr3ms05ms.v3 //*** 作者 : xianyu_FPGA4 //*** 博客 :https://www.cnblogs.com/xianyufpga/

5 //*** 日期 :2019-08-106 //*** 描述 : 3ms和0.5ms精准延时7 //**************************************************************************

8

9

10 modulegenintr3ms05ms11 //====================================================================

12 (13 //input -----------------------------------------

14 input wire clk , //时钟,200Mhz

15 input wire rst , //复位,高电平有效16 //output ----------------------------------------

17 output reg intr3ms , //3ms中断

18 output reg intr05ms //0.5ms中断

19 );20 //====================================================================

21 parameter CNT3MS_END = 600000;22 parameter CNT05MS_END = 100000;23 parameter PULSEW = 200 ; //中断高电平维持时间24 //====================================================================

25 reg [23:0] cnt3ms ;26 wireadd_cnt3ms ;27 wireend_cnt3ms ;28 reg [23:0] cnt05ms ;29 wireadd_cnt05ms ;30 wireend_cnt05ms ;31

32 //==========================================================================33 //== 0.5ms延时34 //==========================================================================

35 always @(posedge clk) begin

36 if(rst)37 cnt3ms <= 0;38 else if(add_cnt3ms) begin

39 if(end_cnt3ms)40 cnt3ms <= 0;41 else

42 cnt3ms <= cnt3ms + 1;43 end

44 end

45

46 assign add_cnt3ms = 1;47 assign end_cnt3ms = add_cnt3ms && cnt3ms== CNT3MS_END-1;48

49 always @(posedge clk) begin

50 if(rst) begin

51 intr3ms <= 0;52 end

53 else if(end_cnt3ms) begin

54 intr3ms <= 1;55 end

56 else if(add_cnt3ms && cnt3ms==PULSEW-1) begin

57 intr3ms <= 0;58 end

59 end

60

61 //==========================================================================62 //== 3ms延时63 //==========================================================================

64 always @(posedge clk) begin

65 if(rst)66 cnt05ms <= 0;67 else if(add_cnt05ms) begin

68 if(end_cnt05ms)69 cnt05ms <= 0;70 else

71 cnt05ms <= cnt05ms + 1;72 end

73 end

74

75 assign add_cnt05ms = 1;76 assign end_cnt05ms = add_cnt05ms && cnt05ms== CNT05MS_END-1;77

78 always @(posedge clk) begin

79 if(rst) begin

80 intr05ms <= 0;81 end

82 else if(end_cnt05ms) begin

83 intr05ms <= 1;84 end

85 else if(add_cnt05ms && cnt05ms==PULSEW-1) begin

86 intr05ms <= 0;87 end

88 end

89

90

91

92 endmodule

3.PL中断封装成私有IP

①打开 Vivado,新建工程,然后选择菜单栏 Tools --- Create and Package New IP...

②Vivado 打开了一个新的界面,类似于原界面,但是多了一个选项

这时如果 Verilog 有语法错误,Source处会显示红色波浪线。也可以在此新界面修改代码,修改后保存,页面显示成编辑图标,必须点击更新才行。

③默认情况下,复位是低有效,我们可以手动改成高有效

④选择 Review and Package 可以看到 Package IP ,点击它即可完成 IP 的封装

⑤此页面自动关闭,回到原页面,可以在 Settings --- IP --- Repository 中可以看到这个自定义 IP,此页面也可以手动添加第三方 IP

⑥生成 bit 文件并以此加载 SDK。

二、ZYNQ硬中断的使用

1.进入到 Create Block Design 中,输入 genintr3ms05ms 即可添加该自定义 IP

2.添加 ZYNQ,复位选上,时钟频率设置为 200Mhz,同时记得勾选中断

3.连线,两个中断,但只有一个接口,我们借用一个 Concat IP 即可

4.连线可以直接点击上方 Run 自动布线,会多出一个 Processor System Reset模块,中断复位是高有效,而ZYNQ复位是低有效,此模块会协调好。而手动布线则可能出错。

5.如果布线时发现自定义 IP 需要修改,可以选中该 IP,右键进入修改

之后就可以进入到SDK进行中断代码编写了,和普通PL中断是类似的。

参考资料:

[1]V3学院FPGA教程

zynq网络时钟控制寄存器_ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断...相关推荐

  1. zynq网络时钟控制寄存器_【干货分享】ZYNQ开发基本流程

    ZYNQ概述 ZYNQ内部包含PS和PL两部分,PS中包含以下4个主要功能模块: Application processor unit (APU) Memory interfaces I/O peri ...

  2. 网络与系统安全笔记------网络安全协议

    网络与系统安全笔记------网络安全协议 TCP/IP脆弱性 DNS欺骗 网络安全协议 网络接口层 网络层 传输层 应用层 IPSec IPv4 IPv6 功能 体系结构 安全关联(SA) 安全策略 ...

  3. 【Xilinx AX7103 MicroBalze学习笔记6】MicroBlaze 自定义 IP 核封装实验

    目录 实验任务 实验框图 创建自定义 IP 封装 IP IP 封装界面配置 硬件设计(Vivado部分) Block Design搭建 添加 IP 库 约束文件 软件设计(SDK部分) 往期系列博客 ...

  4. ZYNQ PS端模块读书笔记-中断

    作者:ShownSun 工作室:时沿科技 文章目录 ZYNQ PS端模块读书笔记-中断 0 引言 1 环境 1.1 私有.共享和软件中断 1.2 通用中断控制器 1.3 复位和时钟 1.4 模块框图 ...

  5. ZYNQ PS端模块读书笔记-XADC

    作者:ShownSun 工作室:时沿科技 文章目录 ZYNQ PS端模块读书笔记-XADC 1 介绍 1.1 特色 1.2 系统视角 1.3 PS-XADC接口框图 1.4 编程指南 2 功能描述 2 ...

  6. Zynq PS DMA控制器应用笔记

    Zynq PS DMA应用笔记 Hello,Panda Zynq-7000系列器件PS端的DMA控制器采用ARM的IP核DMA-330(PL-330)实现.有关DMA控制器的硬件细节及相关指令集.编程 ...

  7. zynq中interrupts的学习笔记(一)

    本学习笔记参考UG585-Zynq-7000-TRM.pdf ch.7:Interrupts.文中有说的不够严谨或者是有错误的地方,欢迎指正! zynq中的interrupts有很多种,大体上分为三类 ...

  8. STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)

    本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...

  9. linux zynq ps dma,Zynq PS DMA控制器应用笔记

    Zynq-7000系列器件PS端的DMA控制器采用ARM的IP核DMA-330(PL-330)实现.有关DMA控制器的硬件细节及相关指令集.编程实例内容参考ARM官方文档: DDI0424D:dma3 ...

最新文章

  1. github下载慢,轻松提速教程
  2. handle句柄 matlab_学习随笔之Matlab句柄对象深拷贝方法
  3. linux 某个文件打不开了,linux操作系统下,exe文件为什么打不开?
  4. 来自damon的zencart二次开发教程-2.2登录模块分析
  5. JPress v2.0-rc.5 发布,同时新官网上线
  6. CrystalMaker 10.6.2 mac版 CrystalMaker X最新版
  7. android 手机 与 python服务器_Python服务器与多种客户端(Python/Java/Android)之间的通信...
  8. VMWare虚拟系统上网设置及VMWare虚拟机三种工作模式详解
  9. 制作了一个WMI 查询分析工具
  10. [C++对象模型][10]类型转化
  11. android 控件高度和图片一样高,Android 根据图片宽高比例设置控件宽高
  12. 支持向量机的基本原理
  13. 复制:为什么你说“就差一个码农了”,我们是拒绝的
  14. CGLIB代理使用与原理详解
  15. MSM8960 // F200 引导装载程序 (Bootloader) 之研读
  16. 十年前的生活小技巧文章
  17. python在windows与linux下读取doc文件
  18. java禅道_使用Java+Excel统计禅道上问题处理情况
  19. 微命令、微指令、微操作
  20. 星座运势预测,python爬虫

热门文章

  1. ASP.NET Core Docker部署
  2. C#字符串:转数组、数字
  3. 电机与系统计算机仿真作业,北邮计算机仿真期末大作业.docx
  4. python maketrans_Python maketrans()方法 - Python 教程 - 自强学堂
  5. 利用浏览器调试功能 计算 百度网盘 文件数量 V2
  6. Android之靠谱的获取本地相册图片
  7. linux c通过文件描述符以及write和read方法对文件进行读写
  8. 字符串之字符数组种是否所有的字符都只出现过一次
  9. [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充
  10. 看得懂的外观设计模式 python3 实现