module pulse_asynchronous ( input CLK_I , // pulse input clock input RST_I , // pulse input reset(acive high) input PULSE_I , // pulse input input CLK_O , // pulse output clock input RST_O , // pulse output reset(acive high) output PULSE_O // pulse output ); // ============================================ // Internal Signal Define // ============================================ reg [ 1:0] r_PULSE_IFF ; reg r_PULSE_I ; reg [ 3:0] r_PULSE_FF ; reg r_PULSE_O ; // ============================================ // RTL // ============================================ // pulse input control always @(posedge CLK_I) begin if (RST_I == 1'b1) begin r_PULSE_IFF <= 2'h0 ; r_PULSE_I <= 1'h0 ; end else begin r_PULSE_IFF <= {r_PULSE_IFF[0],PULSE_I} ; if (r_PULSE_IFF[1] == 1'b1) begin r_PULSE_I <= ~r_PULSE_I ; end end end // pulse output control always @(posedge CLK_O) begin if (RST_O == 1'b1) begin r_PULSE_FF <= 4'h0 ; r_PULSE_O <= 1'h0 ; end else begin r_PULSE_FF <= {r_PULSE_FF[2:0],r_PULSE_I} ; if (r_PULSE_FF[3] != r_PULSE_FF[2]) begin r_PULSE_O <= 1'h1 ; end else begin r_PULSE_O <= 1'h0 ; end end end assign PULSE_O = r_PULSE_O ; endmodule
时间: 2023-09-01 16:12:00 浏览: 83
Double Pulse_IGBT双脉冲测试_双脉冲测试_double-pulse_
5星 · 资源好评率100%
这是一个Verilog语言编写的模块,它实现了一个异步脉冲模块。模块有6个输入和1个输出。输入包括CLK_I、RST_I、PULSE_I、CLK_O、RST_O和PULSE_O,分别表示输入脉冲时钟、输入脉冲复位信号(高电平有效)、输入脉冲信号、输出脉冲时钟、输出脉冲复位信号(高电平有效)和输出脉冲信号。输出为PULSE_O,表示输出脉冲信号。
模块内部有4个寄存器,分别是r_PULSE_IFF、r_PULSE_I、r_PULSE_FF和r_PULSE_O。其中,r_PULSE_IFF和r_PULSE_I用于控制输入脉冲信号,r_PULSE_FF和r_PULSE_O用于控制输出脉冲信号。
模块内部有两个always块,分别用于控制输入脉冲信号和输出脉冲信号。在输入脉冲信号的always块中,如果复位信号为高电平,则将r_PULSE_IFF和r_PULSE_I都清零;否则,将输入脉冲信号与r_PULSE_IFF[0]组成一个2位的向量,用于检测输入脉冲信号的上升沿,并将r_PULSE_I取反。在输出脉冲信号的always块中,如果复位信号为高电平,则将r_PULSE_FF和r_PULSE_O都清零;否则,将r_PULSE_I与r_PULSE_FF[2:0]组成一个4位的向量,用于检测输出脉冲信号的上升沿,并将r_PULSE_O赋值为1或0。
最后,使用assign语句将r_PULSE_O赋值给输出脉冲信号PULSE_O。
阅读全文