企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
` `在使用zynq中,常常需要将PL部分的中断引入到PS,这时候需要借助AXI GPIO的中断,进入AXI GPIO的信号会在信号的上升沿和下降沿产生一个与AXI时钟周期一样时间的高电平中断信号。如下图所示。 ![](https://img.kancloud.cn/41/a9/41a9feff53bfdbe68d48e8e7d29944d7_833x116.png) ` `在这种情况下,会出现在时钟上升沿和下降沿都产生一个中断信号,导致两次触发中断信号,造成处理错误。 ` `为了避免这种情况的产生,对进入AXI GPIO的信号需要进行同步处理,比如想只在信号的上升沿产生中断信号,则可以利用与AXI GPIO相同的时钟对信号进行截取。 ``` module top_module (); reg clk=0; reg din; wire dout; always #5 clk = ~clk; // Create clock with period=10 initial `probe_start; // Start the timing diagram `probe(clk); // Probe signal "clk" // A testbench initial begin #10 din <= 1; #60 din <= 0; #50 din <= 1; #60 din <= 0; $display ("Hello world! The current time is (%0d ps)", $time); #200 $finish; // Quit the simulation end test inst1( .clk(clk), .sig_in(din), .sig_out(dout) ); endmodule module test( input wire clk, input sig_in, output sig_out ); reg ff1; reg ff2; assign sig_out = ((~ff2) & ff1); always@(posedge clk) begin ff1 <= sig_in; ff2 <= ff1; end reg [31:0]ad_time_cnt; always@(posedge clk or posedge sig_out) begin if( sig_out == 1'b1)begin ad_time_cnt <= 'd0; end else begin ad_time_cnt <= ad_time_cnt +1'b1 ; end end `probe(sig_in); `probe(sig_out); `probe(ad_time_cnt); endmodule ``` ![](https://img.kancloud.cn/0e/c7/0ec701c6fb7e3ff70b86a010ce64f0f5_774x118.png) ` `这样这个信号在进入AXI GPIO时,上升沿和下降沿的信号将会合并为一个信号,从而只产生一次中断。