ПОСТРОЕНИЕ VERILOG-МОДЕЛИ BER-ТЕСТЕРА ДЛЯ ПРОВЕРКИ КАНАЛОВ СВЯЗИ ТЕЛЕКОММУНИКАЦИОННЫХ СИСТЕМ
|
| | | | |43,44 |
|65 |22 |21 |757 – 763 |860 –867 |
|66 |23 |18 |85, 88, 93 |34, 44, 54 |
|67 |36 |25 |51 – 56, 129 |759, 989 |
|68 |35 |33 |84, 99 – 105 |34, 44, 54 |
|69 |33 |20 |80, 90 |68, 895 |
|70 |31 |28 |55, 57, 59, |757 – 763 |
| | | |67 | |
|71 |21 |19 |85, 847 |85, 88, 93 |
|72 |22 |21 |49 – 54 |51 – 56, 129|
|73 |23 |18 |85, 88, 93 |41, 42, |
| | | | |43,44 |
|74 |36 |25 |51 – 56, 129 |860 –867 |
|75 |35 |33 |41, 42, 43,44|34, 44, 54 |
|76 |31 |28 |860 –867 |68, 895 |
|77 |29 |27 |34, 44, 54 |34, 44, 54 |
|78 |28 |25 |759, 989 |759, 989 |
|79 |25 |22 |34, 44, 54 |41, 42, |
| | | | |43,44 |
|80 |7 |6 |68, 895 |860 –867 |
4. Рекомендации по построению модели
4.1. Подготовка схемы к моделированию
Прежде чем начать моделирование схемы, следует представить ее в терминах
системы 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-тестера.
[pic]
Рис. 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
((c
| | скачать работу |
ПОСТРОЕНИЕ VERILOG-МОДЕЛИ BER-ТЕСТЕРА ДЛЯ ПРОВЕРКИ КАНАЛОВ СВЯЗИ ТЕЛЕКОММУНИКАЦИОННЫХ СИСТЕМ |