Vasily_A, Вы меня тоже простите за резкость. Признаюсь, намеренно так написал, чтобы спровоцировать ответ.

Сообщение от
Vasily_A
самого интересного все равно нет - я все думал, как на цплд плл для пиксельклока сделать, пусть даже с внешним гун.
смысл - подключение без вывода клока из компа и без ручной подстройки.
Да, это было бы оптимальным решением. И даже существовали специализированные чипы, способные генерировать пиксельклок по строчным СИ и количеству пикселей в строке. Но увы, это дефицитные и дорогие чипы, как я понял давно снятые с производства. Сейчас их функционал встроен в один большой чип в мониторе.

Сообщение от
Vasily_A
а именно как решена "коммутация" кучи сигналов и генерация разверток на захват и вывод на средней по числу ячеек цплд
Что Вы имеете в виду под "кучей сигналов"? Под каждый конкретный формат видео подстраиваются параметры схемы. На вход и на выход стоят несколько счетчиков, которые считают количество пикселей в строке, паузу после СИ, для выхода - длительность СИ и паузу после него. В зависимости от формата видеосигнала меняются пределы, до которых производится подсчет тактов пиксельклока.
Например, генерация строки вывода изображения производится следующим кодом:
Код:
reg [9:0] Pix_Counter; //Счетчик пикселей в строке, до 1024, реально больше 720 не нужно
always @(posedge Clk2) //Счетчик пикселей. Доходит до конца линии и обнуляется
begin
if(H_equal) Pix_Counter <= 10'h1; //Если достигаем предела, начинаем с начала (для строки - с единицы)
else Pix_Counter <= Pix_Counter + 10'h1;
end
reg [1:0] H_phase_counter; //Фаза выходной строчной развертки
// 0 - вывод видимого изо
// 1 - пауза перед СИ
// 2 - СИ
// 3 - пауза после СИ
//Mono выводится в 720 пикселей, всё остальное в 640 пикселей
wire H1_equal; assign H1_equal = (Mono_full?(Pix_Counter == 10'd728):(Pix_Counter == 10'd648)) & H_phase [0]; //Счетчик равен длине видимой строки 640 + запас 8 пикс
wire H2_equal; assign H2_equal = (Pix_Counter == 10'd10) & H_phase [1]; // ..паузе перед СИ
wire H3_equal; assign H3_equal = (Mono_full?(Pix_Counter == 10'd108):(Pix_Counter == 10'd96)) & H_phase [2]; // ..длине СИ
wire H4_equal; assign H4_equal = (Mono_full?{Pix_Counter == 10'd54}:(Pix_Counter == 10'd46)) & H_phase [3]; //Пауза после СИ
wire H_equal; assign H_equal = H1_equal | H2_equal | H3_equal | H4_equal; //Если достигнут предел в любой из фаз
always @(posedge Clk2)
HSo <= ~(H_phase[2] ^ EGA); //EGA HiRes 640х350 ССИ положит, все остальные: 640х480, 720х400, 640x400 - отрицательный
always @(posedge Clk2) //По достижению счетчиком пикселей заданного значения происходит переход в следующую фазу
begin
if(H_equal) H_phase_counter <= H_phase_counter + 2'b1;
end
reg [3:0] H_phase; //Дешифратор фазы
always @(H_phase_counter)
H_phase <= 4'h1 << H_phase_counter;