Рефераты. ПОСТРОЕНИЕ VERILOG-МОДЕЛИ BER-ТЕСТЕРА ДЛЯ ПРОВЕРКИ КАНАЛОВ СВЯЗИ ТЕЛЕКОММУНИКАЦИОННЫХ СИСТЕМ - (курсовая)

p>Прежде чем начать моделирование схемы, следует представить ее в терминах системы Verilog HDL. Для этого нужно выделить в схеме функционально-законченные модули

(module), обозначить регистры (reg), провода (wire), входы, выходы (input, output) и т. п.

На рис. 4. 1 представлен результат подготовки рассмотренной ранее схемы (см. рис. 2. 3) к моделированию. Отметим, что для упрощения примера в явном виде моделируются не все элементы схемы, а только ее регистры. Это означает, что вместо требуемого в техническом задании gate-уровня проектирования применен более высокий RTL-уровень (Register Transfer Level). В результате, например, вместо обозначения в явном виде элементов Исключающее ИЛИ в модели использованы их “формульные” эквиваленты. Это несколько увеличивает дистанцию между моделью и ее реальным прототипом, так как формульный эквивалент не учитывает задержку срабатывания соответствующего логического элемента или группы элементов. В примере нет также явных моделей усилителей, инвертора, триггера. Поэтому в Вашем курсовом проекте следует разработать более подробную модель, в полной мере соответствующую gate-уровню.

Схема (рис. 4. 1) представлена четырьмя модулями. Первый модуль (module ber_tester) описывает структуру устройства в целом. Остальные модули (module DCE, module Line, module DTE) описывают структуру соответствующих составных частей устройства. Для удобства составления модели введены два “фиктивных” D-триггера (показаны на рисунке штриховыми линиями), хотя возможны и иные решения.

Далее приведены примеры реализации четырех упомянутых модулей. Каждый из них традиционно оформлен в виде отдельного файла. При компоновке проекта эти файлы собираются в одну группу и “исполняются” после выполнения Вами цепи команд экранного меню: Projectа New а а Add (добавить в проект четыре файла – описания четырех модулей) а OK аGO (провести моделирование)). При успешном выполнении моделирования следует вывести на экран временные диаграммы, желательно в такой же последовательности, как на рис. 4. 2, а именно:

timing –пронумерованная в десятичном виде последовательность тактов, т. е. перио дов сигнала от генератора G1 (рис. 4. 1);

    RxCgood – синхросигнал без ошибок;
    RxDgood, – данные без ошибок;
    A[1: M] – шестнадцатиричный код в М-разрядном регистре А;
    errRxC – импульс (импульсы) ошибок сигнала RxC;
    errRxD – импульс (импульсы) ошибок сигнала RxD;
    RxCbad – синхросигнал с ошибкой (ошибками);
    RxDbad – данные с ошибкой (ошибками);
    B[1: M] – шестнадцатиричный код в М-разрядном регистре В;
    D_input_TT – сигнал на входе D-триггера модуля DTE;
    ERROR – выходной сигнал (Ошибка) BER-тестера.

Рис. 4. 1. Схема BER-тестера с обозначениями в терминах системы Verilog HDL для моделирования на уровне RTL

4. 2. Пример построения RTL-модели BER-тестера на языке системы Verilog HDL

    4. 2. 1. Файл BER-main_module. v
    //Главный модуль (верхний уровень иерархии модулей)

module ber_tester (ERROR); // ber_tester - наименование модуля, // в скобках заключен перечень выходов

    // и входов (входов нет, имеется один выход)

output ERROR; // дается определение ERROR как выхода (а не входа) wire RxDgood, RxCgood, RxDbad, RxCbad; // список проводов главного модуля DTE DTE1(ERROR, RxCbad, RxDbad); // Структурная модель BER-тестера Line Line1 (RxCbad, RxDbad, RxCgood, RxDgood); // на основе трех модулей: DCE DCE1(RxCgood, RxDgood); // DTE, Line и DCE (DTE1, Line1 и //DCE1) endmodule // стандартное оформление конца модуля

    4. 2. 2. Файл BER-DTE_module. v

module DTE(out1, in1, in2); // Наименование модуля, список выходов и входов input in1, in2; // Входы

    output out1; // Выход

parameter M=5, N=3; // М - длина регистра, N - точка подключения // обратной связи. Возможные сочетания М и N:

    // 3 2, 4 3, 5 3, 6 5, 7 6, 9 5, 10 7, 11 9, 15 14, 17 14,
    // 18 11, 20 17, 21 19, 22 21, 23 18, 25 22, 28 25, 29 27,
    // 31 28, 33 20, 35 33, 36 25, 39 35

reg [1: M] B; // Описание М-разрядного регистра В reg TT; // Описание D-триггера как одноразрядного регистра

    wire D_input_TT; // Описание провода

assign out1 = TT, // Утверждается, что состояние выхода out1 // отображает состояние D-триггера

D_input_TT = B[N] ^ B[M] ^ in2; // Утверждается, что состояние провода // D_input_TT определяется суммированием

    // по модулю два трех переменных: B[N], // B[M] и in2

always begin: analyzer // BER-анализатор работает "всегда" следующим образом: @(negedge in1) begin: prediction_and_check // по отрицательному фронту сигнала in1

TT = B[N] ^ B[M] ^ in2; // обновляется состояние триггера ТТ, B = B >> 1; // код в регистре В сдвигается вправо на

    // один разряд,
    B[1] = in2; // после этого в освободившийся разряд В[1]
    // помещается бит с входа in2
    end // Окончание действий, вызванных отрицательным фронтом
    // сигнала in1
    end // Окончание конструкции "always"
    endmodule
    4. 2. 3. Файл BER-Line_module. v

module Line (out20, out10, in20, in10); // Наименование модуля, список выходов и входов

input in20, in10; // Входы output out20, out10; // Выходы reg errRxD, g3, errRxC; // Описание одноразрядных регистров integer count, timing; // Описание абстрактных целочисленных переменных initial count = 0; // Установка начального значения переменной initial errRxD=0; // Установка начального состояния регистра initial g3=0; // Установка начального состояния регистра

assign out10 = in10 ^errRxD; // Сигнал на выходе out10 формируется суммированием

    // по модулю два сигналов in10 и errRxD

assign out20 = in20 ^errRxC; // Сигнал на выходе out20 формируется суммированием

    // по модулю два сигналов in20 и errRxC

// "Всегда" по положительному фронту сигнала на входе in20: always @(posedge in20) begin: ticking // Прибавляется единица к счетчикам тактов (такт

    count = count + 1; // период сигнала в проводе RxCgood);
    timing = count - 1; // timing отстает от count на единицу

errRxC = g3; // перепись бита из регистра g3 в регистр errRxC end

// "Всегда" с задержкой на 20 элементарных единиц времени, т. е. на один такт, // проверяется, нужно ли формировать ошибку в линии RxD

    always #20 if

((count == 39) // Положения ошибок в линии RxD (задаются согласно |(count == 60) // выбранному варианту задания на курсовой проект) |(count == 70)

    |(count == 40)
    |(count == 40)
    |(count == 40)
    |(count == 310)
    |(count == 120)
    |(count == 160)
    |(count == 130))
    begin
    errRxD = 1; // ошибку формировать нужно
    end
    else
    begin
    errRxD = 0; // ошибку формировать не нужно
    end

// "Всегда" с задержкой на 20 элементарных единиц времени, т. е. на один такт, // проверяется, нужно ли формировать ошибку в линии RxC

    always #20 if

((count == 9) // Положения ошибок в линии RxC (задаются согласно |(count == 40) // выбранному варианту задания на курсовой проект) |(count == 700)

    |(count == 940)
    |(count == 400)
    |(count == 126)
    |(count == 127)
    |(count == 128)
    |(count == 129)
    |(count == 130))
    begin
    g3 = 1; // ошибку формировать нужно
    end
    else
    begin
    g3 = 0; // ошибку формировать не нужно
    end
    endmodule
    4. 2. 4. Файл BER-DCE_module. v

module DCE (out40, out30); // Наименование модуля, список выходов и входов (входов // нет)

    output out40, out30; // Выходы
    reg g1; // Описание одноразрядного регистра g1

parameter M=5, N=3; // М - длина регистра, N - точка подключения // обратной связи. Возможные сочетания М и N:

    // 3 2, 4 3, 5 3, 6 5, 7 6, 9 5, 10 7, 11 9, 15 14, 17 14,
    // 18 11, 20 17, 21 19, 22 21, 23 18, 25 22, 28 25, 29 27,
    // 31 28, 33 20, 35 33, 36 25, 39 35

reg [1: M] A; // Описание М-разрядного регистра A reg temp; // Описание одноразрядного регистра temp

initial A = 1; // Начальная установка регистра А assign out30 = A[N] ^ A[M], out40 = g1; // Описание поведения выходов модуля

    initial begin: stopper // Остановить процесс моделирования
    #20040; $stop; // по истечении 2040 элементарных единиц
    end // времени (один такт = 20 единицам времени)

always begin: RxC_generator // тактовый генератор: #10 g1 = 0; // длительность паузы = 10 единицам времени

    #10 g1 = 1; // длительность импульса = 10 единицам времени
    end

always begin: pseudorandom_RxD // Генератор псевдослучайной последовательности битов

@(posedge g1) // По положительному фронту сигнала с регистра g1: temp = A[N] ^ A[M]; // сохранение старого значения суммы по модулю два A[N] и A[M],

A = A >> 1; // сдвиг кода в регистре А на один разряд вправо, A[1] = temp; // запись в первый разряд регистра А содержимого регистра temp end

    endmodule

Рис. 4. 2. Пример временных диаграмм сигналов BER-тестера, полученных в результате моделирования. Из них следует, что ошибка при передаче синхросигнала по линии обнаруживается

    Литература

1. Сухман С. М. , Бернов А. В. , Шевкопляс Б. В. Компоненты телекоммуникационных систем. Анализ инженерных решений. – М. : МИЭТ, 2002. – 220 с. 2. Hyde Daniel C. CSCI 320 Computer Architecture. Handbook on Verilog HDL. Bucknell University, 1997.

    Составитель – Б. В. Шевкопляс
    31. 03. 2002

Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.