Цитата(sazh @ Dec 6 2005, 19:03)

module sd_interval (clk, load, sd, out_interval);
input clk;
input load; // интервал строба load больше или равен периода clk
input [3:0] sd;
output out_interval;// длительностью в целое число sd (исключая 0)
reg [3:0] ct;// счетчик
reg trigger_enable;// интервал, в котором разрешена работа счетчика
reg [1:0] shift_left_rg;
wire enable_load;
assign out_interval = trigger_enable;
/// схема формирования одиночного импульса enable_load длительностью в один такт clk
/// по переднему фронту сигнала load
always @ (posedge clk)
begin
shift_left_rg <= {shift_left_rg[0], load};//
end
assign enable_load = shift_left_rg[0] & ~shift_left_rg[1];
/////////////////////////////////////////////////////////////////////////////
always @ (posedge clk)
begin
if (enable_load == 1'b1)
ct <= sd; // по enable_load в счетчик загружаем число sd
else if (trigger_enable == 1'b1)
ct <= ct - 1'b1;// работаем на вычитание в интервале trigger_enable
end
always @ (posedge clk)
begin
if (enable_load == 1'b1)
trigger_enable <= 1'b1;// по enable_load разрешаем интервал работы счетчика
else if (ct == 4'd1)//когда счетчик досчитает до значения единица, запрещаем работу счетчика
trigger_enable <= 1'b0;
end
endmodule
Спасибо большое за такой способ решения, я не знаком с программированием там, мне задано было схемой нарисовать, вот щас накидал схему, посмотрите будет ли она работать(возможности проверить нет только через неделю)Load управляет загрузкой данных
Только одна поправочка нужна что бы импульс был следующего вида 100000001, или 10001 то есть ровная линия, а потом вниз уходить будет на сколько то тактов а потом опять ровная линия