torik 0 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба Надо сформировать синхроимпульсы полного телевизионного сигнала PAL в соответсвии с ГОСТ. Там получается довольно сложная последовательность... Правда ширина сигнала всего 1 бит Как красиво это сделать? Первое, что приходит в голову, организовать конструкцию if else if else if else... Но что получится когда эта конструкция будет включать пару десятков или даже больше таких последовательных условных операторов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба Надо сформировать синхроимпульсы полного телевизионного сигнала PAL в соответсвии с ГОСТ. Там получается довольно сложная последовательность... Правда ширина сигнала всего 1 бит Как красиво это сделать? Первое, что приходит в голову, организовать конструкцию if else if else if else... Но что получится когда эта конструкция будет включать пару десятков или даже больше таких последовательных условных операторов? лет 6 назад делал подобное на AHDL если мне память не изменяет на все ушло 2 счетчика + чуток логики %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба Есть правда вариант все это промасштабировать и держать последовательность нулей и единиц в памяти... лет 6 назад делал подобное на AHDL если мне память не изменяет на все ушло 2 счетчика + чуток логики %) Немного логики и счетчиков на "длинную" конструкцию if-else? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба Надо сформировать синхроимпульсы полного телевизионного сигнала PAL в соответсвии с ГОСТ. Там получается довольно сложная последовательность... Правда ширина сигнала всего 1 бит Как красиво это сделать? Первое, что приходит в голову, организовать конструкцию if else if else if else... Но что получится когда эта конструкция будет включать пару десятков или даже больше таких последовательных условных операторов? На самом деле, нужно только автомат состояний и перезагружаемый таймер... Автомат загружает таймер последовательностями, которые и формируют длительности... Удачи! На самом деле, в Альтеровских файлах университетской программы это все расписано. Да и для ксайлинсовской тоже... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба На самом деле, нужно только автомат состояний и перезагружаемый таймер... Автомат загружает таймер последовательностями, которые и формируют длительности... Удачи! Идея понятна На самом деле, в Альтеровских файлах университетской программы это все расписано. Если это на сайте альтеры, то как найти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndrewS6 0 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба Можно записать желаемую последовательность значений в память, счетчиком перебирать адрес. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба Вспомнил, примерно так: reg [6:0] State; reg [19:0] Timer; reg [19:0] TimerReg; always @(posedge CLK or negedge RESETn) begin if (!RESETn) begin State <= 0; SSP <= 1; TimerReg <= 0; end else begin if (Timer == 20'd0) begin case (State) 0: begin SSP <= 1; TimerReg <= 10; State <= 1; end 1: begin SSP <= 0; TimerReg <= 2; State <= 2; end 2: begin SSP <= 1; TimerReg <= 2; State <= 3; end 3: begin SSP <= 0; TimerReg <= 3; State <= 0; end endcase end end end always @(posedge CLK or negedge RESETn) begin if (!RESETn) begin Timer <= 0; end else begin if (Timer > 0) Timer <= Timer - 1'b1; else Timer <= TimerReg; end end У меня I2C конфигуратор так сделан был когда-то (содран) Надо только довести до ума и параметризировать, еще не проверял... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба Идея понятна Если это на сайте альтеры, то как найти? а вот референс дизайн лежит у Альтеры... http://www.altera.com/support/refdesigns/s...niosii-vga.html это то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба Можно записать желаемую последовательность значений в память, счетчиком перебирать адрес. Ширина 1 не самый оптимальный вариант для использования памяти. Иногда лучше расписать мультиплексорами или if/else всю последовательность в соответствие со значениями счетчика, а потом скормить синтезатору. Получится большая комбинаторная схема - функция адреса счетчика. Я когда ROM делаю, всегда встает выбор - сделать на латчах как есть, без оптимизации, и получить потом возможность править в металле(ASIC), если будут ошибки, либо оптимизировать ROM в комбинаторную функцию адреса и получить малую площадь кристалла. Минус комбинаторной схемы - очень длинный путь, минус ROMа "как есть" - огромный кристалл. Выбор по ситуации ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба лет 6 назад делал подобное на AHDL если мне память не изменяет на все ушло 2 счетчика + чуток логики %) Аналогично, правда лет 10 назад:). Генератор ч/б полос уместился в EPM3032, цветных в EPM3064. Один счетчик и несколько дешифраторов:). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба а вот референс дизайн лежит у Альтеры... http://www.altera.com/support/refdesigns/s...niosii-vga.html это то? Нет, это несколько проще. А мне надо сформировать полный телевизионный сигнал, вернее его синхроимульсы). Получаем 5 периодов одних импульсов, 5 периодов других, еще 1, еще 302 и т.д. Всего вроде 10 смен состояний. Каждое состояние должно включать определенное кол-во импульсов с заданными параметрами... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба набросал автомат, сделал бы что то вроде этого: wire DOUT; // выход //импульсы wire [8:0] sample0 = 9'b100110011; wire [2:0] sample1 = 3'b101; ...... wire [5:0] sample9 = 6'b110010; //длины импульсов wire [7:0] len0 = 8'h9, len1 = 8'h3, .. len9 = 8'h6; reg [3:0] state; //счетчик, номер последовательности reg [7:0] count; // reg [31:0] buf; //стек для импульсов always @(posedge clk or negedge resetn) if(~resetn) begin state <= 4'h0; count <= 8'h0; buf[31:0] <= sample0; end else begin if(state < 10) begin if( (state == 4'h0) & (count == len0) | ... (state == 4'h9) & (count == len9) ) //достигнут конец импульса begin state <= state + 1; // смена номера импульса count <= 8'h0; //обнуление указателя buf [31:0] <= ((state == 4'h0) & (count == len0)) ? sample0 : //загрузка следющего ипульса (((state == 4'h1) & (count == len1)) ? sample1 : ......... sample9 ))))...)) end else begin count <= count + 1; buf [31:0] <= buf [31:0] >> 1; //сдвиг стека end end else state <= 4'h0; //полный цикл импульсов assign DOUT = buf[0]; После синтеза будут два счетчика с кучей комбинаторики. Если на мегафункциях сделать, в ПЛИС должно работать относительно шустро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба На самом деле, нужно только автомат состояний и перезагружаемый таймер... Автомат загружает таймер последовательностями, которые и формируют длительности... Удачи! На самом деле, в Альтеровских файлах университетской программы это все расписано. Да и для ксайлинсовской тоже... а можете дать ссылку или привести пример ЗЫ желательно на VHDL :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 16 декабря, 2009 Опубликовано 16 декабря, 2009 · Жалоба А мне надо сформировать полный телевизионный сигнал, вернее его синхроимульсы). Получаем 5 периодов одних импульсов, 5 периодов других, еще 1, еще 302 и т.д. Всего вроде 10 смен состояний. Каждое состояние должно включать определенное кол-во импульсов с заданными параметрами... что там сложного то ? ПЦТС он простой как 3 рубля, все постоянно, счетчик строк, столбцов. все остальные синхроимпульсы легко привязываются к этим двум счетчикам %) Или я не так понял задачу ? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 16 декабря, 2009 Опубликовано 16 декабря, 2009 · Жалоба а можете дать ссылку или привести пример ЗЫ желательно на VHDL :rolleyes: разные файлы. Не мои, так что без претензий... BM_MODE_SVGA.zip bm_mode_svga.pdf vgaoutfiles.zip VGA.PDF vga_timing.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться