Цитата(Iptash @ May 18 2011, 18:23)

Здравствуйте.
На первый взгляд вроде простая задача, но как то в голову не приходит как это правильно сделать. Вот допустим:
Код
always @ (negedge clock) begin
result = A - B;
end
Теперь нужно выдать пачку импульсов количеством равное
result. И так все время между вычислением разности. Т.е. допустим первая разность 10 и теперь
на какой то частоте выдаются эти 10 импульсов. Следущая разность допустим 5 , выдаются 5 импульсов и т.д..
Я б сделал следующим образом:
Код
always @(posedge clk0) clock_r<=clock;//задержка тактовой на один такт новой частоты
always @(posedge clk0) imp_clocks<=~clock&clocks_r;//момент спада частоты в виде импульса на новой частоте
always @(posedge clk0)
if (imp_clocks) begin
cnt_flag<={results,1'b0};//формируется счетчик в два раза больше, нежели results, который будет использоваться в качестве разрешающего сигнала для пачки импульсов
impuls<=1'b1;//начальное значение импульса
end
else begin
cnt_flag<=(|cnt_flag)?cnt_flag<=cnt_flag-1:cnt_flag;//уменьшение на единицу до тех пор пока не будет 0
impuls<=~impuls;//формирование самого импульса
end
assign pack_imp=(|cnt_flag)?impuls:1'b0;
Тут получатся импулсы с двойной частотой clk0, скважность вроде просто поменять. Чтоб метастабильности не было можно imp_clocks пропустить еще через дополнительный триггер.