Lập bảng K cho mỗi đầu ra.. - Tạo biểu thức tối giản của nguyên hàm đánh vòng các ô làm hàm ra bằng 1, của đảo hàm đánh vòng các ô làm hàm ra bằng 0.. - Trong bảng K tổ hợp thừa ta đánh
Trang 1THIẾT KẾ MẠCH CHUYỂN MÃ
MÃ ĐẦU VÀO BCD 7421 – MÃ ĐẦU RA BCD 8421
*
Phân tích bài toán và Thực hiên:
Trong các thiết bị điện tử số, để biễu diễn 10 chữ số thập phân từ 0 đến 9, người ta dùng 4 bit để tổ hợp nên tạo ra được 16 tổ hợp khác nhau.Ta chỉ dùng 10 tổ hợp trong 16 tổ hợp nên tạo ra đựơc nhiều hệ mã khác nhau trong đó có 6 tổ hợp
thừa Những hệ mã đó là: mã BCD 8421, BCD 7421, BCD 5421, BCD 2421, Gray, Dư 3.
- Từ bảng mã BCD7421 gốc ta thiết kế mạch chuyển mã sang bảng mã BCD8421
- Mỗi mạch có 4 đầu ra x,y,z,t mỗi đầu ra là một hàm của 4 biến vào a,b,c,d Lập bảng
K cho mỗi đầu ra.
- Tạo biểu thức tối giản của nguyên hàm đánh vòng các ô làm hàm ra bằng 1, của đảo hàm đánh vòng các ô làm hàm ra bằng 0.
- Trong bảng K tổ hợp thừa ta đánh X
Trang 21.Bảng công tác
Mã
thập
phân
a b c d x y z t
Tổ
hợp
thừa
Mỗi cột x , y , z , t là một hàm của bốn biến a, b, c, d Lập một bảng K cho mỗi hàm
2
Trang 32.Tối giản bằng bảng Karnaugh:
Đầu x
cd
00 01 11 10
Dựa vào bảng trên ta có : x = ad+ac
x = a + c d
Đầu y
cd
00 01 11 10
Dựa vào bảng trên ta có : y = b + a c d
y = a b + d + b c
Trang 5Đầu z
cd
00 01 11 10
Dựa vào bảng trên ta có : z =a c+a c d
z = a c + ac + c d
Đầu t
cd
00 01 11 10
Dựa vào bảng trên ta có: t = a d + a d
ad d
a
Trang 73.Tối giản bằng định lý Logic:
Từ bảng công tác ta or các minterm nào làm hàm ra bằng 1.(Mỗi cột là 1 hàm của 4 biến vào a,b,c,d),
ta có biểu thức chuẩn tắc tuyễn của đảo hàm Ta or tất cả các minterm làm hàm ra có giá trị không xác định để lập điều kiện ràng buộc
x =
) 10 9 (
∑ +
và điều kiện ràng buộc
0 ) 15 14 13 12 11 7 ( + + + + + =
∑
= b c d+ b c d
= ad+ac
y= ∑(4+5+6+7)
và điều kiện ràng buộc
0 ) 15 14 13 12 11 7 ( + + + + + =
∑
y= b c d+ b c d+a bc d+ b c d
d c a b
y = +
z=∑(2+3+6+7)
và điều kiện ràng buộc
0 ) 15 14 13 12 11 7 ( + + + + + =
∑
z= a b c d+ b cd+a b c d+a bc d
d c a c
a
z = +
t=∑(1+3+5+7+10)
và điều kiện ràng buộc
0 ) 15 14 13 12 11 7 ( + + + + + =
∑
t = b c d+a b cd+ b c d+ b c d+ b c d
d a d a
4 Thiết kế mạch Logic:
a) thiết kế mạch logic dạng OR-AND
từ bảng k, ta đánh vòng các ô toàn 1 và x tìm được biểu thức của nguyên hàm như sau
Trang 8x = ad + ac, y = b + a c d
, z = a c + a c d
, t = a d + a d
a b c d
8
Trang 9b) Thiết kế mạch logic dạng AND -OR
Từ bảng Kaunaugh, ta đánh vòng các ô toàn 0 và “x”, tìm được biểu thức đảo hàm, sau đó ta phủ định một lần và triển khai đến cấp biến để tìm biểu thức nguyên hàm như sau:
) (c d a d c a x
x= = + = +
, y= y= b+ d+b c=(a+b)(b+d)(b+c)
, )
)(
)(
(a c a c c d d
c ac c a z
z= = + + = + + +
, t=t=a d+ad =(a+d)(a+d)
a b
Trang 10c) Thiết kế mạch logic dạng NOR-AND
Từ bảng Kaunaugh, ta đánh vòng các ô toàn 0 và “x”, tìm được biểu thức đảo hàm, sau đó ta phủ định một lần và tìm biểu thức nguyên hàm như sau:
d c a
x
x = = +
, y= y= b+ d+b c
, z = z = a c + ac + c d
, t = t = a d + ad
10
Trang 11d) Thiết kế mạch logic dạng NOR-NOR
Từ bảng Kaunaugh, ta đánh vòng các ô toàn 0 và “x”, tìm được biểu thức đảo hàm, sau đó ta phủ định một lần và sau đó triển khai tiếp để tìm biểu thức nguyên hàm như sau: Tiếp tục phủ định 2 lần nữa để tìm biểu thức nguyên hàm
) ( ) ( c d a c d a
d
c
a
x
x = = + = + = + +
,
) ( ) ( ) ( ) )(
)(
( a b b d b c a b b d b c c
b d b
y
y = = + + = + + + = + + + + +
,
) ( ) ( ) ( ) )(
)(
( a c a c c d a c a c c d d
c ac
c
a
z
z = = + + = + + + = + + + + +
,
) ( ) ( ) )(
( a d a d a d a d ad
d
a
t
t = = + = + + = + + +
Trang 13e) Thiết kế mạch logic dạng NAND-NAND
Từ bảng Kaunaugh, ta đánh vòng các ô toàn 1 và “x”, tìm được biểu thức nguyên hàm sau
đó, phủ định 2 lần, quá trình biến đổi như sau
Biểu thức:
x =ad+ac x = ad + ac = ad ac
.
d c
a
b
y = +
y = b + a c d = b a c d
.
d c a
c
a
z = +
z = a c + a c d = a c a c d
.
ad
d
a
t = +
t = a d + ad = a d ad
.
Trang 145 Chương trình mô phỏng
//BAI TAP LON - KI THUAT SO UNG DUNG - DE SO 12: BCD 7421 - BCD 8421
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
void BCD7421(int n, char *a, char *b, char *c, char *d)
{
14
Trang 15if (n<0 || n > 9) n = 0;
short ma7421[4] = {7,4,2,1};
short binaryResult[4];
int i;
for (i = 0; i < 4; i++){
if (n >= ma7421[i]) {
n-=ma7421[i];
binaryResult[i] = 1;
} else {
binaryResult[i] = 0;
}
}
*a = binaryResult[0];
*b = binaryResult[1];
*c = binaryResult[2];
*d = binaryResult[3];
}
void or_and(int n)
{
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf( "|%7d | %d%d%d%d | %d%d%d%d |\n",
n, a,b,c,d, ((a&&d)||(a&&c)), (b||(a&&(!c&&!d))), ((!a&&c)||(a&&(!c&&!d))), ((! a&&d)||(a&&!d)));
}
void and_or(int n){
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf( "|%7d | %d%d%d%d | %d%d%d%d |\n",
Trang 16(a&&(c||d)), ((a||b)&&(b||!d)&&(b||!c)), ((a||c)&&(!a||!c)&&(c||!d)), ((a|| d)&&(!a||!d))
);
}
void nor_and(int n){
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf( "|%7d | %d%d%d%d | %d%d%d%d |\n",
n, a,b,c,d,
!(!a||(!c&&!d)), !((!a&&!b)||(!b&&d)||(!b&&c)), !((!a&&!c)||(a&&c)||(! c&&d)), !((!a&&!d)||(a&&d))
);
}
void nor_nor(int n){
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf( "|%7d | %d%d%d%d | %d%d%d%d |\n",
n, a,b,c,d,
!(!a||!(c||d)), !(!(a||b)||!(b||!d)||!(b||!c)), !(!(a||c)||!(!a||!c)||!(c||!d)), !(!(a||d)||! (!a||!d))
);
}
void nand_nand(int n){
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf( "|%7d | %d%d%d%d | %d%d%d%d |\n",
n, a,b,c,d,
!(!(a&&d)&&!(a&&c)), !(!b&&!(a&&(!c&&!d))), !(!(!a&&c)&&!(a&&(!c&&!d))), !(! (a&&d)&&!(!a&&!d))
16
Trang 17}
int main(){
short t = 1;
while (t){
printf("|======================================|\n");
printf("|======= MO PHONG MACH CHUYEN MA ======|\n"); printf("|======= BCD7421 -> BCD 8421 ======|\n");
printf("|======================================|\n");
printf("| 1 In mach AND-OR |\n");
printf("| 2 In mach OR-AND |\n");
printf("| 3 In mach NOR-AND |\n");
printf("| 4 In mach NOR-NOR |\n");
printf("| 5 In mach NAND-NAND |\n");
printf("| - 0 to Exit -|\n");
printf("Chon N Tu 1 Den 5 Tuong Ung: N = "); scanf("%d", &t);
switch(t){
case 1:
printf("\tIn mach AND-OR\n");
printf("|
oooooooooooooooooooooooooooooooooooooo|\n");
printf("|So thap phan | BCD7421 | BCD 8421 |\n"); printf("| N | abcd | xywt |\n");
printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
and_or(i);
} break;
case 2:
printf("\tIn mach OR-AND\n");
printf("|
Trang 18printf("|So thap phan | BCD7421 | BCD 8421 |\n"); printf("| N | abcd | xywt |\n");
printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
or_and(i);
} break;
case 3:
printf("\tIn mach NOR-AND\n");
printf("|
oooooooooooooooooooooooooooooooooooooo|\n");
printf("|So thap phan | BCD7421 | BCD 8421 |\n"); printf("| N | abcd | xywt |\n");
printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
nor_and(i);
} break;
case 4:
printf("\tIn mach NOR-NOR\n");
printf("|
oooooooooooooooooooooooooooooooooooooo|\n");
printf("|So thap phan | BCD7421 | BCD 8421 |\n"); printf("| N | abcd | xywt |\n");
printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
nor_nor(i);
} break;
case 5:
printf("\tIn mach NAND-NAND\n");
printf("|
oooooooooooooooooooooooooooooooooooooo|\n");
18
Trang 19printf("|So thap phan | BCD7421 | BCD 8421 |\n"); printf("| N | abcd | xywt |\n");
printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
nand_nand(i);
} }
}
}