[an error occurred while processing this directive]
|
Вот просто пример. Может что пригодиться.
module in_interval (clk, strob, in_data, interval);
input clk;
input strob; // интервал строба больше периода clk
input [3:0] in_data;
output interval;
reg [3:0] ct;
reg dff_enable;
reg [2:0] sdvig_strob;
wire ce;
assign interval = dff_enable;
always @ (posedge clk)
begin
sdvig_strob <= {sdvig_strob[1:0], strob};
end
assign ce = sdvig_strob[1] & ~sdvig_strob[2];
always @ (posedge clk)
begin
if (ce == 1'b1)
ct <= in_data;
else if (dff_enable == 1'b1)
ct <= ct - 1'b1;
end
always @ (posedge clk)
begin
if (ce == 1'b1)
dff_enable <= 1'b1;
else if (ct == 4'h1)
dff_enable <= 1'b0;
end
endmodule
E-mail: info@telesys.ru