Skip to content

AND Gate

Intro

And gate adalah komponen elektronika digital yang paling umum dijual dan diajarkan hehe. Dinamakan komponen digital karena hanya memproses input dan output digital atau high-low, true-false, 0v-5v, 0v-3.3v dll.

And gate yang dibuat disini menggunakan 2buah input dan 1buah output. dan berikut table kebenaran dari and gate

in1 in2 out
0 0 0
0 1 0
1 0 0
1 1 1

Create new project

Untuk pembuatan project pada vhdl umumnya terdiri dari dua file

  1. module main program
  2. module testbench untuk main program

seperti biasa buat folder kosong untuk pembuatan project baru dan berikut penjelasan masing2 module

Main program

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ENTITY andgate IS
    PORT (
        in1, in2 : IN BIT;
        out1 : OUT BIT);
END ENTITY;

ARCHITECTURE rtl OF andgate IS
BEGIN
    out1 <= in1 AND in2;
END ARCHITECTURE rtl;

Copas text diatas untuk pada file yang bernama andgate.vhdl samakan nama file dengan deklarasi ENTITY yang digunakan.

Gunakan perintah ghdl -a angate.vhdl untuk melakukan process analysis jika tidak ada error pada tahap ini maka akan muncul file baru dengan nama work-obj93.cf file ini merupakan struktur internal yang dihasilkan dari file .vhdl dan digunakan oleh ghdl untuk mencari lokasi file yang dibutuhkan atau disebut sebagai library.

Lanjutkan dengan process elaboration dengan cara ghdl -e andgate perhatikan disini sudah tidak lagi menggunakan akhiran .vhdl karena ghdl menggunakan file work-obj93.cf sebagai referensi, pada tahap ini akan dihasilkan object file andgate.o dari file andgate.vhdl.

Object file ini akan dirubah menjadi executable dengan menggunakan perintah ghdl -r andgate pada tahap ini desain/project yang kita buat akan dijalankan oleh GHDL namun jangan berharap akan ada sesuatu muncul di terminal hehe. Jika dijalankan project ini tidak akan muncul tulisan seperti program hello world pada umum nya namun akan langsung selesai dan kembali ke command promt jika tidak ada error, pada tahap ghdl -r andgate akan muncul file executable dengan nama andgate atau andgate.exe.

Testbech

Project kedua adalah testbench project ini digunakan untuk memvalidasi program utama, jika program utama adalah AND gate maka project ini digunakan untuk memvalidasi apakah dengan input yang diberikan akan menghasilkan output yang sesuai dengan table kebenaran?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
ENTITY andgate_tb IS
END ENTITY andgate_tb;

ARCHITECTURE behave OF andgate_tb IS
    COMPONENT andgate
        PORT (
            in1, in2 : IN BIT;
            out1 : OUT BIT
        );
    END COMPONENT;
    FOR and_0 : andgate USE ENTITY work.andgate;
    SIGNAL in1, in2, out1 : BIT;
BEGIN
    and_0 : andGate PORT MAP(
        in1 => in1,
        in2 => in2,
        out1 => out1
    );

    PROCESS
        TYPE pattern_type IS RECORD
            in1, in2 : BIT;
        END RECORD;
        TYPE pattern_array IS ARRAY (NATURAL RANGE <>) OF pattern_type;
        CONSTANT pattern : pattern_array :=
        (
        ('0', '0'),
        ('0', '1'),
        ('1', '0'),
        ('1', '1')
        );
    BEGIN
        FOR i IN pattern'RANGE LOOP
            in1 <= pattern(i).in1;
            in2 <= pattern(i).in2;
            WAIT FOR 1 ns;
        END LOOP;
        ASSERT FALSE REPORT "Selesai." SEVERITY note;
        WAIT;
    END PROCESS;
END ARCHITECTURE behave;

copas file diatas ke file andgate_tb.vhdl ingat samakan file name dengan deklarasi ENTITY selanjutnya sama dengan Main program

1
2
3
$ ghdl -a andgate_tb.vhdl 
$ ghdl -e andgate_tb 
$ ghdl -r andgate_tb

pada ghdl -r andgate_tb kali ini akan mengeluarkan pesan meski untuk sekarang pesan nya masih sederhana.

Pada directory project jalankan file andgate_tb dengan tambahan option --vcd=andgate_tb.vcd hal ini bertujuan untuk menghasilkan diagram logic state yang bisa dibuka dengan appliaksi gtkwave

1
2
$ ./andgate_tb --vcd=andgate_tb.vcd 
$ gtkwave andgate_tb.vcd
gtkWave
Gtkwave

Jika gambar signal di tempatmu tidak sama dengan gambar diatas pastikan atur zoom nya untuk best-fit (tombol End). Gerakkan kursor mouse untuk memeriksa kondisi logic dari in1, in2 dan out.

The Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ENTITY andgate IS
    PORT (
        in1, in2 : IN BIT;
        out1 : OUT BIT);
END ENTITY;

ARCHITECTURE rtl OF andgate IS
BEGIN
    out1 <= in1 AND in2;
END ARCHITECTURE rtl;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
ENTITY andgate_tb IS
END ENTITY andgate_tb;

ARCHITECTURE behave OF andgate_tb IS
    COMPONENT andgate
        PORT (
            in1, in2 : IN BIT;
            out1 : OUT BIT
        );
    END COMPONENT;
    FOR and_0 : andgate USE ENTITY work.andgate;
    SIGNAL in1, in2, out1 : BIT;
BEGIN
    and_0 : andGate PORT MAP(
        in1 => in1,
        in2 => in2,
        out1 => out1
    );

    PROCESS
        TYPE pattern_type IS RECORD
            in1, in2 : BIT;
        END RECORD;
        TYPE pattern_array IS ARRAY (NATURAL RANGE <>) OF pattern_type;
        CONSTANT pattern : pattern_array :=
        (
        ('0', '0'),
        ('0', '1'),
        ('1', '0'),
        ('1', '1')
        );
    BEGIN
        FOR i IN pattern'RANGE LOOP
            in1 <= pattern(i).in1;
            in2 <= pattern(i).in2;
            WAIT FOR 1 ns;
        END LOOP;
        ASSERT FALSE REPORT "Selesai." SEVERITY note;
        WAIT;
    END PROCESS;
END ARCHITECTURE behave;

Last update: February 18, 2021

Comments