Перейти к содержанию
    

Надо сформировать сложный сигнал

Надо сформировать синхроимпульсы полного телевизионного сигнала PAL в соответсвии с ГОСТ. Там получается довольно сложная последовательность... Правда ширина сигнала всего 1 бит

Как красиво это сделать?

 

Первое, что приходит в голову, организовать конструкцию if else if else if else...

Но что получится когда эта конструкция будет включать пару десятков или даже больше таких последовательных условных операторов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо сформировать синхроимпульсы полного телевизионного сигнала PAL в соответсвии с ГОСТ. Там получается довольно сложная последовательность... Правда ширина сигнала всего 1 бит

Как красиво это сделать?

 

Первое, что приходит в голову, организовать конструкцию if else if else if else...

Но что получится когда эта конструкция будет включать пару десятков или даже больше таких последовательных условных операторов?

 

лет 6 назад делал подобное на AHDL если мне память не изменяет на все ушло 2 счетчика + чуток логики %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть правда вариант все это промасштабировать и держать последовательность нулей и единиц в памяти...

 

лет 6 назад делал подобное на AHDL если мне память не изменяет на все ушло 2 счетчика + чуток логики %)

Немного логики и счетчиков на "длинную" конструкцию if-else?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо сформировать синхроимпульсы полного телевизионного сигнала PAL в соответсвии с ГОСТ. Там получается довольно сложная последовательность... Правда ширина сигнала всего 1 бит

Как красиво это сделать?

 

Первое, что приходит в голову, организовать конструкцию if else if else if else...

Но что получится когда эта конструкция будет включать пару десятков или даже больше таких последовательных условных операторов?

На самом деле, нужно только автомат состояний и перезагружаемый таймер...

Автомат загружает таймер последовательностями, которые и формируют длительности...

Удачи!

На самом деле, в Альтеровских файлах университетской программы это все расписано. Да и для ксайлинсовской тоже...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На самом деле, нужно только автомат состояний и перезагружаемый таймер...

Автомат загружает таймер последовательностями, которые и формируют длительности...

Удачи!

Идея понятна

 

На самом деле, в Альтеровских файлах университетской программы это все расписано.

Если это на сайте альтеры, то как найти?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно записать желаемую последовательность значений в память, счетчиком перебирать адрес.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вспомнил, примерно так:

 

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 конфигуратор так сделан был когда-то (содран)

 

 

Надо только довести до ума и параметризировать, еще не проверял...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идея понятна

 

 

Если это на сайте альтеры, то как найти?

а вот референс дизайн лежит у Альтеры...

http://www.altera.com/support/refdesigns/s...niosii-vga.html

это то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно записать желаемую последовательность значений в память, счетчиком перебирать адрес.

Ширина 1 не самый оптимальный вариант для использования памяти. Иногда лучше расписать мультиплексорами или if/else всю последовательность в соответствие со значениями счетчика, а потом скормить синтезатору. Получится большая комбинаторная схема - функция адреса счетчика.

Я когда ROM делаю, всегда встает выбор - сделать на латчах как есть, без оптимизации, и получить потом возможность править в металле(ASIC), если будут ошибки, либо оптимизировать ROM в комбинаторную функцию адреса и получить малую площадь кристалла. Минус комбинаторной схемы - очень длинный путь, минус ROMа "как есть" - огромный кристалл. Выбор по ситуации )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

лет 6 назад делал подобное на AHDL если мне память не изменяет на все ушло 2 счетчика + чуток логики %)

 

Аналогично, правда лет 10 назад:). Генератор ч/б полос уместился в EPM3032, цветных в EPM3064. Один счетчик и несколько дешифраторов:).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а вот референс дизайн лежит у Альтеры...

http://www.altera.com/support/refdesigns/s...niosii-vga.html

это то?

Нет, это несколько проще.

 

А мне надо сформировать полный телевизионный сигнал, вернее его синхроимульсы).

Получаем 5 периодов одних импульсов, 5 периодов других, еще 1, еще 302 и т.д. Всего вроде 10 смен состояний. Каждое состояние должно включать определенное кол-во импульсов с заданными параметрами...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

набросал автомат, сделал бы что то вроде этого:

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];

После синтеза будут два счетчика с кучей комбинаторики. Если на мегафункциях сделать, в ПЛИС должно работать относительно шустро.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На самом деле, нужно только автомат состояний и перезагружаемый таймер...

Автомат загружает таймер последовательностями, которые и формируют длительности...

Удачи!

На самом деле, в Альтеровских файлах университетской программы это все расписано. Да и для ксайлинсовской тоже...

а можете дать ссылку или привести пример

ЗЫ желательно на VHDL :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А мне надо сформировать полный телевизионный сигнал, вернее его синхроимульсы).

Получаем 5 периодов одних импульсов, 5 периодов других, еще 1, еще 302 и т.д. Всего вроде 10 смен состояний. Каждое состояние должно включать определенное кол-во импульсов с заданными параметрами...

 

что там сложного то ? ПЦТС он простой как 3 рубля, все постоянно, счетчик строк, столбцов. все остальные синхроимпульсы легко привязываются к этим двум счетчикам %)

 

Или я не так понял задачу ? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а можете дать ссылку или привести пример

ЗЫ желательно на VHDL :rolleyes:

разные файлы. Не мои, так что без претензий...

BM_MODE_SVGA.zip

bm_mode_svga.pdf

vgaoutfiles.zip

VGA.PDF

vga_timing.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...