今天再考虑一个问题,用FPGA产生单个脉冲和两个脉冲,因为有的时候单脉冲和双脉冲(甚至三脉冲)有特殊的用途,在思索了一番之后,决定用下面的方法实现:让计数器从0开始计数,计数到一定时候产生脉冲,计数完后,不要回到零,回到产生脉冲的地方后面的某个值,这样就可以产生一个脉冲。这里我只做演示,脉冲的位置,脉宽,脉冲的个数可以自己设定
单脉冲程序:
module s_pulse(clk,rst_n,pulse_out);
input clk ;
input rst_n ;
output pulse_out;
reg [4:0] cnt ;
always @ (posedge clk or negedge rst_n) //原程序只是做说明演示,并未考虑节约资源
begin
if (rst_n == 1'b0 ) cnt <= 5'b0;
else if(cnt == 5'd31) cnt <= 5'd10; //计满后,回到10
else cnt <= cnt + 1'b1;
end
assign pulse_out = (cnt == 5'd8);
endmodule
仿真结果如下:
产生双脉冲的程序:
module s_pulse(clk,rst_n,pulse_out);
input clk ;
input rst_n ;
output pulse_out;
reg [4:0] cnt ;
reg pulse_out;
always @ (posedge clk or negedge rst_n)
begin
if (rst_n == 1'b0 ) cnt <= 5'b0;
else if(cnt == 5'd31) cnt <= 5'd11; //计满后回到11
else cnt <= cnt + 1'b1;
end
always @ (cnt)
begin
case(cnt)
5'd5 : pulse_out <= 1'b1;
5'd10 : pulse_out <= 1'b1;
default : pulse_out <= 1'b0;
endcase
end
endmodule
仿真结果
用户399933 2011-5-1 21:13