Опять наткнулся на проблему: есть кварц 28 МГц от когорого тактируется ПЛИС, на выходе нужно получить частоту 50 кГц в форме меандра и точно такую же частоту, только в зависимости от команды сдвинутую на x/10 относительно длительности импульса исходного сигнала.
В итоге из 28 МГц я получаю 50 кГц, так же вывожу опоруную частоту 1 МГц в форме меандра (50 кГц * 20) относительно которой я буду осуществлять сдвиг и, соответственно саму сдвинутую по оси Х частоту 50 кГц.
Код:
|
// ----------------------------------------------------------------------------------------
// Из тактовой частоты 28 МГц получаем на выходе 2 частоты (50 кГц и 1 МГц) в форме меандра
// ----------------------------------------------------------------------------------------
module frequency_1
(
clk,
freq_1,
freq_1_div_20,
freq_1_shift
);
input clk;
output freq_1;
output freq_1_div_20;
output freq_1_shift;
reg [8:0] count_1 = 0;
reg out_1 = 0;
reg [3:0] count_2 = 0;
reg out_2 = 0;
reg [3:0] count_3 = 0;
reg out_3 = 0;
// ----------------------------------------------------------------------------------------
// Получение на выходе частоты 50 кГц в форме меандра [clk/560]
// ----------------------------------------------------------------------------------------
always @ (negedge clk)
begin
if (count_1 == 9'b1_0001_0111)
begin
count_1 ‹= 0;
out_1 ‹= !out_1;
end
else count_1 ‹= count_1 + 1'b1;
end
// ----------------------------------------------------------------------------------------
// Получение на выходе частоты 1 МГц в форме меандра [clk/28]
// ----------------------------------------------------------------------------------------
always @ (negedge clk)
begin
if (count_2 == 4'b1101)
begin
count_2 ‹= 0;
out_2 ‹= !out_2;
end
else count_2 ‹= count_2 + 1'b1;
end
// ----------------------------------------------------------------------------------------
// Получение на выходе частоты freq_1_shift с заданным сдвигом относительно freq_1
// ----------------------------------------------------------------------------------------
always @ (negedge freq_1_div_20)
begin
if (count_3 ‹ 4'b0010)
out_3 ‹= !out_1;
else if (count_3 == 4'b0010)
out_3 ‹= out_1;
else if (count_3 == 4'b1010)
begin
out_3 ‹= !out_1;
count_3 ‹= 0;
end
else count_3 ‹= count_3 + 1'b1;
end
// ----------------------------------------------------------------------------------------
assign freq_1 = out_1;
assign freq_1_div_20 = out_2;
assign freq_1_shift = out_3;
endmodule |
К сожалению, сдвинутой частоты во временном анализе я не получаю ((((
Подскажите пожалуйста, что не так делаю...