Презентация к ЛР1

Слайд 2

План лабораторной работы Арифметико-логическое устройство (T) Описание АЛУ на Verilog HDL

План лабораторной работы

Арифметико-логическое устройство (T)
Описание АЛУ на Verilog HDL (S)
Верификация АЛУ

(S)
Проверка на отладочном стенде (S)
Слайд 3

Арифметико-логическое устройство АЛУ – блок процессора, выполняющий арифметические и поразрядно логические

Арифметико-логическое устройство

АЛУ – блок процессора, выполняющий арифметические и поразрядно логические операции
Арифметические

операции имеют перенос
Логические операции без переноса
АЛУ – комбинационная схема
На вход АЛУ поступают информационные сигналы (данные, над которыми происходит операция) и управляющие сигналы (определяют, какая операция будет произведена над данными), на выходе – результат операции и флаги
Слайд 4

Пример АЛУ

Пример АЛУ

Слайд 5

Слайд 6

Слайд 7

Слайд 8

Слайд 9

Слайд 10

Слайд 11

Слайд 12

Слайд 13

Слайд 14

Слайд 15

План лабораторной работы Арифметико-логическое устройство (T) Описание АЛУ на Verilog HDL

План лабораторной работы

Арифметико-логическое устройство (T)
Описание АЛУ на Verilog HDL (S)
Верификация АЛУ

(S)
Проверка на отладочном стенде (S)
Слайд 16

module ALU_RISCV ( input [4:0] ALUOp, input [31:0] A, input [31:0]

module ALU_RISCV (
input [4:0] ALUOp,
input [31:0] A,
input [31:0]

B,
output [31:0] Result,
output Flag
);

АЛУ RISC-V

Слайд 17

Слайд 18

Слайд 19

Слайд 20

CASE module mux ( input [3:0] d0, d1, d2, d3, input

CASE

module mux (
input [3:0] d0, d1, d2, d3,
input [1:0] s,
output reg [3:0]

y
);
always @ (*) begin
case (s)
2'b00: y = d0;
2'b01: y = d1;
2'b10: y = d2;
2'b11: y = d3;
endcase
end
endmodule
Слайд 21

module dut ( input a, b, c, output y ); wire

module dut (
input a, b, c,
output y
);
wire n1;
and_3 andgate (
.a(a),
.b(b),
.c(c),
.y(n1)
);
inv inverter (
.a(n1),
.y(y)
);
endmodule

Иерархия

модулей в Verilog

Имя подключаемого модуля (and_3, inv)
Название примитива. Например, нам может понадобиться 3 копии модуля and_3. Тогда мы сможем подключить 3 экземпляра модуля and_3, используя различные наименования для прототипов (andgate_1, andgate_2 …)
Символ точка, перед наименованием порта отсылает к реальному порту подключаемого модуля (у модуля inverter, порты именуются a, y). В скобках обозначается куда будут подключаться сигналы в top-модуле

Слайд 22

Тестовое окружение

Тестовое окружение

Слайд 23

module my_module ( input a, b, c, output y ); assign

module my_module (
input a, b, c,
output y
);
assign y = a & ~b

& ~c | a & ~b & c | a & ~b & c;
endmodule
Слайд 24

`timescale 1ns / 1ps module testbench (); reg a, b, c;

`timescale 1ns / 1ps
module testbench ();
reg a, b, c;
wire y;
my_module dut (a,

b, c, y);
initial begin
a = 0; b = 0; c = 0; #10;
if (y === 1)
$display(“Good”);
else
$display(“Bad”);
c = 1; #10;
end
endmodule
Слайд 25

initial begin go_op(6, 3); go_op(2, 6); go_op(5, 3); go_op(8, 2); $stop;

initial begin
   go_op(6, 3);
   go_op(2, 6);
   go_op(5, 3);
   go_op(8, 2);
   $stop;
end
task go_op;
   input [3:0] a_op, b_op;
 begin
   a = a_op;
   b = b_op;
   #100;
   if (res == (a + b))
      $display("good %d + %d = %d", a, b, LEDR[4:0]);
   else
      $display("bad %d + %d = %d", a, b, LEDR[4:0]);
   #10;
 end
endtask