Anda di halaman 1dari 16

BAB VI

RANGKAIAN ARITMATIKA

6.1 Pendahuluan
Pada saat ini banyak dihasilkan mesin-mesin berteknologi tinggi seperti
komputer atau kalkulator yang mampu melakukan fungsi operasi aritmatik yang
cukup kompleks (misalnya penjumlahan, pengurangan, perkalian, pembagian
pembandingan dan sebagainya) atau operasi logika (misalnya Or, And, Not, Nor,
Nand, Exclusive-Or dan sebagainya), dengan ketelitian dan kecepatan yang sangat
luar biasa. Untuk itu pada bab ini akan dibahas beberapa rangkaian digital yang
dapat melakukan operasi aritmatika dalam bilangan biner.

6.2 Penjumlah Paruh (Half Adder)


Bilangan biner hanya mempunyai dua bilangan yaitu 0 dan 1, untuk itu jika
dua bilangan biner (masing-masing satu bit) yaitu antara yang dijumlahkan
(augend) dan penjumlah (addend) dijumlahkan, maka diperoleh hasil jumlah (sum)
dan luapan (overflow/carry) seperti ditunjukkan pada tabel 6.1 dibawah.
Tabel 6.1 Penjumlahan Dua Bit Bilangan Biner
Augend Addend Hasil Jumlah Luapan (Overflow/Carry)
A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

Dari tabel 5.1 tersebut dapat diperoleh persamaan kedua keluaran, yaitu :

Hasil Jumlah : S = AB + A B atau S= A⊕B

Luapan (Overflow/Carry) : C = AB

Sehingga dari persamaan tersebut didapatkan rangkaian sebagai berikut :

HALF
106
ADDER
107

Masukan Keluaran
B C

(a) Blok Diagram Penjumlah Paruh (Half Adder)

Masukan A Sum
B
Keluaran
Carry

(b) Rangkaian Logika Penjumlah Paruh (Half Adder)


Gambar 6.1 Penjumlah Paruh (Half Adder)

6.3 Penjumlah Penuh (Full-Adder)


Penjumlah penuh (Full-Adder) merupakan rangkaian penjumlah yang 3 bit
bilangan biner A, B dan masukan luapan Cin dengan keluaran hasil jumlah (sum)
dan luapan (overflow/carry) Cout.
Tabel 6.2 Penjumlahan Tiga Bit Bilangan Biner
Augend Addend Carry input Hasil Jumlah Luapan (Overflow/Carry)
A B Cin S COut
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

Dari tabel 6.2 tersebut dapat diperoleh persamaan kedua keluaran, yaitu :

Hasil Jumlah S = A BC in + ABC in + A BC in + ABC in = A ⊕ B ⊕ C in

Luapan / Carry C out = ABC in + A BC in + ABC in + ABCin = BC in + AC in + AB

Sehingga dari persamaan tersebut didapatkan rangkaian sebagai berikut :

A
FULL S
Masukan B ADDER Keluaran
Cout
Cin
108

(a) Blok Diagram Full Adder

Masukan B Sum

C in

Keluaran

Carry

(b) Rangkaian Logika Full Adder


Gambar 6.2 Penjumlah Penuh (Full Adder)

Masukan
B 3
A 3
B 2
A 2
B 1
A 1
B 0
A 0

C 3
C 2
C 1
C 0
C 4 FA 3 FA 2 FA 1 FA 0

S 3
S 2
S 1
S 0

Keluaran

Gambar 6.3 Penjumlah Paralel 4-Bit

Untuk mendapatkan jumlah bit yang lebih banyak, maka beberapa


Penjumlah Penuh (FA) diparalel. Misalnya bilangan biner 4-bit (A0, A1, A2, A3)
ditambah 4-bit (B0, B1, B2, B3) dengan keluaran (S0, S1, S2, S3) dan luapan C4,
sehingga diperlukan 4 FA yang diparalel seperti ditunjukkan pada gambar 4.3, yang
menjumlahan tiap bit yang bersesuaian secara serentak relatif cepat, tetapi dibatasi
oleh luapan (carry) yang dihasilkan tiap bit, agar dapat dijumlahkan dengan bit
109

berikutnya dan diperoleh hasil penjumlahan yang benar, efek ini dinamakan
perambatan luapan (carry propagation atau carry ripple), yang disebabkan oleh
penundaan perambatan tiap FA. Contoh :
00111
10101 Yang dijumlah (Augend)
00111 Penjumlah (Addend)

11100 Hasil Jumlah


00111 Luapan / Carry (ditambahkan ke posisi berikutnya)

Untuk mengatasinya, diperlukan rangkaian yang dapat mengetahui jika


terjadi luapan dan menjumlahkannya dengan bit berikutnya dengan waktu yang
lebih cepat dari penundaan perambatan tiap FA, yaitu Generator Look Ahead
Carry. Dalam penerapan penjumlahan menggunakan IC, biasanya sudah disertai
dengan Generator Look Ahead Carry, contohnya IC Penjumlah 4-bit adalah 7483.

B 4 S 4 C 4 C 0 GND B 1 A 1 S 1

16 15 14 13 12 11 10 9

7483

1 2 3 4 5 6 7 8

A 4 S 3 A 3 B 3 V CC S 3 B 2 A 2

Gambar 6.4 IC Penjumlah Paralel 4-Bit 7483

6.4 Penjumlahan Sistem Komplemen Ke-2


110

Pada sistem bilangan biner untuk menyatakan bilangan negatif atau


pengurangan digunakan sistem komplemen ke-2, yaitu (yaitu dengan cara
menambah nilai sebenarnya dengan komplemen –1 (diperoleh dari
membalik nilai sebenarnya) dan ditambah 1 pada bit yg bernialai paling
rendah. Disini bit tanda negatif menggunakan biner 1, sedangkan
besarannya dibalik (komplemen ke-1) lalu ditambah 1 pada bit yang bernilai
paling rendah (Least Significant Bit / LSB) untuk mendapatkan komplemen
ke-2.

Contoh : - 6 = 1 0110 nilai sebenarnya (True Magnitude Form / TMF)


1 1001 komplemen ke-1
1
1 1010 komplemen ke-2

Gambar 6.5 dibawah adalah contoh rangkaian penjumlah atau pengurang


untuk bilangan positif pada tertambah / terkurang dan bilangan negatif pada
penambah / pengurang dalam sistem komplemen ke-2 beserta bit tandanya, untuk
operasi penjumlahan menggunakan bit 0 dan untuk operasi pengurangan
menggunakan bit 1. Bentuk komplemen ke-1 menggunakan Gate Ex-Or sebagai
pembalik. Apabila hasil penjumlahan / pengurangan adalah positif, maka hasil
jumlah yang ditampilkan sudah benar, sedangkan apabila hasil penjumlahan /
pengurangan adalah negatif, maka hasil jumlah yang ditampilkan masih dalam
bentuk komplemen ke-2, agar mendapatkan hasil yang sesungguhnya dijadikan ke
komplemen ke-1 (dibalik) lalu ditambah 1 pada LSBnya, untuk itu diperlukan
rangkaian tambahan pada keluaran hasil jumlah / selisih, demikian juga apabila
diinginkan pada masukan tertambah / terkurang untuk bilangan negatif.
111

Tertambah / Terkurang Penambah / Pengurang


A 3
A 2
A 1
A 0
B 3
B 2
B 1
B 0

Bit tanda
0 Penjumlahan
1 Pengurangan

Luapan /
Pinjaman
C 4 FA 4-Bit C 0

S 3
S 2
S 1
S 0

Hasil Jumlah / Selisih

Gambar 6.5 Penjumlah Komplemen Ke-2

6.5 Penjumlahan Serial


Kecepatan dalam menjumlahkan dua bilangan biner pada Penjumlah Paralel
relatif tinggi, karena semua bit dijumlahkan secara serentak. Tetapi kecepatannya
dibatasi oleh waktu perambatan luapan (carry), yang dapat diatasi dengan
menggunakan Generator Look Ahead Carry, untuk itu diperlukan rangkaian
tambahan sebanding dengan banyaknya bit yang dijumlahkan.
Pada Penjumlah Serial, proses penjumlahannya dilakukan seperti diatas
kertas, yaitu dijumlahkan per bit, sehingga rangkaiannya lebih sederhana tetapi
kecepatannya lebih rendah. Gambar 6.6 menunjukkan rangkaian Penjumlah
(Adder) Serial 4 bit yang menggunakan FF-D sebagai Register, Register A untuk
data yang dijumlahkan (Augend) dan juga sebagai hasil penjumlahan (Sum) serta
Register B untuk data penjumlahnya (Addend). Proses penjumlahannya dilakukan
di FA dimulai dari LSB yaitu A0, B0 dan keluaran Q dari FF carry yang sudah
direset sebelumnya. FF carry digunakan untuk menyimpan luapan/carry dari FA,
sehingga dapat dijumlahkan dengan bit berikutnya pada kedua Register.
112

Register Geser
SET SET SET SET LSB
D Q D Q D Q D Q
A3 A2 A1 A0
CLR
Q CLR
Q CLR
Q CLR
Q
Sum
FA
Carry out

Register Geser
Carry in
SET SET SET SET LSB
D Q D Q D Q D Q
B3 B2 B1 B0
CLR
Q CLR
Q CLR
Q CLR
Q
SET
D Q

Clock CLR
Q

Pulsa clear

Gambar 6.6 Penjumlah Serial

Hasil jumlahnya (Sum) diberikan ke masukan D dari Register A3, dan akan
muncul pada keluaran A3 saat pemberian pulsa Clock. Demikian pula keluaran B0
dihubungkan ke masukan D dari Register B3, dan akan muncul pada keluaran B3
bersamaan dengan pemberian pulsa Clock. Dengan cara ini maka Register B tetap
setelah operasi pergeseran selesai.
Tabel 6.3 Proses Penjumlah Serial
Pulsa Register A Register B Carry in Keluaran Keluaran
Clock A3 A2 A1 A0 B3 B2 B1 B0 (Keluaran Q) Sum Carry

Awal 0 1 1 1 0 0 1 0 0 1 0
Pertama 1 0 1 1 0 0 0 1 0 0 1
Kedua 0 1 0 1 1 0 0 0 1 0 1
Ketiga 0 0 1 0 0 1 0 0 1 1 0
Keempat 1 0 0 1 0 0 1 0 0 1 0
Hasil Jumlah
akhir

Operasi Adder serial ini dapat dengan mudah dipahami dengan contoh
berikut, misalnya Augend = 0111 yang disimpan di Register A dan Addend =
113

0010 di Regsiter B, dengan mereset FF carry ke 0, sehingga Carry-in = 0 dan


urutan prosesnya ditunjukkan pada tabel 6.3 diatas.
Gambar 6.6 diatas juga bisa digunakan untuk pengurangan atau
penjumlahan dalam sistem komplemen ke-2, yaitu yang dikurangi (minuend)
disimpan di Register A dan pengurang (subtrachend) di Register B yang
menggunakan keluaran Q untuk dihubungkan ke FA agar diperoleh bentuk
komplemen ke-1 (kebalikannya) serta Carryin = 1 (bentuk komplemen ke-2)
sebelum dijumlahkan. Setelah itu dilakukan proses yang sama seperti penjumlahan
bilangan biner biasa.

6.6 Penjumlahan BCD (Binary Coded Decimal)


Pada sistem digital seringkali beroperasi dalam kode desimal yang
dikodekan dalam biner (Binary Coded Decimal/BCD) dari pada kode biner biasa.
Yang memerlukan 4 bit kode biner untuk menyatakan tiap digit desimal dalam
kode BCD. Misalnya desimal 478 dalam kode BCD adalah :

4 7 8 Kode Desimal
0100 0111 1000 Kode BCD

Ada beberapa prosedur dalam menjumlahkan dua bilangan BCD, yaitu :


• Jumlahkan kelompok kode BCD untuk tiap posisi digit desimal
• Apabila hasil jumlahnya (sum) 9 atau kurang, itu adalah hasil
penjumlahan bentuk BCD yang benar
• tetapi apabila hasil jumlahnya lebih besar dari 9, maka perlu dikoreksi,
yaitu menambahkan faktor koreksi (0110) pada hasil penjumlahan
tersebut dan ini menghasilkan luapan (carry) untuk dijumlahkan dengan
kode BCD berikutnya.

Tabel 6.4 Hasil Penjumlahan Dua Bilangan BCD


Hasil Jumlah BCD Heksa Hasil Jumlah BCD
Tanpa Koreksi desi Terkoreksi BCD
C4 S3 S2 S1 S0 mal Cn Σ3 Σ2 Σ1 Σ0
0 0 0 0 0 0 0 0 0 0 0 0
114

0 0 0 0 1 1 0 0 0 0 1 1
0 0 0 1 0 2 0 0 0 1 0 2
0 0 0 1 1 3 0 0 0 1 1 3
0 tanpa
0 1 0 0 4 0 0 1 0 0 4
koreksi
0 0 1 0 1 5 0 0 1 0 1 5
0 0 1 1 0 6 0 0 1 1 0 6
0 0 1 1 1 7 0 0 1 1 1 7
0 1 0 0 0 8 0 1 0 0 0 8
0 1 0 0 1 9 0 1 0 0 1 9
0 1 0 1 0 A 1 0 0 0 0 10
0 1 0 1 1 B 1 0 0 0 1 11
0 1 1 0 0 C 1 0 0 1 0 12
0 1 1 0 1 D 1 0 0 1 1 13
0 harus
1 1 1 0 E 1 0 1 0 0 14
dikoreksi
0 1 1 1 1 F 1 0 1 0 1 15
1 0 0 0 0 10 1 0 1 1 0 16
1 0 0 0 1 11 1 0 1 1 1 17
1 0 0 1 0 12 1 1 0 0 0 18
1 0 0 1 1 13 1 1 0 0 1 19

S 1 S0
00 01 11 10
00 0 0 0 0
01 0 0 0 0
S3 S2
11 1 1 1 1
10 0 0 1 1

Persamaan Koreksi = C4 + S2S3 + S1S3


= C4 + S3 (S1 + S2)

(a) K’map Untuk Persamaan Koreksi (Penambah 0110)


115

Bilangan Bilangan
BCD BCD
B 3
B 2
B 1
B 0
A 3
A 2
A 1
A 0

C 4
C 0

S 3
S 2
S 1
S 0

C 4
B 3
B 2
B 1
B 0
A 3
A 2
A 1
A 0
C 0

diabaikan

C n
S 3
S 2
S 1
S 0

Hasil Jumlah
BCD

(b) Rangkaian Penjumlah BCD

Gambar 6.7 Penjumlah BCD

Rangkaian Adder BCD harus mampu mendeteksi hasil jumlahnya kurang


dari 9 (1001), lebih besar dari 9 atau lebih besar dari 15, untuk dikoreksi menjadi
bilangan BCD yang benar. Untuk mendapatkan rangkaian pengkoreksinya tabel 6.4
menunjukkan semua kemungkinan hasil penjumlahan dua bilangan BCD. Dari
Tabel 6.4 tersebut tampak bahwa yang harus dikoreksi adalah hasil penjumlahan
10, 11, 12, 13, 14, 15, 16, 17, 18, 19. Dari sini jika dimasukkan pada K’map
diperoleh rangkaian pengkoreksi seperti yang ditunjukkan pada gambar 6.7.b.
6.7 Perkalian Bilangan Biner
116

Perkalian dalam bilangan biner dikerjakan seperti menggunakan kertas dan


pensil, yaitu dengan melakukan penjumlahan dan penggeseran berturut-turut
seperti contoh berikut :

1011 Yang dikalikan (Multiplicand) = 11


1101 Pengali (Multiplier) = 13
1011
0000
1011
1011
10001111 Hasil Perkalian (Product) = 143

Proses pengulangan bit bilangan Pengali berturut-turut dimulai dari LSB.


Jika bit Pengali adalah 1, bilangan yang dikalikan ditulis, tetapi apabila bit Pengali
adalah 0, maka ditulis 0. Baris berikutnya digeser kekiri satu bit dari baris
sebelumnya. Apabila semua bit Pengali sudah habis lalu dijumlahkan untuk
memperoleh hasil perkalian akhir.
Pada sistem digital, proses penjumlahannya dilakukan tiap dua bilangan dan
hasil penjumlahan akhirnya ditempatkan pada Penyimpan (Register). Untuk
efisiensi, apabila bit Pengali bernilai 0 tidak diperlukan penulisan 0 sehingga tidak
berakibat pada hasil akhir. Contoh yang lalu dapat dituliskan sebagai berikut :
Multiplicand : 1011
Multiplier : 1101
1011 Bit pertama Multiplier = 1, Multiplicand ditulis
Multiplicand digeser kekiri satu bit (10110)
1011 Bit kedua Multiplier = 0, hasil yang ditulis Multiplicand
yang baru digeser kekiri satu bit (101100)
+101100 Bit ketiga Multiplier = 1, tulis Multiplicand yang baru
101111 Jumlahkan
Multiplicand yang baru digeser kekiri satu bit (1011000)
+1011000 Bit keempat Multiplier = 1, tulis Multiplicand yang baru
10001111 Jumlahkan untuk mendapat Hasil Perkalian akhir
(Product) = 143
Proses perkalian ini dapat diterapkan seperti ditunjukkan pada gambar 6.8
dengan 3 Register, yaitu Register X digunakan untuk menyimpan bit-bit
Pengali/Multiplier yang merupakan Register geser kanan, Register B digunakan
117

untuk menyimpan bit-bit yang dikalikan / Multiplicand yang merupakan Register


geser kiri dan Register A / Accumulator digunakan untuk menyimpan Hasil
Perkalian (Product).
Operasi rangkaian Perkalian dapat dijelaskan dengan gambar 6.9 dibawah
yang menunjukkan isi semua Register dan keluaran Adder oleh setiap pemberian
pulsa Clock. Langkah-langkah prosesnya sebagai berikut :
1. Reset Register A (00000000), set yang dikali (Multiplicand) pada Register B
(00001011) dan Pengali (Multiplier) pada Register X (1101), sehingga keluaran
Adder adalah hasil penjumlahan isi Register A dan B yaitu 00001011, yang
ditunjukkan pada gambar 6.9(a).
2. Pada pulsa Clock pertama, LSB Pengali (keluaran X0) adalah 1, sehingga pulsa
Clock tersebut keluar pada Gate And dan sisi positifnya menyebabkan Register
A berisi data dari keluaran Adder yang berasal dari penjumlahan isi Register B
dengan isi Register A yaitu 00001011. Sedangkan sisi negatif pulsa Clock
menyebabkan isi Register B bergeser kekiri menjadi 00010110 dan isi Register
X bergeser kekanan menjadi 0110, sehingga keluaran Adder adalah hasil
penjumlahan isi Register A (00001011) dan isi Register B (00010110) yaitu
00100001. Kondisi ini ditunjukkan pada gambar 6.9(b).
3. Pulsa Clock kedua, LSB Pengali (keluaran X0) adalah 0, sehingga keluaran Gate
And juga 0 dan isi Register A tetap. Sedangkan sisi negatif pulsa Clock
menyebabkan isi Register B bergeser kekiri menjadi 00101100 dan isi Register
X bergeser kekanan menjadi 0011, keluaran Adder adalah hasil penjumlahan isi
Register A (00001011) dan isi Register B (00101100) yaitu 00110111, yaitu
gambar 6.9(c).
Penyimpan
D7 D6 D5 D4 D3 D2 D1 D0
(Accumulator) A2 A1 A0
A7 A6 A5 A4 A3

C0 = 0

S4 S3
Ke Ke
masukan S5 S2 masukan
D4 - D7 S6
Adder Paralel 8-Bit S1 D0 - D3
FF - A FF - A
S7 S0

Yang dikalikan B7 B6 B5 B4 B3 B2 B1 B0
D7 D6 D5 D4 D3 D2 D1 D0
(Multiplicand)

Pengali
(Multiplier)

D X3 D X2 D X1 D X0

Gambar 6.8 Rangkaian Pengali Bilangan Biner Clock


118
119

4. Pulsa Clock ketiga, LSB Pengali (keluaran X0) adalah 1, sehingga sisi positif
pulsa Clock menyebabkan Register A berisi data dari keluaran Adder yang
berasal dari penjumlahan isi Multiplicand dengan isi Register A (Accumulator)
yaitu 00110111. Sedangkan pada sisi negatif pulsa Clock menyebabkan isi
Register B bergeser kekiri menjadi 01011000 dan isi Register X bergeser
kekanan menjadi 0001, menyebabkan keluaran Adder adalah hasil penjumlahan
isi Register A (00110111) dan isi Register B (01011000) yaitu 10001111.
Kondisi ini ditunjukkan pada gambar 6.9(d).
5. Pulsa Clock ketiga, LSB Pengali (keluaran X0) adalah 1, sehingga sisi positif
pulsa Clock menyebabkan Register A berisi data dari keluaran Adder yaitu
penjumlahan isi Register B dengan isi Register A yaitu 100011111. Sedangkan
pada sisi negatif pulsa Clock menyebabkan isi Register B bergeser kekiri
menjadi 10110000 dan isi Register X bergeser kekanan menjadi 0000,
menyebabkan keluaran Adder adalah hasil penjumlahan isi Register A
(10001111) dan isi Register B (10110000) yaitu 00111111. Kondisi ini
ditunjukkan pada gambar 6.9(e). Jadi Hasil perkalian (product) disimpan di
Register A (Accumulator).

Register A Register B Register X


00000000 00001011 1101 Sebelum pulsa
Clock pertama
120

Hasil Jumlah
00001011

(a)

Register A Register B Register X


00000000 00001011 1101 Setelah pulsa
Clock pertama
Hasil Jumlah
00001011

(b)

Register A Register B Register X


00000000 00001011 1101 Setelah pulsa
Clock kedua
Hasil Jumlah
00001011

(c)

Register A Register B Register X


00000000 00001011 1101 Setelah pulsa
Clock ketiga
Hasil Jumlah
00001011

(d)

Register A Register B Register X


00000000 00001011 1101 Setelah pulsa
Clock keempat
Hasil Jumlah
00001011

(e)

Gambar 6.9 Isi Register Pada Proses Perkalian 1011 Dengan 1101

6.8 Permasalahan
6.8.1 Tunjukkanlah bagaimana Full Adder disusun dari Half Adder !
6.8.2 Dari gambar 6.5, berapakah keluaran FA untuk menjumlahkan :
(a) 7 + (– 7) (b) 5 + 10 (c) 5 + (-10) (d) 10 + (-5)
121

6.8.3 Ubahlah gambar 6.5 sehingga dapat digunakan untuk menjumlahkan dua
bilangan negatif dan hasil jumlahnya dalam bentuk TMF !
6.8.4 Rancanglah rangkain Look Ahead Carry untuk Adder 4-bit yang membang-
kitkan Carry C3 agar bisa dijumlahkan dengan MSB FA yang didasarkan oleh
nilai A0, B0, A1, B1, A2 dan B2 (Petunjuk : mulai dengan menulis ekspresi C1
dalam fungsi A0, B0 dan C0, lalu tuliskan ekspresi C2 dalam fungsi A1, B1 dan
C1, kemudian substitusilah C1 kedalam ekspresi C2. Tulislah ekspresi C3
dalam fungsi A2, B2 dan C2, lalu substitusilah ekspresi C2 kedalam C3.
Sederhanakan ekspresi akhir C3 dalam bentuk hasil penjumlahan dari hasil
perkalian (Sum Of Product / SOP) dan buatlah rangkaiannya !
6.8.5 Berapakah waktu penundaan perambatan maksimum untuk Adder 8-bit yang
tersusun dari Gate-Gate logika, apabila waktu penundaan perambatan tiap
Gate adalah 20 ndetik ?
6.8.6 Penjumlah serial gambar 6.6 mempunyai waktu penundaan propagasi FA
adalah 50 ndetik dan FF adalah 20 ndetik, hitunglah frekuensi maksimum
pulsa Clock !
6.8.7 Gambarkanlah urutan keadaan tiap FF dan keluaran FA pada Penjumlah
serial gambar 6.6 untuk menjumlahkan 10 dan 7 ! Serta bagaimanakah
caranya apabila digunakan untuk penjumlahan 10 dan – 7 ?
6.8.8 Rancanglah Penjumlah BCD 3 digit dan tentukanlah keluaran Sum untuk
menjumlahkan kode BCD 376 dan 469 !
6.8.9 Tunjukkanlah isi Register A, B dan X serta keluaran Adder S 0 – S7 setelah
tiap pulsa setelah proses perkalian 0111 (Multiplicand) dan 1001 (Multiplier)
dengan menggunakan rangkaian Pengali gambar 6.8 !

Anda mungkin juga menyukai