апкс 2011 03_verilog

759 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
759
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

апкс 2011 03_verilog

  1. 1. VERILOG 3. Dataflow уровень описания моделей Автоматизация проектирования компьютерных систем д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ2/9/2011 e-mail: hahanova@mail.ru 1
  2. 2. Цель лекции и содержание Цель – изучить принципы построения моделей вентильного и dataflow уровней План 1. Стандартные логические элементы 2. Определенные пользователем примитивы 3. Задержки 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 2 e-mail: hahanova@mail.ru
  3. 3. Dataflow-модели out=ab+c a #5 b e #4 out c 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 3 e-mail: hahanova@mail.ru
  4. 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; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 4 e-mail: hahanova@mail.ru
  5. 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. 6. Приоритеты операторов Оператор Описание + - ! ~ Унарные * / % Арифметические + - (binary) Бинарные << >> <<< >>> Сдвига < <= > = > Отношения == != === !== Равенства & ~& and nand ^ ~^ ^~ xor xnor | ~| or nor && Логическое and || Логическое or ?: Условный оператор 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 6 e-mail: hahanova@mail.ru
  7. 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. 8. Арифметические операторы Если хотя бы один бит операнда равен x, то результат равен x in1 = 4b110x; in2 = 4b1010; sum = in1 + in2; // результат операции сложения – 4bx Результат операции по модулю представляет собой остаток от деления двух чисел. Знак результата совпадает со знаком первого операнда. 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 = 4b0100%3 = 1 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 8 e-mail: hahanova@mail.ru
  9. 9. Операторы логические, отношения и равенства Логические операторы A=3; B=0; A&&B=0 A||B=1 !A=0 !B=1 A = 2b0x; B = 2b10; // Операнд с элементом 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. 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; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 10 e-mail: hahanova@mail.ru
  11. 11. Операторы редукции Операторы редукции или свертки & (and), ~& (nand), | (or), ~| (nor), ^ (xor), ^~ или ~^ (xnor) Пример • &x // 1&0&1&0=1b0 • |x // 1|0|1|0=1b1 • ^x // 1^0^1^0=1b0. 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 11 e-mail: hahanova@mail.ru
  12. 12. Операторы сдвигаОператоры сдвига Операторы сдвига  //x=4b1100 Оператор Описание  y=x>>1 //y=4b0110 a << b Сдвиг влево  y=x<<1 // y=4b1000 a >> b Сдвиг вправо  y=x<<2 //y=4b0000 a <<< b Знаковый сдвиг влево a >>> b Знаковый сдвиг вправо  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] 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 12 e-mail: hahanova@mail.ru
  13. 13. Оператор конкатенации Синтаксис: {expression | multiplier{expression}, expression | multiplier{expression}, . . .} Примеры. //A=1b1, B=2b00, C=2b10, D3b110 Y={B, C} //Y=4b0010 Y={A, B, C, D, 3b001} //Y=11b10010110001 Y={2{B}, C} //Y=6b000010 Y={3{A}, 2{B}, C} //Y=9b111000010 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 13 e-mail: hahanova@mail.ru
  14. 14. Оператор условного назначение Синтаксис: condition_expr ? true_expr: false_expr; mux_2to_1In0 Out module mux_2to_1 (out, In0, In1, Sel);In1 output Out; input In0, In1, Sel; Sel assign out = Sel ? In1 : In0; endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 14 e-mail: hahanova@mail.ru
  15. 15. Две модели мультиплексора 4 в 1 // Модель 1 module 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 // Модель 2 module 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 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 15 e-mail: hahanova@mail.ru
  16. 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. 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. 18. Системные задачи и функции.3  $stop [(n)]; $finish [(n)]; Режимы диагностических сообщений задач $stop и $finish n Сообщ ение 0 Отсутствует 1 Время моделирования Время моделированияи и работы CPU, 2 размер используемой памяти 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 18 e-mail: hahanova@mail.ru
  19. 19. Системные задачи и функции.4$printtimescale [ ( hierarchical_name ) ] ; Пример: // функции `timescale 1 ms / 1 usinteger $time module a_dat;integer $stime initialreal $realtime $printtimescale; endmoduleЗадача $printtimescale – выводит единицы измерения иточность вычисления времени для указанного модуляhierarchical_name. Системные функции $time и $stimeвозвращают текущее время моделирования в виде 64- и 32-битового целого числа, а функция $realtime – в вещественномформате. 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 19 e-mail: hahanova@mail.ru
  20. 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. 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
  22. 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); 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 22 e-mail: hahanova@mail.ru
  23. 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); 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 23 e-mail: hahanova@mail.ru
  24. 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. 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{1b1,a,1b0}} для a=4b0110? 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 25 e-mail: hahanova@mail.ru
  26. 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 qn qbar d K ybar b clock cbar 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 26 e-mail: hahanova@mail.ru
  27. 27. reset q #1 qbar #1 set set reset qn+1 0 0 qn 0 1 0 1 0 1 1 1 ? 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 27 e-mail: hahanova@mail.ru

×