реклама на сайте
подробности

 
 
> Надо сформировать сложный сигнал, Подкиньте идейку...
torik
сообщение Dec 15 2009, 12:44
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



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

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


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
torik
сообщение Dec 16 2009, 08:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



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

Или я не так понял задачу ? smile.gif


То что мне нужно сформировать показано на рисунке.

Все получилось, вот код:


Код
module SYNC_GENERATOR     (
                        input                    CLK,
                        input                    RESETn,
                        output    reg                SSP
                        );

/*    Параметры формируемого синхросигнала.
*    Длительности указываются в тактах.
*    Период CLK = 10 нс.
*/
parameter LINE_PULSE_DURATION        = 6;        //470  =    длительность строчного синхроимпульса
parameter LINE_PERIOD2                = 16;        //3200 =    длина строки деленная на 2
parameter LINE_PERIOD                = 32;        //6400 =    длина строки
parameter LINE_NUM_F1                = 4;        //305  =    число строк в первом поле
parameter LINE_NUM_F2                = 3;        //304  =    число строк во втором поле

parameter SYNC_PULSE_DURATION        = 12;        //2730 =    длительность синхронизирующего импульса
parameter SYNC_PULSE_NUM_F1            = 2;        //5    =    число синхронизирующих имп. в поле 1
parameter SYNC_PULSE_NUM_F2            = 2;        //5    =    число синхронизирующих имп. в поле 2

parameter EQUALIZING_PULSE1_DURATION= 4;        //235  =    длительность выравнивающего имп. в поле 1
parameter EQUALIZING_PULSE1_NUM1_F1    = 2;        //5    =    число выравн. имп. в начале поля 1
parameter EQUALIZING_PULSE1_NUM2_F1    = 2;        //5    =    число выравн. имп. в конце поля 1
parameter EQUALIZING_PULSE1_NUM1_F2    = 2;        //5    =    число выравн. имп. в начале поля 2
parameter EQUALIZING_PULSE1_NUM2_F2    = 2;        //5    =    число выравн. имп. в конце поля 2

/*    Переменные
*
*/
reg            [12:0]    TimerH2;                    //задает полстроки или целую
reg            [12:0]    LINE_PERIOD2reg;            //

reg            [12:0]    TimerSSP0reg;                //время нуля

reg            [8:0]    PulseNUM;                    //кол-во импульсов с текущими параметрами
reg            [8:0]    PulseNUMreg;

reg            [3:0]    State;                        //текущее состояние


/*    Таймер, задающий период импульсов в полстроки.
*
*/
always @(posedge CLK or negedge RESETn) begin
    if (!RESETn) begin
        TimerH2 <= LINE_PERIOD2reg;
    end else begin
        if (TimerH2 < LINE_PERIOD2reg) TimerH2 <= TimerH2 + 1'b1;
        else TimerH2 <= 0;
    end
end

/*    Выходная последовательность:
*    Вся последовательность состоит из импульсов, начинающихся
*    интервалом со значением 0 и заканчивающихся значением 1.
*    Период каждого импульса равен половине строки.
*/
always @(posedge CLK or negedge RESETn) begin
    if (!RESETn) begin
        SSP <= 1;
    end else begin
        if ((TimerH2 == 0) && (TimerSSP0reg > 0)) SSP <= 0;
        if (TimerH2 == TimerSSP0reg) SSP <= 1;
    end
end

/*    PulseNUM
*
*/
always @(posedge CLK or negedge RESETn) begin
    if (!RESETn) begin
        PulseNUM <= PulseNUMreg;
    end else begin
        if (TimerH2 == LINE_PERIOD2reg) begin
            if (PulseNUM < PulseNUMreg) PulseNUM <= PulseNUM + 1;
            else PulseNUM <= 0;
        end
    end
end

/*    Автомат состояний
*    TimerSSP0reg - точное значение нулевого интервала полустрочного импульса
*    PulseNUMreg - число одинаковых импульсов - 1
*/
always @(posedge CLK or negedge RESETn) begin
    if (!RESETn) begin
        State <= 0;
        TimerSSP0reg <= SYNC_PULSE_DURATION;
        PulseNUMreg <= SYNC_PULSE_NUM_F1 - 1;
        LINE_PERIOD2reg <= LINE_PERIOD2 - 1;
    end else begin
        if ((PulseNUM == PulseNUMreg) && (TimerH2 == LINE_PERIOD2reg)) begin
            case (State)
            0:    begin
                    TimerSSP0reg <= SYNC_PULSE_DURATION;
                    PulseNUMreg <= SYNC_PULSE_NUM_F1 - 1;
                    State <= 1;
                end
            1:    begin
                    TimerSSP0reg <= EQUALIZING_PULSE1_DURATION;
                    PulseNUMreg <= EQUALIZING_PULSE1_NUM1_F1 - 1;
                    State <= 2;
                end
            2:    begin
                    TimerSSP0reg <= LINE_PULSE_DURATION;
                    PulseNUMreg <= LINE_NUM_F1 - 1;
                    LINE_PERIOD2reg <= LINE_PERIOD - 1;
                    State <= 3;
                end
            3:    begin
                    TimerSSP0reg <= EQUALIZING_PULSE1_DURATION;
                    PulseNUMreg <= EQUALIZING_PULSE1_NUM2_F1 - 1;
                    LINE_PERIOD2reg <= LINE_PERIOD2 - 1;
                    State <= 4;
                end

            4:    begin
                    TimerSSP0reg <= SYNC_PULSE_DURATION;
                    PulseNUMreg <= SYNC_PULSE_NUM_F2 - 1;
                    State <= 5;
                end
            5:    begin
                    TimerSSP0reg <= EQUALIZING_PULSE1_DURATION;
                    PulseNUMreg <= EQUALIZING_PULSE1_NUM1_F2 - 1;
                    State <= 6;
                end
            6:    begin
                    TimerSSP0reg <= 0;
                    PulseNUMreg <= 0;
                    State <= 7;
                end
            7:    begin
                    TimerSSP0reg <= LINE_PULSE_DURATION;
                    PulseNUMreg <= LINE_NUM_F2 - 1;
                    LINE_PERIOD2reg <= LINE_PERIOD - 1;
                    State <= 8;
                end
            8:    begin
                    TimerSSP0reg <= LINE_PULSE_DURATION;
                    PulseNUMreg <= 0;
                    LINE_PERIOD2reg <= LINE_PERIOD2 - 1;
                    State <= 9;
                end
            9:    begin
                    TimerSSP0reg <= EQUALIZING_PULSE1_DURATION;
                    PulseNUMreg <= EQUALIZING_PULSE1_NUM2_F2 - 1;
                    State <= 0;
                end
            endcase
        end
    end
end

endmodule


Только длительности пока уменьшенные, для того чтобы при моделировании все легко было посмотреть. По каким параметрам моделировать (и нужно ли) реальные значения, пока не представляю...
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- torik   Надо сформировать сложный сигнал   Dec 15 2009, 12:44
- - des00   Цитата(torik @ Dec 15 2009, 06:44) Надо с...   Dec 15 2009, 12:50
|- - Самурай   Цитата(des00 @ Dec 15 2009, 15:50) лет 6 ...   Dec 15 2009, 13:54
- - torik   Есть правда вариант все это промасштабировать и де...   Dec 15 2009, 12:52
- - iosifk   Цитата(torik @ Dec 15 2009, 15:44) Надо с...   Dec 15 2009, 13:08
|- - Maverick   Цитата(iosifk @ Dec 15 2009, 17:08) На са...   Dec 15 2009, 16:25
|- - iosifk   Цитата(Maverick @ Dec 15 2009, 19:25) а м...   Dec 16 2009, 06:18
- - torik   ЦитатаНа самом деле, нужно только автомат состояни...   Dec 15 2009, 13:18
|- - iosifk   Цитата(torik @ Dec 15 2009, 16:18) Идея п...   Dec 15 2009, 13:52
- - AndrewS6   Можно записать желаемую последовательность значени...   Dec 15 2009, 13:23
|- - Shivers   Цитата(AndrewS6 @ Dec 15 2009, 16:23) Мож...   Dec 15 2009, 13:52
- - torik   Вспомнил, примерно так: reg [6:0] State; reg ...   Dec 15 2009, 13:43
- - torik   Цитатаа вот референс дизайн лежит у Альтеры... htt...   Dec 15 2009, 14:17
|- - des00   Цитата(torik @ Dec 15 2009, 08:17) А мне ...   Dec 16 2009, 04:13
- - Shivers   набросал автомат, сделал бы что то вроде этого: Ко...   Dec 15 2009, 15:51
- - torik   Ради интереса попробовал смоделировать синхросигна...   Dec 16 2009, 13:13
|- - Джеймс   Цитата(torik @ Dec 16 2009, 16:13) Ради и...   Dec 16 2009, 18:59
- - torik   ЦитатаНе знаю, у меня ваш проект моделируется за п...   Dec 17 2009, 06:09
|- - Джеймс   Цитата(torik @ Dec 17 2009, 09:09) Да, Mo...   Dec 17 2009, 18:12
|- - ReAl   Цитата(torik @ Dec 17 2009, 08:09) Я прив...   Dec 20 2009, 11:05
- - torik   Однако, все равно медленно, если задать все параме...   Dec 20 2009, 10:46
- - torik   ЦитатаКоличество строк в полях одинаковое, просто ...   Dec 21 2009, 08:52


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 05:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01433 секунд с 7
ELECTRONIX ©2004-2016