Professional Documents
Culture Documents
Mạch Cộng Trừ Nhân So Sánh Có Thể Chuyển Chế Độ
Mạch Cộng Trừ Nhân So Sánh Có Thể Chuyển Chế Độ
HCM
KHOA ĐIỆN - ĐIỆN TỬ
~~~~
Hình 1. Sơ đồ khối Topmodule: mạch cộng, trừ, nhân, so sánh 2 số nhị phân 4
bit có thể chuyển chế độ ........................................................................................ 8
Hình 2. Bộ cộng toàn phần .................................................................................... 5
Hình 3. Cấu tạo của bộ cộng toàn phần 1 bit ........................................................ 9
Hình 4. Cấu tạo Khối mạch cộng 2 số nhị phân 4 bit ......................................... 10
Hình 5. Kết quả Testbench của khối mạch cộng 2 số nhị phân 4 bit .................. 10
Hình 6. Cấu tạo của Khối mạch trừ 2 số nhị phân 4 bit ...................................... 11
Hình 7. Kết quả Testbench của khối mạch trừ 2 số nhị phân 4 bit ..................... 12
Hình 8. Cấu tạo bên trong của Khối mạch nhân 2 số nhị phân 4 bit .................. 13
Hình 9. Kết quả Testbench của Khối nhân 2 số nhị phân 4 bit........................... 14
Hình 10. Sơ đồ khối bộ so sánh 1 bit .................................................................. 15
Hình 11. Cấu tạo bên trong của bộ so sánh 1 bit ................................................ 15
Hình 12. Cấu tạo bên trong của Khối mạch so sánh 2 số nhị phân 4 bit ............ 16
Hình 13. Kết quả Testbench của Khối mạch so sánh 2 số nhị phân 4 bit ........... 16
Hình 14. a) FF-D chỉ có chân Set tích cực mức cao ........................................... 17
Hình 15. Cấu tạo Khối mạch đếm vòng 4 bit...................................................... 17
Hình 16. Kết quả Testbench của Khối mạch đếm vòng 4 bit ............................. 18
Hình 17. Sơ đồ khối chi tiết của Topmodule ...................................................... 19
Hình 18. Kết quả Testbench của Topmodule ở chế độ cộng, trừ, nhân .............. 20
Hình 19. Kết quả Testbench của Topmodule ở chế độ so sánh .......................... 20
DANH MỤC BẢNG
6
B. PHẦN NỘI DUNG
1. Tổng quan về mạch cộng, trừ, nhân, so sánh 2 số nhị phân có thể chuyển
chế độ
Mạch được cấu tạo cơ bản bao gồm 5 khối chính như sau :
• Khối mạch cộng hai số A và B (4 bit)
7
Sau khi thực hiện ghép các khối con (submodule) trên ta sẽ được một khối
lớn (topmodule) có 4 ngõ vào (2 ngõ vào A, B 4bit, ngõ vào nút BTN và RES)
và 5 ngõ ra (ngõ ra O 8bit, 1 ngõ ra bit dấu, 3 ngõ ra so sánh: A>B, A<B, A=B)
như Hình 1.
*Chi tiết về cách kết nối các khối sẽ được trình bày ở phần 3.1.
8
2. Triển khai thiết kế từng khối chức năng trong hệ thống
2.1. Khối mạch cộng
Bộ cộng toàn phần 1 bit
Từ bảng trạng thái trên ta viết được phương trình và xây dựng được khối
mạch cộng toàn phần 1 bit từ các cổng logic:
S = A⊕B⊕Cin Cout = (A+B).Cin + A.B
9
Mạch cộng toàn phần 4 bit
Ta kết nối 4 khối cộng toàn phần 1 bit thành 1 khối cộng toàn phần 4 bit.
Để cho phép thực hiện chế độ cộng 4 bit, ta sẽ cho thêm một ngõ vào E tích cực
mức cao kết nổi cổng AND với các ngõ ra như Hình. Khi ngõ vào E mức 0, bất
chấp các ngõ vào thì ngõ ra S vẫn bằng 0. Khi ngõ vào E tích cực mức 1, ngõ ra
S sẽ hiển thị kết quả cộng từ 2 số nhị phân 4 bit A và B.
FA FA FA FA
Hình 5. Kết quả Testbench của khối mạch cộng 2 số nhị phân 4 bit
Testcase 1: ngõ vào E ở mức 0, cho dù giá trị A, B có bằng bao nhiêu thì
ngõ ra S vẫn ở giá trị là 0. Như trong testbench thì lúc này ngõ vào A là 12 và B
là 3 thì ngõ ra S luôn ở mức 0.
Testcase 2: ta cho ngõ vào E lên mức 1. Lúc này như trong testbench cứ
mỗi 100 ns ta lại thay đổi giá trị của 2 số hạng A và B lần lượt là 6 và 4; 7 và 7;
14 và 15 thì ngõ ra S ở mỗi 100 ns lần lượt bằng 10, 14, 29. Kết quả ngõ ra S
đúng bằng tổng của A và B.
Testcase 3: ta lại cho ngõ vào E về 0 (không tác động ) thì lúc này lại bất
chấp giá trị A, B ngõ ra S luôn bằng 0.
10
Như vậy kết quả testbench đã cho thấy mạch thực hiện đúng chức năng,
yêu cầu của khối mạch cộng 2 số 4 bit.
Hình 6. Cấu tạo của Khối mạch trừ 2 số nhị phân 4 bit
Để tạo bộ trừ 4 bit ta sử dụng 2 bộ cộng 4 bit với các ngõ vào:
• A: số trừ và B: số bị trừ
• Co : bit nhớ.
Các ngõ ra:
• Bit dấu: C4 = 1 là dấu “+”. Nếu C4 = 0 là dấu “-”
• M: giá trị của 2 số A trừ cho B
11
Kết quả Testbench
Hình 7. Kết quả Testbench của khối mạch trừ 2 số nhị phân 4 bit
Testcase 1: ngõ vào E=0 nên bất chấp giá trị ngõ vào A và B, ngõ ra O
luôn bằng 0.
Testcase 2: ngõ vào E lên mức 1, ta cho A=15 và B=1 thì giá trị ngõ ra O
là kết quả của A trừ cho B nên S=14.
Testcase 3: ngõ vào E vẫn ở mức 1, vẫn giữ giá trị của A=15 còn B thay
bằng 15, khi này kết quả ngõ ra S sẽ bằng 0.
Testcase 4: ngõ ra E lại về 0, ngõ ra S cũng ở 0 bất chấp giá trị A, B.
Kết quả testbench cho thấy mạch chạy đúng chức năng của khối mạch trừ
2 số nhị phân 4 bit.
12
2.3. Khối mạch nhân
Tổng quát về các bước thực hiện mạch nhân 2 số nhị phân 4 bit
Mạch nhân cơ bản được cấu tạo từ các bộ cộng toàn phần 1 bit và các
cổng AND. Về việc thực hiện bài toán nhân có thể xem như gồm 2 bước:
• Tính các tích từng phần: thực hiện bởi các cổng AND
• Tính tổng của các tích từng phần: thực hiện bởi bộ cộng toàn phần 1 bit
và áp dụng bài toán chuỗi số
Bộ nhân sẽ có a3, a2, a1, a0; b3, b2, b1, b0 là ngõ vào tương ứng với 2 số
nhị phân 4 bit A, B và ngõ ra 8 bit tương ứng với 8 chân P[7] đến P[0].
Hình 8. Cấu tạo bên trong của Khối mạch nhân 2 số nhị phân 4 bit
Để có thể cho phép thực hiện chế độ nhân ta cũng sẽ cho thêm 1 ngõ vào
E tích cực mức cao bằng cách kết nối chân E với từng ngõ ra bằng cổng AND.
13
Kết quả Testbench
Hình 9. Kết quả Testbench của Khối nhân 2 số nhị phân 4 bit
Testcase 1: ngõ vào E lên mức 1, ta cho ngõ vào A=9 và B=1. Một số nào
đó nhân với 1 sẽ ra chính nó nên lúc này ngõ ra P bằng 9
Testcase 2: ngõ vào E vẫn ở mức 1, ta cho A=0 và B=7 để kiểm tra một
số nhân với 0. Ngõ ra P lúc này bằng 0
Testcase 3: ngõ vào E vẫn ở mức 1, ta cho A= 10 và B=11 để kiểm tra
một số nhân với 10. Ngõ ra lúc này bằng 110 đúng với mong muốn.
Testcase 4: ngõ vào E vẫn ở 1, lúc này ta kiểm tra 2 số A và B lớn nhất
(trong số nhị phân 4 bit) là A=B=15 nhân với nhau thì ngõ ra P bằng 225.
Testcase 5: ngõ vào E bằng 0, bất chấp ngõ vào A, B thì ngõ ra P luôn
bằng 0.
Vậy kết quả Testbench đã cho thấy mạch chạy đúng chức năng của khối
mạch nhân 2 số nhị phân 4 bit.
14
2.4. Khối mạch so sánh
Mạch so sánh 2 số 1 bit
Trong đó :
• Ngõ ra S: sẽ lên 1 nếu 2 bit được so sánh a>b
• Ngõ ra G: sẽ lên 1 nếu 2 bit được so sánh a=b
• Ngõ ra I: sẽ lên 1 nếu 2 bit được so sánh a<b
Ta có bảng giá trị của mạch so sánh 1 bit như sau:
Bảng 2: Bảng giá trị của Mạch so sánh 2 số nhị phân 1 bit
Từ bảng trạng thái trên ta viết được phương trình và xây dựng được khối
mạch so sánh 1 bit từ các cổng logic như sau:
15
Mạch so sánh 2 số nhị phân 4 bit
Hình 12. Cấu tạo bên trong của Khối mạch so sánh 2 số nhị phân 4 bit
Hình 13. Kết quả Testbench của Khối mạch so sánh 2 số nhị phân 4 bit
Testcase 1: ngõ vào E lên mức 1, ta cho 2 số nhị phân A=15 và B=13. Vì
A>B nên ngõ ra ở greater sẽ lên mức 1 và các ngõ ra còn lại xuất ra mức 0.
Testcase 2: ngõ vào E vẫn ở mức 1, lúc này ta cho A= 11 và B=14 để
A<B nên ngõ ra ở less sẽ lên mức 1 và các ngõ ra còn lại ở mức 0.
Testcase 3: ngõ vào E vẫn ở mức 1, lúc này ta cho A= 8 và B=8 để A=B
khi đó ngõ ra ở equal sẽ lên mức 1 và các ngõ ra còn lại sẽ là mức 0.
Testcase 4: ngõ vào E về 0, lúc này bất chấp A và B thì 3 ngõ ra greater,
less và equal luôn bằng 0.
Qua kết quả cho thấy mạch thực hiện đúng chức năng của khối so sánh 2
số 4 bit.
16
2.5. Khối mạch đếm vòng
Mạch đếm vòng 4 bit có cấu tạo cơ bản là một thanh ghi dịch dùng Flip-
Flop D với ngõ ra tầng sau cùng được đưa về ngõ vào của tầng đầu. Nhưng khi
mới cấp nguồn cho mạch chạy, ta không biết bit 1 nằm ở ngõ ra của tầng nào.
Do đó cần phải thiết lập dữ liệu dịch chuyển ban đầu bằng cách dùng ngõ vào
Pre và Clr để đặt trước số đếm, trạng thái ban đầu sẽ là 1000 nên FF-D đầu tiên
sẽ được set lên 1 và 3 FF-D còn lại clear về 0. Để có thể thiết kế được mạch
được nêu như trên ta tiến hành thiết kế 2 loại FF-D với 2 chức năng khác nhau:
• FF-D 1 chỉ có chân Set tích cực mức cao
• FF-D 2 chỉ có chân Clr tích cực mức cao
Hình 14. a) FF-D chỉ có chân Set tích cực mức cao
Bằng cách dùng 1 FF-D 1 và 3 FF-D 2, kết nối 4 FF-D trên như hình ta
sẽ được 1 khối mạch đếm vòng 4 bit hoàn chỉnh:
17
Kết quả Testbench
Hình 16. Kết quả Testbench của Khối mạch đếm vòng 4 bit
Mặc định ban đầu ta cho ngõ vào RES lên 1 xung để ngõ ra Q0 lên 1, các
ngõ ra khác là 0. Mỗi khi có xung Ck cạnh xuống thì ngõ ra Q kế tiếp sẽ lên 1 và
các ngõ ra khác sẽ là 0. Như vậy cứ sau 4 nhịp xung Ck cạnh xuống mạch đã
thực hiện xong 1 chu trình đếm vòng và cứ thế lặp lại.
Nhìn vào kết Testbench cho thấy mạch đã chạy đúng theo chức năng của
khối mạch đếm vòng 4 bit.
18
3. Hoàn thiện mạch cộng, trừ, nhân, so sánh có thể chuyển chế độ
3.1. Liên kết các khối
Sau khi hoàn thiện tất cả các khối con (submodule), ta tiến hành ghép
chúng lại như sau: Các mạch cộng, trừ, nhân và so sánh sẽ có chung 2 ngõ vào
A, B (4 bit). Mỗi ngõ ra từ Q0 → Q3 của mạch đếm vòng sẽ kết nối tới từng chân
Enable của mạch cộng, trừ, nhân, và so sánh. Ngoài ra, các ngõ ra của mạch
cộng, trừ, nhân sẽ được kết nối với các cổng OR để có chung ngõ ra. Chi tiết
được mô tả như trong Hình 17.
Thực chất tất cả các khối đều hoạt động nhưng do mỗi ngõ ra Q của mạch
đếm vòng được kết nối với chân E của mỗi mạch và các ngõ ra được kết nối
chung với cổng OR (trừ mạch so sánh) nên ngõ ra Q nào của khối đếm vòng
đang ở mức 1 thì ngõ ra O của Topmodule sẽ xuất ra kết quả của mạch được nối
19
chân E với ngõ ra Q đó. Riêng ngõ ra bit Dấu chỉ được tính khi mạch đang thực
hiện chế độ trừ (ngõ ra bit Dấu bằng 1 biểu diễn số dương, bằng 0 thì là số âm).
3.2. Kết quả Testbench của Topmodule
Hình 18. Kết quả Testbench của Topmodule ở chế độ cộng, trừ, nhân
Ở đây chúng ta sẽ giả sử mỗi lần nhấn nút BTN thì ngõ vào nút BTN của
mạch là một xung lên rồi xuống đơn giản trong khoảng thời gian ngắn (20 ns).
Testcase 1: mặc định ban đầu ta cho ngõ vào RES lên 1 rồi xuống 0, mạch
sẽ thực hiện chế độ cộng, lúc này ngõ ra O sẽ chỉ hiển thị kết quả là phép cộng
của hai số A và B. Ở trường hợp này ta cho A=4 và B=2 nên ngõ ra O là 6.
Testcase 2: ngõ vào BTN lên 1 xung, ngay sau đó mạch sẽ chuyển sang
chế độ trừ và ngõ ra O sẽ là kết quả của số A trừ cho số B. A=5 và B=3, ngõ ra
O sẽ bằng 2 nhưng kết quả là số dương nên bit dấu lên 1.
Testcase 3: vẫn ở chế độ trừ nhưng đảo giá trị của A và B, lúc này A=3 và
B=5, ngõ ra O cũng là 2 nhưng kết quả phải là số âm nên ngõ ra bit Dấu về 0.
Testcase 4: ngõ vào BTN thêm 1 xung, mạch chuyển sang chế độ nhân,
ngõ ra O hiển thị kết quả của 2 số A và B nhân với nhau A=7, B=8 nên O=56.
20
Testcase 5: Thêm xung vô ngõ vào BTN lần 3, mạch sẽ chuyển sang chế
độ so sánh. Ta lấy A=9 và B=6 để giá trị của A lớn hơn B khi này ngõ ra greater
(A>B) lên mức 1 các ngõ ra khác ở mức 0.
Testcase 6: vẫn ở chế độ so sánh, ta lại cho A=11, B=11 để giá trị của A
bằng B lúc này ngõ ra equal (A=B) lên 1 và các ngõ ra khác là 0.
Testcase 7: vẫn trong chế độ so sánh nên khi cho A=3 và B=8 khi này A
nhỏ hơn B, ngõ ra less (A<B) lên 1 và các ngõ ra khác sẽ ở mức 0.
Testcase 8: Cuối cùng ta cho thêm 1 xung vào BTN, mạch lại chuyển về
chế độ cộng như ban đầu. Giá trị ngõ vào A và B vẫn giữ nguyên của trường
hợp trước đó. Lúc này ngõ ra O sẽ là 11, các ngõ ra còn lại về mức 0.
Kết quả testbench trên đã cho thấy mạch thực hiện hoàn toàn đúng yêu
cầu và chức năng cho từng trường hợp thử.
21
C. PHẦN KẾT LUẬN
Qua quá trình nghiên cứu và thực hiện, chúng em đã thành công trong
việc thiết kế và mô phỏng một vi mạch số có khả năng cộng, trừ, nhân và so
sánh hai số nhị phân 4 bit sử dụng ngôn ngữ Verilog. Mạch thiết kế đáp ứng
được các yêu cầu về tính chính xác và độ tin cậy cao.
Quá trình mô phỏng và kiểm tra đã giúp chúng em sửa chữa được các vấn
đề, các lỗi tiềm ẩn, đồng thời cung cấp một cái nhìn tổng quan về cách thức hoạt
động của mạch trong các tình huống khác nhau.
Tuy không đạt được tính ứng dụng cao trong môi trường thực tế nhưng nó
có khả năng tích hợp vào các hệ thống số phức tạp hơn. Trong tương lai, chúng
em dự định sẽ tiếp tục nghiên cứu để cải thiện độ tin cậy của mạch, đồng thời
phát triển và mở rộng khả năng của mạch để hỗ trợ thực hiện thêm các phép
toán số học khác phức tạp hơn. Việc tích hợp với các công nghệ mới sẽ được
xem xét để nâng cao khả năng ứng dụng của mạch trong thế giới mà kĩ thuật số
càng ngày càng phát triển.
22
PHỤ LỤC
assign s = a^b^ci;
assign co = ((a^b)&ci) + (a&b);
endmodule
wire c1,c2,c3;
wire [4:0] H;
fa1b f1 (A[0],B[0],1'b0,H[0],c1);
fa1b f2 (A[1],B[1],c1,H[1],c2);
fa1b f3 (A[2],B[2],c2,H[2],c3);
fa1b f4 (A[3],B[3],c3,H[3],H[4]);
endmodule
23
output[3:0] M,
output wire CO );
wire c4,c5,c6;
wire [3:0] X;
fa1b f4 (A[0],B[0],CI,X[0],c4);
fa1b f5 (A[1],B[1],c4,X[1],c5);
fa1b f6 (A[2],B[2],c5,X[2],c6);
fa1b f7 (A[3],B[3],c6,X[3],CO);
endmodule
module fulladder4bit_2(
input [3:0] A,
input CI,
output [3:0] X,
output CO );
wire c7,c8,c9;
fa1b f8 (A[0],1'b0,CI,X[0],c7);
fa1b f9 (A[1],1'b0,c7,X[1],c8);
fa1b f10 (A[2],1'b0,c8,X[2],c9);
fa1b f11 (A[3],1'b0,c9,X[3],CO);
endmodule
module minus4bit(
input [3:0] A,
input [3:0] B,
input E,
output dau,
output[4:0] M );
wire [3:0] H;
wire [4:0] X;
wire cx;
fulladder4bit_1 t1 (A[3:0],~B[3:0],1'b1,H[3:0],cx);
fulladder4bit_2 t2 (H[3:0],~cx,X[3:0],X[4]);
24
assign M[0] = E&X[0];
assign M[1] = E&X[1];
assign M[2] = E&X[2];
assign M[3] = E&X[3];
assign M[4] = E&X[4];
endmodule
wire[3:0] X,Y,Z,T;
wire[10:0] O;
wire[7:1] S;
wire[7:1] H;
endmodule
assign s=a&(~b)&e;
assign i=(~a)&b&e;
assign x=a~^b;
assign g=x&e;
endmodule
module compare(
input [3:0] A,
input [3:0] B,
input E,
output greater,
output less,
output equal );
wire [3:0] X;
wire [3:0] Y;
wire [2:0] Z;
ss1bit s4 (A[3],B[3],E,X[3],Z[2],Y[3]);
ss1bit s3 (A[2],B[2],Z[2],X[2],Z[1],Y[2]);
26
ss1bit s2 (A[1],B[1],Z[1],X[1],Z[0],Y[1]);
ss1bit s1 (A[0],B[0],Z[0],X[0],equal,Y[0]);
endmodule
endmodule
module ffd_2(
input clk,
input reset,
input D,
output reg Q );
endmodule
module ring4bit(
output wire Q0,
output wire Q1,
output wire Q2,
output wire Q3,
27
input CLK,
input RES );
ffd_1 d1 (CLK,RES,Q3,Q0);
ffd_2 d2 (CLK,RES,Q0,Q1);
ffd_2 d3 (CLK,RES,Q1,Q2);
ffd_2 d4 (CLK,RES,Q2,Q3);
endmodule
wire E0,E1,E2,E3;
wire [4:0] S,M;
wire [7:0] P;
ring4bit ring(.Q0(E0),.Q1(E1),.Q2(E2),.Q3(E3),.CLK(BUTTON),.RES(RES) );
fa4b fab (.A(A),.B(B),.E(E0),.S(S) );
minus4bit mn (.A(A),.B(B),.E(E1),.dau(Dau),.M(M) );
multiply mp (.A(A),.B(B),.E(E2),.P(P) );
compare cp (.A(A),.B(B),.E(E3),.greater(greater),.less(less),.equal(equal) );
endmodule
28
❖ Chương trình Testbench cho Topmodule
module test;
// Inputs
reg BUTTON;
reg RES;
reg [3:0] A;
reg [3:0] B;
// Outputs
wire Dau;
wire [7:0] O;
wire greater;
wire less;
wire equal;
system uut (
.O (O),
.greater(greater),
.less(less),
.equal(equal),
.BUTTON(BUTTON),
.RES(RES),
.A (A),
.B (B),
.Dau(Dau)
);
initial begin
BUTTON = 0;
RES = 1;
A=4;
B=2;
#20;
BUTTON = 0;
RES = 0;
A=4;
B=2;
#80;
BUTTON = 1;
RES = 0;
#20;
29
BUTTON = 0;
RES = 0;
A=5;
B=3;
#100;
BUTTON = 0;
RES = 0;
A=3;
B=5;
#100;
BUTTON = 1;
RES = 0;
#20;
BUTTON = 0;
RES = 0;
A=7;
B=8;
#100;
BUTTON = 1;
RES = 0;
#20;
BUTTON = 0;
RES = 0;
A=9;
B=6;
#100;
BUTTON = 0;
RES = 0;
A=11;
B=11;
#100;
BUTTON = 0;
RES = 0;
A=3;
B=8;
#100;
BUTTON = 1;
RES = 0;
#20;
BUTTON = 0;
30
RES = 0;
A=3;
B=8;
#100;
end
endmodule
31