BÀI BÁO CÁO SỐ 1 THIẾT KẾ MẠCH CỘNG VÀ MẠCH TRỪ NHỊ PHÂN 4 BIT 1.. Thiết kế mạch cộng nhị phân 4 bit Cách thức thực hiện: Thiết kế mạch cộng nhị phân toàn phần 1 bit và ghép lại với nhau
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA ĐIỆN- ĐIỆN TỬ
-BÁO CÁO THỰC TẬP MÔN: THỰC TẬP THIẾT KẾ HỆ THỐNG
VÀ VI MẠCH TÍCH HỢP
GVHD: Th.S Lê Minh Thành
Họ và tên: Ngô Minh Nhật MSSV: 20161346 Lớp: Thứ 7 - tiết 1 – 5
THÀNH PHỐ HỒ CHÍ MINH – Tháng 11 năm 2022
Trang 2BÀI BÁO CÁO SỐ 1 THIẾT KẾ MẠCH CỘNG VÀ MẠCH TRỪ NHỊ PHÂN 4 BIT
1 Thiết kế mạch cộng nhị phân 4 bit
Cách thức thực hiện: Thiết kế mạch cộng nhị phân toàn phần 1 bit và ghép lại với nhau để tạo thành mạch cộng nhị phân toàn phần 4 bit
1.1 Thiết kế mạch cộng nhị phân toàn phần 1 bit
Sơ đồ khối:
Hình 1.1: Sơ đồ khối của mạch cộng nhị phân toàn phần 1 bit
A, B: Là 2 bit ngõ vào cộng (số hạng)
S: Tổng của 2 số A và B
Ci: Số nhớ vào
Co: Số nhớ ra
Bảng trạng thái:
Trang 30 1 1 0 1
Hình 1.2: Bảng trạng thái của mạch cộng toàn phần 1 bit
Từ bảng trạng thái, dùng định lý đại số Boole để rút gọn biểu thức logic:
S = �B�i + A��i + ��Ci + ABCi = �i (A⊕B) + Ci(� ⊕ �)
= Ci⊕ (A⊕B)
Co = AB�i+ �BCi + A�Ci+ ABCi = AB (�i+ Ci) + Ci (�B + A�)
= AB + Ci (A⊕B)
Sơ đồ logic:
Hình 1.3: Sơ đồ logic của mạch cộng nhị phân toàn phần 1 bit
Sơ đồ RTL:
Hình 1.4: Sơ đồ RTL của mạch cộng nhị phân toàn phần 1 bit
Trang 4Chương trình mô tả phần cứng bằng ngôn ngữ Verilog:
module FullAdder(
input wire a,b,ci,
output wire s,co);
assign s = a^b^ci ;
assign co = ((a^b)&ci) | (a&b) ;
endmodule
1.2 Thiết kế mạch cộng nhị phân toàn phần 4 bit
Sơ đồ khối:
Hình 1.5: Sơ đồ khối của mạch cộng nhị phân toàn phần 4 bit
A0 – A3: 4 bit nhị phân của A
B0 – B3: 4 bit nhị phân của B
S0 – S3: Tổng của kết quả cộng nhị phân
Cin: số nhớ vào
Cout: số nhớ ra
Trang 5Sơ đồ RTL:
Hình 1.6: Sơ đồ RTL của mạch cộng nhị phân toàn phần 4 bit
Chương trình mô tả phần cứng bằng ngôn ngữ Verilog:
module Adder_4bit(
input wire [3:0] A,
input wire [3:0] B,
input wire Cin,
output wire Cout,
output wire [3:0] Sum );
wire c1, c2, c3;
FullAdder add0 (A[0], B[0], Cin ,Sum[0],c1 ); FullAdder add1 (A[1], B[1], c1 ,Sum[1],c2 ); FullAdder add2 (A[2], B[2], c2 ,Sum[2],c3 ); FullAdder add3 (A[3], B[3], c3 ,Sum[3],Cout ); endmodule
Trang 6Test bench:
module Testbench_add;
// Inputs
reg [3:0] A;
reg [3:0] B;
reg Cin;
// Outputs
wire Cout;
wire [3:0] Sum;
// Instantiate the Unit Under Test (UUT) Adder_4bit uut (
.A(A), B(B), Cin(Cin), Cout(Cout), Sum(Sum) );
initial begin
// Initialize Inputs
A = 0;
B = 0;
Cin = 0;
#10;
Trang 7B=6;
Cin = 0;
#10;
A=9;
B=9;
Cin = 0;
#10;
A=8;
B=7;
Cin = 1;
#10;
A=9;
B=10;
Cin = 1;
#10;
A=15;
B=15;
Cin = 0;
// Add stimulus here end
endmodule
Trang 8Hình 1.7: Các trường hợp mô phỏng
Xét 5 trường hợp:
Từ 0ns đến 10ns: A=0000, B=0000, Cin=0 thì Sum=0000 và Cout=0
Từ 10ns đến 20ns: A=1000, B=0110, Cin=0 thì Sum=1110 và Cout=0
Từ 20ns đến 30ns: A=1001, B=1001, Cin=0 thì Sum=0010 và Cout=1
Từ 30ns đến 40ns: A=1000, B=0111, Cin=1 thì Sum=0000 và Cout=1
Từ 40ns đến 50ns: A=1001, B=1010, Cin=1 thì Sum=0100 và Cout=1 Nhận xét về mạch cộng nhị phân toàn phần 4 bit: Mạch cộng 4 bit có tổng Sum của A và B tối đa là 4 bit Khi kết quá vượt quá 4 bit (5 bit) thì bit thứ 5 sẽ bị tràn sang Cout và Sum sẽ hiển thị 4 bit
2 Thiết kế mạch trừ nhị phân 4 bit
2.1 Thiết kế mạch trừ nhị phân 4 bit cách 1
Cách thức thực hiện: Thiết kế mạch trừ nhị phân toàn phần 1 bit và ghép lại với nhau để tạo thành mạch trừ nhị phân toàn phần 4 bit
2.1.1 Thiết kế mạch trừ nhị phân toàn phần 1 bit
Sơ đồ khối:
Hình 2.1.1: Sơ đồ khối của mạch trừ nhị phân toàn phần 1 bit
Trang 9A : Là số bị trừ
B : Là số trừ
D: Là hiệu của 2 số A và B
Bi: Bit mượn của hiệu trước đó
Bo: Số mượn
Bảng trạng thái:
Hình 2.1.2: Bảng trạng thái của mạch trừ toàn phần 1 bit
Trang 10Sơ đồ logic:
Hình 2.1.3: Sơ đồ logic của mạch trừ nhị phân toàn phần 1 bit
Sơ đồ RTL:
Hình 2.1.4: Sơ đồ RTL của mạch trừ nhị phân toàn phần 1 bit
Trang 11Chương trình mô tả phần cứng bằng ngôn ngữ Verilog:
module Tru_Toan_Phan(
input wire a,b,bi,
output wire d,bo);
assign d = a^b^bi ;
assign bo = ((~a+b)&bi) | (~a&b) ;
endmodule
2.1.2 Thiết kế mạch cộng nhị phân toàn phần 4 bit
Sơ đồ khối:
Hình 2.1.5: Sơ đồ khối của mạch trừ nhị phân toàn phần 4 bit
A1 – A4: 4 bit nhị phân của A
B1 – B4: 4 bit nhị phân của B
D1 – D4: Hiệu của kết quả A - B
Bin: Bit mượn của hiệu trước đó
Bout: Số mượn
Trang 12Sơ đồ RTL:
Hình 2.1.6: Sơ đồ RTL của mạch trừ nhị phân toàn phần 4 bit
Chương trình mô tả phần cứng bằng ngôn ngữ Verilog:
module Mach_Tru_4bit(
input wire [3:0] A,
input wire [3:0] B,
input wire Bin,
output wire [3:0] D,
output wire Bout);
wire d1, d2, d3;
Tru_Toan_Phan tru0 (A[0], B[0], Bin,D[0],b1 ); Tru_Toan_Phan tru1 (A[1], B[1], b1 ,D[1],b2 ); Tru_Toan_Phan tru2 (A[2], B[2], b2 ,D[2],b3 ); Tru_Toan_Phan tru3 (A[3], B[3], b3 ,D[3],Bout); endmodule
Trang 13Test bench:
module Techbench_tru;
reg [3:0] A;
reg [3:0] B;
reg Bin;
wire [3:0] D;
wire Bout;
Mach_tru_4bit uut (
.A(A), B(B), Bin(Bin), D(D),
.Bout(Bout) );
initial begin //Truong hop A > B
A = 8;B = 6;Bin = 0;#10;
A = 8;B = 6;Bin = 1;#10; //Truong hop A = B
A = 8;B = 8;Bin = 0;#10;
A = 8;B = 8;Bin = 1;#10; //Truong hop A < B
A = 6;B = 8;Bin = 0;#10;
Trang 14A = 6;B = 8;Bin = 1;#10;
$stop;
end end
endmodule
Hình 2.1.7: Các trường hợp mô phỏng
Xét 6 trường hợp:
Từ 0ns đến 10ns: A = 8, B = 6, Bi = 0 thì D = 2 và Bout = 0
Từ 10ns đến 20ns: A = 8, B = 6, Bi = 1 thì D = 1 và Bout = 0
Từ 20ns đến 30ns: A = 8, B = 8, Bi = 0 thì D = 0 và Bout = 0
Từ 30ns đến 40ns: A = 8, B = 8, Bi = 1 thì D = -1 và Bout = 1
Từ 40ns đến 50ns: A = 6, B = 8, Bi = 0 thì D = -2 và Bout = 1
Từ 50ns đến 60ns: A = 6, B = 8, Bi = 1 thì D = -3 và Bout = 1
==> Nhận xét về kết quả mô phỏng: Các kết quả thu được đúng với bảng trạng thái của mạch trừ nhị phân toàn phần 4 bit Khi D là số dương thì Bout = 0 và ngược lại, khi D là số âm thì Bout = 1
Trang 152.2 Thiết kế mạch trừ nhị phân 4 bit cách 2 (cộng bù)
Sơ đồ khối:
Hình 2.2.1: Sơ đồ khối của mạch trừ nhị phân 4 bit
Sơ đồ RTL:
Hình 2.2.2: Sơ đồ RTL của mạch trừ nhị phân 4 bit
Chương trình mô tả phần cứng bằng ngôn ngữ Verilog: module Tru_toan_phan(
input wire a,b,bi,
output wire d,bo);
assign d = a^(~b)^bi ;
Trang 16assign bo = ((a^(~b))&bi) | (a&(~b)) ;
endmodule
module Mach_tru_4bit_bu_2(
input wire [3:0] A,
input wire [3:0] B,
input wire Bin,
output wire [3:0] D,
output wire Bout );
wire d1, d2, d3;
Tru_toan_phan tru0 (A[0], B[0], 1’b1 ,D[0], 1’b1 ); Tru_toan_phan tru1 (A[1], B[1], 1’b1 ,D[1], 1’b1 ); Tru_toan_phan tru2 (A[2], B[2], 1’b1 ,D[2], 1’b1 ); Tru_toan_phan tru3 (A[3], B[3], 1’b1 ,D[3], 1’b1 ); endmodule
Test bench:
module Test;
reg [3:0] A; reg [3:0] B; reg Bin;
wire [3:0] D;
wire Bout;
Mach_tru_4bit_bu_2 uut ( A(A), B(B), Bin(Bin), D(D), Bout(Bout) );
Trang 17initial begin
//Truong hop A>B
A = 6;B = 2;Bin = 0;#100;
A = 6;B = 2;Bin = 1;#100;
//Truong hop A<B
A = 3;B = 7;Bin = 0;#100;
A = 3;B = 7;Bin = 1;#100;
//Truong hop A=B
A = 5;B = 5;Bin = 0;#100;
A = 5;B = 5;Bin = 1;#100;
$stop;
end
endmodule
Hình 2.2.3: Các trường hợp mô phỏng
Xét 6 trường hợp:
Từ 0ns đến 100ns: A = 6, B = 2, Bin=0 thì D = 4 và Bout = 0
Từ 100ns đến 200ns: A = 6, B = 2, Bin=1 thì D = 3 và Bout = 0
Trang 18Từ 200ns đến 300ns: A = 3, B = 7, Bin=0 thì D = -4 và Bout = 1
Từ 300ns đến 400ns: A = 3, B = 7, Bin=1 thì D = -5 và Bout = 1
Từ 400ns đến 500ns: A = 5, B = 5, Bin=0 thì D = 0 và Bout = 0
Từ 500ns đến 600ns: A = 5, B = 5, Bin=1 thì D = -1 và Bout = 1
Nhận xét: Các trường hợp mô phỏng cho ra kết quả D đúng bằng hiệu của hai số A và B Đối với các giá trị D là số lớn hơn hoặc bằng 0 thì Bout=0 còn đối với các giá trị D là số bé hơn 0 thì Bout=1