Ладно. С той ошибкой разобрался переписав половину кода
Теперь такой вопрос к уважаемым знатокам Verilog.
Делаю увеличение частоты строчной развертки вдвое, как советовали, чтобы выводить на VGA.
Я его уже переписал раз 5 разными способами - почти одно и тоже Вот кусок кода с одним из способов, который не работает.
Код:
input SVRTC;
input SHRTC; // "Родной" сигнал гор. развертки
input clk;
output VRTC_out;
output HRTC_out; // Выходной сигнал
output [8:0] hr_cnt; // Счетчик тактов (выход сделан просто для контроля пока)
reg [8:0] vr_cnt;
reg [8:0] hr_cnt;
reg HRTC_out;
........................................(ВЫРЕЗАННЫЙ ОСТАЛЬНОЙ КОД)
always @(negedge clk or negedge SHRTC)
begin
if (SHRTC == 'b0)
begin
if (hr_cnt == 'd272) {hr_cnt, HRTC_out} <= {1'b0, 1'b0};
else hr_cnt <= hr_cnt + 1;
end
else if (hr_cnt != 'd272) hr_cnt <= hr_cnt + 1;
case (hr_cnt)
'd15: HRTC_out <= 'b1;
'd255: HRTC_out <= 'b0;
'd271: {HRTC_out, temp1} <= {1'b1, 1'b0};
endcase
if (hr_cnt[0] === 1'bx) {hr_cnt, HRTC_out} <= {9'b100010000, 1'b0};
end
endmodule
Этот процесс должен при negedge "родного" сигнала сделать выходной low и включить счетчик по которому сформировать еще и второй импульс в нужное время и далее ждать следующего negedge "родного" сигнала.
Дак что ни делаю, на выходе только ХХХХХХ по всем сигналам. (см. вложение) Ведь наверняка какая-то глупая ошибка!
Вот очередной вариант сделал - тоже не пашет:
Код:
assign HRTC_out = (hr_cnt < 'd16) | ((hr_cnt > 'd254) & (hr_cnt < 'd272)) ? 1'b0 : 1'b1;
always @(negedge clk or negedge SHRTC)
begin
if (SHRTC == 'b0)
begin
if (hr_cnt != 9'b111111111) hr_cnt <= hr_cnt + 1;
else hr_cnt <= 9'b000000000;
end
else if (hr_cnt != 9'b111111111) hr_cnt <= hr_cnt + 1;
end
endmodule