1. VERILOG
3. Dataflow уровень описания моделей
Автоматизация проектирования
компьютерных систем
д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
2/9/2011 e-mail: hahanova@mail.ru 1
2. Цель лекции и содержание
Цель – изучить принципы построения
моделей вентильного и dataflow
уровней
План
1. Стандартные логические элементы
2. Определенные пользователем примитивы
3. Задержки
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 2
e-mail: hahanova@mail.ru
3. Dataflow-модели
out=ab+c
a
#5
b e
#4 out
c
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 3
e-mail: hahanova@mail.ru
5. Оператор непрерывного назначения.2
//Обычная форма
wire out;
assign out = i1 & i2;
//Упрощенная формой
wire out = i1 & i2;
Задержки в операторе назначения
wire out;
assign #10 out = i1 & i2; //Обычная форма
wire #10 out = i1 & i2; //Упрощенная форма
Задержку линии можно также указать в момент ее декларации:.
wire #10 out; //Описание задержки линии
assign out = i1 & i2; // значение линии out будет
// присвоено через 10 единиц времени
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 5
e-mail: hahanova@mail.ru
6. Приоритеты операторов
Оператор Описание
+ - ! ~ Унарные
* / % Арифметические
+ - (binary) Бинарные
<< >> <<< >>> Сдвига
< <= > = > Отношения
== != === !== Равенства
& ~& and nand
^ ~^ ^~ xor xnor
| ~| or nor
&& Логическое and
|| Логическое or
?: Условный оператор
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 6
e-mail: hahanova@mail.ru
7. Операторы Verilog
Операторы Verilog
Арифметические Побитовые
Оператор Описание Оператор Описание
a+b a плюс b ~b not
a-b a минус b a&b and
a*b a умножить на b a |b or
a/b a разделить на b a^b xor
a%b a по модулю b
a ** b Степень a ^~ b, a ~^ b xnor
Отношения Равенства
Оператор Описание Оператор Описание
a<b меньше a == b равно
a>b больше a != b не равно
a <= b меньше или равно a ===b равно
a => b больше или равно a !== b не равно
Логические
Оператор Описание
a && b a and b
a || b a or b
!a not a
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 7
e-mail: hahanova@mail.ru
8. Арифметические операторы
Если хотя бы один бит операнда равен x, то
результат равен x
in1 = 4'b110x;
in2 = 4'b1010;
sum = in1 + in2; // результат операции сложения – 4'bx
Результат операции по модулю представляет собой
остаток от деления двух чисел. Знак результата
совпадает со знаком первого операнда.
10 % 3 // результат 1, остаток от деления 10 на 3 равен 1
17 % 3 // результат 2, остаток от деления 17 на 3 равен 2
12 % 3 // результат 0, нет остатка от деления
-7 % 3 // результат -1, знак первого операнда
11 % -3 // результат 2
-4’d12 % 3 // результат 1, т.к. -4’d12 = 4'b0100%3 = 1
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 8
e-mail: hahanova@mail.ru
9. Операторы логические, отношения и равенства
Логические операторы
A=3; B=0;
A&&B=0 A||B=1 !A=0 !B=1
A = 2'b0x; B = 2'b10; // Операнд с элементом x
A && B = x // эквивалентно (x && 1)
Операторы отношения
reg [3:0] a, b; a = 4’b1100; b = 4’b0110;
a < b // равняется логическому 0 a > 8 // равняется логической 1
a <= b // равняется логическому 0 a >= 10 // равняется логической 1
a < 4’b1zzz // результат равен x a < 4’b1x01 // результат равен x
Операторы равенства
reg [3:0] a, b; a = 4’b1100; b = 4’b101x;
a == 4’b1100 // истина – логическая 1 a != 4’b1100 // ложь – логический 0
b == 4’b101x // результат равен x b != 4’b101x // результат равен x
b === 4’b101x // истина – логическая 1 b !== 4’b101x // ложь – логический 0
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 9
e-mail: hahanova@mail.ru
10. Побитовые операторы
~^
& 0 1 x z ^ 0 1 x z | 0 1 x z 0 1 x z ~ 0 1 x z
^~
0 0 0 0 0 0 0 1 x x 0 0 1 x x 0 1 0 x x 1 0 X X
1 0 1 x x 1 1 0 x x 1 1 1 1 1 1 0 1 x x
x 0 x x x x x x x x x x 1 x x x x x x x
z 0 x x x z x x x x z x 1 x x z x x x x
reg [7:0] a, b; a = 8’b1010xzxz; b = 8’b10010011;
a&b // поразрядное И, результат 8’b100000xx;
a|b // поразрядное ИЛИ, результат 8’b1011xx11;
a^b // поразрядное по модулю 2, результат 8’b0011xxxx;
a ~^ b // поразрядное по модулю 2 с инверсией выхода,
// результат 8’b1100xxxx;
~a // поразрядная инверсия, результат 8’b0101xxxx;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 10
e-mail: hahanova@mail.ru
16. Системные задачи и функции.1
Системная задача $display служит для вывода
информации на экран.
$display | $displayb | $displayh | $displayo (p1, p2, p3, ...) ;
Символ Описание формата
%d or %D Десятичный формат
%b or %B Двоичный формат
%h or %H Шестнадцатиричный формат
%o or %O Восьмеричный формат
%c or %C Символы в формате ASCII
%v or %V Интенсивности сигнала класса net
%m or %M Иерархическое имя
%s or %S В виде строки
%t or %T Текущий формат времени
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 16
e-mail: hahanova@mail.ru
17. Системные задачи и функции.2
Задача $monitor предлагает механизм для
наблюдения за изменениями сигнала.
$monitor | $monitorb | $monitorh | $monitoro (p1, p2, p3, ...) ;
$monitoron; // влючить мониторинг
$monitoroff; // выключить мониторинг .
Пример
initial // блок инициализации
begin
$monitor($time, "clock = %b, reset = %b", clock, reset);
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 17
e-mail: hahanova@mail.ru
18. Системные задачи и функции.3
$stop [(n)];
$finish [(n)];
Режимы диагностических сообщений задач $stop и $finish
n Сообщ ение
0 Отсутствует
1 Время моделирования
Время моделированияи и работы CPU,
2
размер используемой памяти
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 18
e-mail: hahanova@mail.ru
19. Системные задачи и функции.4
$printtimescale [ ( hierarchical_name ) ] ;
Пример:
// функции
`timescale 1 ms / 1 us
integer $time module a_dat;
integer $stime initial
real $realtime $printtimescale;
endmodule
Задача $printtimescale – выводит единицы измерения и
точность вычисления времени для указанного модуля
hierarchical_name. Системные функции $time и $stime
возвращают текущее время моделирования в виде 64- и 32-
битового целого числа, а функция $realtime – в вещественном
формате.
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 19
e-mail: hahanova@mail.ru
20. Работа с файлами
$fopen и $fclose
integer multi_channel_descriptor = $fopen ( " file_name " );
| integer fd = $fopen ( " file_name ", type );
$fclose ( multi_channel_descriptor );
Screen+Log File Otput
| $fclose (fd);
$display $fdisplay
Пример $write $fwrite
integer file1, file2; $strobe $fstrobe
initial begin $monitor $fmonitor
file1 = $fopen("file1");
file2 = $fopen("file2");
$display("The number used for file 1 is %0d", file1);
...
$fclose(file1);$fclose(file2);
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 20
e-mail: hahanova@mail.ru
21. Функции работы с файлами
Чтение символов (байта)
c = $fgetc ( fd );
code = $ungetc ( c, fd );
Чтение строки str из файла fd
integer code = $fgets ( str, fd );
Чтение форматируемых данных
integer code = $fscanf ( fd, format, args );
• // чтение из файла, заданного fd
integer code = $sscanf ( str, format, args );
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 21
e-mail: hahanova@mail.ru
24. $random()
Размер возвращаемых значенй соответствует
типу integer.
Пример использования функции $random.
parameter SEED = 33;
reg [31:0] vector;
always @(posedge clock)
vector = $random (SEED);
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 24
e-mail: hahanova@mail.ru
25. Контрольные вопросы и задания.1
1. Что означает оператор a === b в Verilog?
2. Что означает оператор a !== b в Verilog?
3. Чему будет равен результат операции Y = {3{A}}, где A = 2’b1?
4. Чему равен результат операции X|Y для переменных X =
5’b10101, Y = 5’b00111?
5. Чему равен результат операции X&Y для переменных X =
5’b10101, Y = 5’b00111?
6. Чему равен результат операции X^Y для переменных X =
5’b10101, Y = 5’b00111?
7. Чему равен результат операции &X для X = 5’b10101?
8. Чему равен результат операции |X для X = 5’b10101?
9. Чему равен результат операции Y={A, B, C, D, 3’B101} для
A=1’b1, B=1’b0, C=2’b11, D=2’b00?
10. Чему равен результат операции e = {2{1'b1,a,1'b0}} для
a=4'b0110?
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 25
e-mail: hahanova@mail.ru
26. Контрольные вопросы и задания.2
Синхронный счетчик может быть построен с использованием двухступенчатого
JK-триггера. Ниже представлена вентильная схема JK-триггера. Если clear = 0,
то триггер устанавливается в нулевое состояние. Первая ступень триггера
сохраняет значения по положительному фронту сигнала clock, вторая – по
отрицательному. Разработать ее Verilog-модели вентильного и dataflow-уровня.
a J K qn+1
J y
c 0 0 qn
q 0 1 0
1 0 1
clear 1 1 q'n
qbar
d
K ybar
b
clock
cbar
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 26
e-mail: hahanova@mail.ru