var42_new (1083780), страница 3
Текст из файла (страница 3)
always @ (posedge clk)
begin
if (en == 1'b1)
begin
case (funk)
4'b0000: res = (~op_a) | op_b;
4'b0001: res = (~(op_a) && (~op_b));
4'b0010: res = ustanovka;
4'b0011: res = kvadr;
4'b0100: res = bigest;
default: res = 8'b00000000;
endcase
end
end
endmodule
Код top.ucf:
NET "clk" LOC = "L15";
NET "com_bat[0]" LOC = "N4";
NET "com_bat[1]" LOC = "P4";
NET "com_bat[2]" LOC = "P3";
NET "com_bat[3]" LOC = "F5";
NET "data_kn[0]" LOC = "A10";
NET "data_kn[1]" LOC = "D14";
NET "data_kn[2]" LOC = "C14";
NET "data_kn[3]" LOC = "P15";
NET "led[0]" LOC = "U18" ;
NET "led[1]" LOC = "M14" ;
NET "led[2]" LOC = "N14";
NET "led[3]" LOC = "L14" ;
NET "led[4]" LOC = "M13" ;
NET "led[5]" LOC = "D4" ;
NET "led[6]" LOC = "P16";
NET "led[7]" LOC = "N12";
Для тестирования работы ALU был написан файл тестирования:
`timescale 1ns / 1ps
module test;
// Inputs
reg [3:0] data_kn;
reg [3:0] com_bat;
reg clk=1'b0;
// Outputs
wire [7:0] led;
// Instantiate the Unit Under Test (UUT)
top uut (
.data_kn(data_kn),
.com_bat(com_bat),
.clk(clk),
.led(led)
);
always #10 clk=~clk;
initial begin
#50
data_kn = 4'b0010; //число 1
com_bat = 4'b0001; // запомнили число 1
#40
data_kn = 4'b0101; // число 2
com_bat = 4'b0010; // запомнили число 2
#40
data_kn = 4'b1001; //
com_bat = 4'b0100; //
#40
com_bat = 4'b1000; // en = 1
#40
data_kn = 4'b0000; //
com_bat = 4'b0100;
#40
data_kn = 4'b0001; //
com_bat = 4'b0100;
#40
data_kn = 4'b0010; //
com_bat = 4'b0100;
#40
data_kn = 4'b0011; //
com_bat = 4'b0100;
#40
data_kn = 4'b0100;
com_bat = 4'b0100;
#40
data_kn = 4'b0010;
com_bat = 4'b0100;
end
endmodule
Таблицы истинности:
I Поразрядные операции
6. (НЕ-Операнд1)-ИЛИ-Операнд2
a | b | c |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 1 | |
1 | 0 | |
0 | 1 |
II Логические операции
6 - Операнд1–логическое_И–Операнд2
a | b | c |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 1 | |
1 | 0 | |
0 | 1 |
III Битовые операции
6. установка в 1 разряда Операнд1, номер которого задаётся Операнд2
a | b | c |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 1 | |
1 | 0 | |
0 | 1 |
IV Арифметические операции
6. квадрат Операнд2 (используя операции сложения со сдвигом)
a | b | c |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 0 | |
0 | 1 | |
1 | 0 | |
0 | 1 |
V Прочие операции
11. вывод большего операнда
a | b |
0 | 0 |
0 | 0 |
0 | 0 |
0 | 0 |
0 | 0 |
0 | 1 |
1 | 0 |
0 | 1 |
Тестирование модуля top в isim:
RTL схема:
Technology schem: