27
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected] 1 3. Dataflow уровень описания моделей Автоматизация проектирования компьютерных систем VERILOG

апкс 2011 03_verilog

Embed Size (px)

Citation preview

Page 1: апкс 2011 03_verilog

2/9/2011д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ

e-mail: [email protected] 1

3. Dataflow уровень описания моделей

Автоматизация проектирования компьютерных систем

VERILOG

Page 2: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

2

Цель лекции и содержание

Цель – изучить принципы построения моделей вентильного и dataflowуровней

План1. Стандартные логические элементы2. Определенные пользователем примитивы3. Задержки

Page 3: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

3

Dataflow-модели

a

b

cout

e#5

#4

out=ab+c

Page 4: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

4

Оператор непрерывного назначения.1

Синтаксис:assign [drive_strength] [delay] net_value = expression {,net_value = expression};

Примеры:assign out=i1&i2; assign addr[15:0]=addr1[15:0]^addr2[15:0];assign {c_out, sum[3:0]}=a[3:0]+b[3:0]+c_in;

Page 5: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

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 единиц времени

Page 6: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

6

Приоритеты операторовОператор Описание

+ - ! ~ Унарные* / % Арифметические+ - (binary) Бинарные<< >> <<< >>> Сдвига< <= > = > Отношения== != === !== Равенства& ~& and nand^ ~^ ^~ xor xnor| ~| or nor&& Логическое and|| Логическое or? : Условный оператор

Page 7: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

7

Операторы 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

Операторы Verilog

Логические

Арифметические Побитовые

Отношения Равенства

Page 8: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

8

Арифметические операторы

Если хотя бы один бит операнда равен x, то результат равен x

in1 = 4'b110x;in2 = 4'b1010;sum = in1 + in2; // результат операции сложения – 4'bx

Результат операции по модулю представляет собой остаток от деления двух чисел. Знак результата совпадает со знаком первого операнда.

10 % 3 // результат 1, остаток от деления 10 на 3 равен 117 % 3 // результат 2, остаток от деления 17 на 3 равен 212 % 3 // результат 0, нет остатка от деления-7 % 3 // результат -1, знак первого операнда11 % -3 // результат 2 -4’d12 % 3 // результат 1, т.к. -4’d12 = 4'b0100%3 = 1

Page 9: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

9

Операторы логические, отношения и равенства

Логические операторыA=3; B=0;A&&B=0 A||B=1 !A=0 !B=1 A = 2'b0x; B = 2'b10; // Операнд с элементом xA && B = x // эквивалентно (x && 1)

Операторы отношенияreg [3:0] a, b; a = 4’b1100; b = 4’b0110;a < b // равняется логическому 0 a > 8 // равняется логической 1a <= b // равняется логическому 0 a >= 10 // равняется логической 1a < 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 // ложь – логический 0b == 4’b101x // результат равен x b != 4’b101x // результат равен xb === 4’b101x // истина – логическая 1 b !== 4’b101x // ложь – логический 0

Page 10: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

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 X1 0 1 x x 1 1 0 x x 1 1 1 1 1 1 0 1 x xx 0 x x x x x x x x x x 1 x x x x x x xz 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;

Page 11: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

11

Операторы редукции

Операторы редукции или свертки & (and), ~& (nand), | (or), ~| (nor), ^ (xor), ^~ или

~^ (xnor)

Пример• &x // 1&0&1&0=1'b0• |x // 1|0|1|0=1'b1• ^x // 1^0^1^0=1'b0.

Page 12: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

12

Операторы сдвигаОператоры сдвига //x=4'b1100 y=x>>1 //y=4'b0110 y=x<<1 // y=4'b1000 y=x<<2 //y=4'b0000

reg [3:0] a; a = 4’b1111; a << 3 = 4’b1000 a >> 3 = 4’b0001 a << 1’bz = 4’bxxxx a >> 1’bx = 4’bxxxx

reg [7:0] r8; r8 = a >>> b; // Сдвиг a вправо на b разрядов, // старшие биты заполняются значением a[7]

Оператор Описаниеa << b Сдвиг влевоa >> b Сдвиг вправо

a <<< b Знаковый сдвиг влевоa >>> b Знаковый сдвиг вправо

Операторы сдвига

Page 13: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

13

Оператор конкатенации

Синтаксис:{expression | multiplier{expression},

expression | multiplier{expression}, . . .} Примеры.

//A=1'b1, B=2'b00, C=2'b10, D3'b110Y={B, C} //Y=4'b0010Y={A, B, C, D, 3'b001} //Y=11'b10010110001Y={2{B}, C} //Y=6'b000010Y={3{A}, 2{B}, C} //Y=9'b111000010

Page 14: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

14

Оператор условного назначение

Синтаксис:condition_expr ? true_expr: false_expr;

mux_2to_1

In1

In0

Sel

Out module mux_2to_1 (out, In0, In1, Sel);output Out;input In0, In1, Sel;

assign out = Sel ? In1 : In0;endmodule

Page 15: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

15

Две модели мультиплексора 4 в 1

// Модель 1module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);

output out;input i0, i1, i2, i3;input s1, s0;

//Вложенный условный оператор assign out = s1 ? (s0 ? i3 : i2) : (s0 ? i1 : i0);

endmodule

// Модель 2module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);

output out;input i0, i1, i2, i3; // входы данныхinput s1, s0; // управляющие входы

assign out = (~s1 & ~s0 & i0) | (~s1 & s0 & i1) | (s1 & ~s0 & i2) | (s1 & s0 & i3);

endmodule

Page 16: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

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 Текущий формат времени

Page 17: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

17

Системные задачи и функции.2

Задача $monitor предлагает механизм для наблюдения за изменениями сигнала.$monitor | $monitorb | $monitorh | $monitoro (p1, p2, p3, ...) ;$monitoron; // влючить мониторинг$monitoroff; // выключить мониторинг .

Примерinitial // блок инициализацииbegin

$monitor($time, "clock = %b, reset = %b", clock, reset);end

Page 18: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

18

Системные задачи и функции.3

$stop [(n)];$finish [(n)];

n Сообщение0 Отсутствует1 Время моделирования

2 Время моделированияи и работы CPU,размер используемой памяти

Режимы диагностических сообщений задач $stop и $finish

Page 19: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

19

Системные задачи и функции.4

$printtimescale [ ( hierarchical_name ) ] ;// функции

integer $timeinteger $stimereal $realtime

Задача $printtimescale – выводит единицы измерения и точность вычисления времени для указанного модуля hierarchical_name. Системные функции $time и $stimeвозвращают текущее время моделирования в виде 64- и 32-битового целого числа, а функция $realtime – в вещественном формате.

Пример:`timescale 1 ms / 1 usmodule a_dat;initial

$printtimescale;endmodule

Page 20: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

20

Работа с файлами $fopen и $fclose integer multi_channel_descriptor = $fopen ( " file_name " );

| integer fd = $fopen ( " file_name ", type ); $fclose ( multi_channel_descriptor );

| $fclose (fd); Пример

integer file1, file2;initial begin

file1 = $fopen("file1");file2 = $fopen("file2");$display("The number used for file 1 is %0d", file1);. . .$fclose(file1);$fclose(file2);

end

Screen+Log File Otput$display $fdisplay$write $fwrite$strobe $fstrobe$monitor $fmonitor

Page 21: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

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

Page 22: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

22

Чтение двоичных данных из файла

integer code = $fread( myreg, fd); integer code = $fread( mem, fd); integer code = $fread( mem, fd, start); integer code = $fread( mem, fd, start, count); integer code = $fread( mem, fd, , count);

Page 23: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

23

Загрузка памяти из файла

$readmemb ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ;

| $readmemh ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ;

Примеры reg [7:0] mem[1:256];

initial $readmemh("mem.data", mem); initial $readmemh("mem.data", mem, 16); initial $readmemh("mem.data", mem, 128, 1);

Page 24: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

24

$random()

Размер возвращаемых значенй соответствует типу integer.

Пример использования функции $random.parameter SEED = 33;reg [31:0] vector;

always @(posedge clock)vector = $random (SEED);

Page 25: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

25

Контрольные вопросы и задания.11. Что означает оператор 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?

Page 26: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

26

Контрольные вопросы и задания.2 Синхронный счетчик может быть построен с использованием двухступенчатого

JK-триггера. Ниже представлена вентильная схема JK-триггера. Если clear = 0, то триггер устанавливается в нулевое состояние. Первая ступень триггера сохраняет значения по положительному фронту сигнала clock, вторая – по отрицательному. Разработать ее Verilog-модели вентильного и dataflow-уровня.

J

K

clear

clock

a

b

y

ybar

cbar

c

d

q

qbar

J K qn+1

0 0 qn

0 1 01 0 11 1 q'n

Page 27: апкс 2011 03_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

27

#1

#1

reset

set

q

qbarset reset qn+1

0 0 qn

0 1 01 0 11 1 ?