1、延时代码如下:
module shift
(
din,clk,rst_n,
dout,delay_out,out
);
input din; //串行数据输入
input clk; //控制时钟
input rst_n; //复位信号,低电平有效
output reg [DELAY_PERIOD-1:0] dout;
output reg [DELAY_PERIOD-1:0] delay_out;
output reg out;
parameter DELAY_PERIOD = 4;
//右移 ,补高位
always @(posedge clk,negedge rst_n)begin
if(!rst_n) //异步复位
dout <= 4’d0;
else
begin
dout <= dout >>1; //寄存器内容右移一位
dout[DELAY_PERIOD-1] <= din; //输入数据补充最高位
end
end
//左移 ,补低位
always @(posedge clk,negedge rst_n)begin
if(!rst_n)
delay_out <= 4’d0;
else
begin
delay_out <= {delay_out[DELAY_PERIOD-2:0],din};
end
end
//延时
always @(posedge clk,negedge rst_n) begin
if(!rst_n)
out=1’b0;
else if (delay_out == {DELAY_PERIOD{1’b1}})
out <= 1’b1;
else
out <= 1’b0;
end
endmodule