做游戏CG分享的网站,能源网站建设公司,上海网站建设服务站霸网络,上海正规装修公司排名软件的定时中断很难控制精准触发沿的位置#xff0c;可以通过 PL-PS 的中断完成精准的定时中断。PL 的中断通过 Verilog 代码产生#xff0c;这样紧密结合 PS-PL 的处理#xff0c;发挥各自的优势。一、PL 侧定时中断1.实际要求① 上升沿中断#xff1b;② 高电平宽度不小于…软件的定时中断很难控制精准触发沿的位置可以通过 PL-PS 的中断完成精准的定时中断。PL 的中断通过 Verilog 代码产生这样紧密结合 PS-PL 的处理发挥各自的优势。一、PL 侧定时中断1.实际要求① 上升沿中断② 高电平宽度不小于1us③ 中断计数器的时钟为 200Mhz④ 有两个中断 3ms 和0.5ms2.Verilog中断代码1 //**************************************************************************2 //*** 名称 : genintr3ms05ms.v3 //*** 作者 : xianyu_FPGA4 //*** 博客 https://www.cnblogs.com/xianyufpga/5 //*** 日期 2019-08-106 //*** 描述 : 3ms和0.5ms精准延时7 //**************************************************************************8910 modulegenintr3ms05ms11 //12 (13 //input -----------------------------------------14 input wire clk , //时钟200Mhz15 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 ;3132 //33 // 0.5ms延时34 //35 always (posedge clk) begin36 if(rst)37 cnt3ms 0;38 else if(add_cnt3ms) begin39 if(end_cnt3ms)40 cnt3ms 0;41 else42 cnt3ms cnt3ms 1;43 end44 end4546 assign add_cnt3ms 1;47 assign end_cnt3ms add_cnt3ms cnt3ms CNT3MS_END-1;4849 always (posedge clk) begin50 if(rst) begin51 intr3ms 0;52 end53 else if(end_cnt3ms) begin54 intr3ms 1;55 end56 else if(add_cnt3ms cnt3msPULSEW-1) begin57 intr3ms 0;58 end59 end6061 //62 // 3ms延时63 //64 always (posedge clk) begin65 if(rst)66 cnt05ms 0;67 else if(add_cnt05ms) begin68 if(end_cnt05ms)69 cnt05ms 0;70 else71 cnt05ms cnt05ms 1;72 end73 end7475 assign add_cnt05ms 1;76 assign end_cnt05ms add_cnt05ms cnt05ms CNT05MS_END-1;7778 always (posedge clk) begin79 if(rst) begin80 intr05ms 0;81 end82 else if(end_cnt05ms) begin83 intr05ms 1;84 end85 else if(add_cnt05ms cnt05msPULSEW-1) begin86 intr05ms 0;87 end88 end89909192 endmodule3.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 即可添加该自定义 IP2.添加 ZYNQ复位选上时钟频率设置为 200Mhz同时记得勾选中断3.连线两个中断但只有一个接口我们借用一个 Concat IP 即可4.连线可以直接点击上方 Run 自动布线会多出一个 Processor System Reset模块中断复位是高有效而ZYNQ复位是低有效此模块会协调好。而手动布线则可能出错。5.如果布线时发现自定义 IP 需要修改可以选中该 IP右键进入修改之后就可以进入到SDK进行中断代码编写了和普通PL中断是类似的。参考资料[1]V3学院FPGA教程