Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
PERCOBAAN IV RANGKAIAN LOGIKA SEKUENSIAL TUJUAN 1. Mengerti perbedaan perilaku antara latch dan flip‐flop. 2. Mendesain sekuensial rangkaian untuk implementasi didalam FPGA. 3. Mengenal dan memahami cara menggunakan hierarki dalam desain rangkaian 4. Mengenal dan memahami cara menggunakan FPGA sebagai prototype system untuk memverifikasi fungsi rangkaian.
PERSIAPAN Pelajari kembali bahan kuliah anda mengenai rangkaian logika sekuensial. Pelajari juga keseluruhan petunjuk praktikum untuk modul rangkaian logika sekuensial ini.Kerjakan tugas pendahuluan dan kumpulkan sesuai ketentuan yang berlaku. Bawa rangkaian hasil percobaan anda pada modul 3. Jika belum selesai atau masih ada kesalahan, selesaikan di rumah.
DASAR TEORI Dalam percobaan ini, ada dua prinsip rangkaian yang akan didesain. Yang pertama adalah synchronous binary‐coded‐ decimal(BCD) counter dengan reset asynchronous dan masukan clock enable untuk mengijinkan konter individu untuk dicascade kedalam multi‐digit synchronous counter. Anda akan mendesain konter ini dari komponen flip‐flop dan logika masukan. Anda juga akan mengkonversikan rangkaian ini kedalam blok hierarki untuk mempermudah membuat banyak instances dari counter. Untuk menguji counter anda, sebuah skematik akan digunakan sebagai test platform akan diberikan untuk anda. Rangkaian kedua yang akan didesain adalah counter divide‐by‐N dimana N adalah suatu bilangan konstan. Dalam kasus ini, anda akan mengimplementasikan counter ini menggunakan counter primitive yang memberikan 16‐bit counter dengan synchronous reset, dan hanya menambahkan logika untuk memaksa counter reset pada hitungan yang diinginkan. Dalam desain synchronous, usaha kita didasarkan pada asumsi bahwa clock timbul secara simultan pada setiap flip‐flop. Walaupun kelihatannya mudah, sebenarnya memberikan clock kesemua flip‐flop dengan delay yang dapat diterima tidak selalu mudah. Untuk memfasilitasi hal 42
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
ini, FPGA memiliki pin, buffer dan routing channel khusus.untuk digunakan sebagai pengantar clock. Ketika mengerjakan desain synchronous, kita harus memastikan bahwa sinyal clock kita menggunakan fasilitas tersebut. Dalam percobaan ini, anda juga akan belajar tentang perbedaan dalam time‐based behavior antara latch dan flip‐flop. Bit file untuk bagian eksperimen ini akan diberikan. Sebagai persiapan, baca kembali pelajaran bagian D Latch dan flip‐flop.
TUGAS PENDAHULUAN 1. Buatlah tabel keadaan dan nilai masukan dari BCD counter dengan memanfaatkan table yang berada di akhir modul ini! Lihat bagian awal percobaan3a untuk spesifikasi system yang akan dibangun. 2. Buatlah K‐map untuk masukan D Flip‐Flop dengan memanfaatkan table yang berada di akhir modul ini, kemudian minimisasikan sehingga mendapatkan persamaan POS/SOP yang minimum! 3. Buatlah rangkaian BCD‐counter dan divide by N anda di rumah dengan mengikuti petunjuk praktikum percobaan3a dan percobaan3b!! •
Upload file anda ke ftp labdasar folder PraktikanSisDig, buat folder baru didalamnya dengan nama kelompokxx(xx diisi dengan kode kelompok anda,mis A1)
4. Jelaskan tentang latch dan D Flip‐Flop!
PERCOBAAN PERALATAN YANG DIGUNAKAN •
Komputer/PC yang telah terinstal program Quartus II 6.0
•
Osiloskop
•
FPGA development board, tipe ALTERA UP2 atau DE1 beserta perlengkapannya yang meliputi: a. Board FPGA tipe UP2 b. Catu daya+ kabel dan konektor tambahan c. Kabel downloader ‘ByteBlaster II’
43
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
PROSEDUR PERCOBAAN Untuk tahapan percobaan anda akan mendesain dan menguji(dalam simulasi) sebuah BCD counter yang dapat di‐cascade dan sebuah divide‐by‐N counter. PERCOBAAN 4A: Mendesain Dan Mensimulasikan BCD Counter Kita akan mendesain BCD counter 16‐bit menggunakan 4 buah D flip‐flop. Dalam kasus ini, anda akan menggunakan primitive Altera DFFE yang memiliki 3 masukan pengendali utama. Yang pertama masukan Clock Enable(ENA) dimana DFF hanya dapat bergerak ke state selanjutnya ketika ENA=1. Jika ENA=0 DFF akan tetap pada statenya saat ini. Yang kedua masukan CLRN dimana ketika CLR=’0’ DFF akan menghasilkan keluaran Q=’0’. Yang ketiga adalah masukan PRN dimana ketika PRN=’0’ DFF akan menghasilkan keluaran Q=’1’. Dengan menggunakan 4 DFF, kita memiliki 16 state yang bisa digunakan. Untuk BCD counter ini kita hanya memakai 10 state untuk menampung keluaran 0‐9, sedangkan sisanya tidak digunakan sehingga program kita harus dirancang untuk tidak akan pernah masuk kedalam state sisa tersebut. DFFE
PRN D
ENA CLRN inst1
Q
Gambar 1 : DFF yang akan digunakan pada blok BCD counter
Prinsip kerja rangkaian ini sederhana, pulsa yang melalui kaki CLK akan diteruskan ke masukan clock dari setiap DFF sehingga mereka akan bekerja secara bersamaan. Selama inpu CE=’1’ dan sinyal clock pada DFF tersedia maka rangkaian BCD akan selalu bergerak ke state berikutnya. Jika state mencapai angka perhitungan 9 dan CE=’1’, maka state akan berputar ke posisi 0 dengan sambil menghasilkan pulsa pada pin TC hanya pada saat itu. Jika CE=’0’, maka rangkaian BCD counter kita akan tetap pada state sekarang hingga kembali CE=’1’. Jika CLR=’1’ maka rangkaian BCD counter akan kembali ke state 0/reset.
Tabel 1 : Konfigurasi pin input/output yang digunakan pada blok BCD counter
PROSEDUR PERCOBAAN: a. Membuat Project BCD Counter 44
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
1. Buatlah sebuah proyek Quartus baru dengan nama BCD_CNT. Import pin assignment standar yang kita gunakan. 2. Buatlah sebuah skematik diagram baru yang diberi nama BCD_CNTR. Anda akan mendesain rangkaian BCD counter dalam file ini dan menggunakannya untuk membuat sebuah blok rangkaian. 3. Tempatkanlah empat DFFE flip‐flop kedalam file skematik BCD_CNTR anda, tambahkan pin masukan/keluaran yang dinamakan seperti pada table 1 sebelumnya dan tambahkan gerbang logika yang diperlukan. Karena flip‐flop ini sudah mengimplementasikan clock enable, kita tidak perlu membuat lagi. Kita hanya butuh menghubungkan bersama‐sama semua masukan flip‐flop dengan pin input CE. b. Mensimulasikan Project BCD Counter 1. Pertama anda akan melakukan simulasi secara fungsional counter anda dan verifikasi apakah sudah benar, debug dan modifikasi seperlunya. Untuk melakukannya, set BCD_CNTR sebagai top‐level entity dengan mengklik tab Hierarchy, kemudian klik kanan pada Compilation Hierarchy, pilih Setting… dan didalam General, set top level entity sebagai BCD_CNTR. 2. Compile project anda, kemudian buka Simulator Tool. Set menjadi Fungsional dan klik Generate Functional Simulation Netlist. Kemudian, pilih Open untuk membuka jendela waveform dan gunakan Node Finder[set filter menjadi Pins:(Unassigned)] untuk memilih seluruh pin input/output BCD_CNTR. Kemudian set CE menjadi 1 selama simulasi. Set CLK sebagai 10ns clock dan set CLR ke nilai 1 untuk 10ns pertama dan 0 untuk berikutnya. Save waveform anda dan lakukan simulasi. 3. Setelah anda yakin counter anda bekerja dengan baik, gunakan untuk membuat hierarchy block yang diberi nama BCD_CNTR. 4. Print skematik BCD counter anda untuk bahan laporan anda. 5. Download skematik CNTR_TEST dari halaman web praktikum. Anda akan menggunakan skematik ini untuk menguji blok counter anda dalam koneksi cascade. Tambahkan skematik tersebut ke project anda dan set sebagai top level entity. Compile dan buatlah waveform simulasi yang akan mentest counter dimana dia akan melakukan perhitungan 0‐99 dan kembali lagi ke 0. Setelah disimulasikan, ubah skala waveform simulasi sehingga seluruh kemungkinan operasi bisa terlihat, print screen dan simpan untuk bahan laporan anda.
45
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
Gambar 2 : Skematik pada file CNTR_TEST
PERCOBAAN 4B: Mendesain dan Mensimulasikan Divide by N Counter Disini anda akan mendesain counter divide‐by‐N dimana N = 25175 untuk board UP2, sedangkan untuk board DE1 gunakan salah satu nilai yaitu N = 24000, N = 27000, atau N = 50000.(Nilai ini akan berguna pada percobaan berikutnya untuk membuat delay 1ms didasarkan pada FPGA board dengan clock internal). Pada prinsipnya rangkaian ini akan menghitung banyaknya pulsa CLK yang masuk pada blok counter 16‐bit, jika jumlah pulsa yang masuk =N maka counter akan mengeluarkan nilai HIGH selama 1 pulsa dan me‐reset blok counter sehingga N=0. PROSEDUR PERCOBAAN: a. Membuat Project DIVBY_N 1. Buatlah sebuah project baru dengan nama DIVBY_N. Import pin assignment standar untuk praktikum ini. Buatlah skematik baru bernama DIVBY_N. 2. Download file COUNT16.ZIP dari halaman web praktikum dan ekstrak 2 file didalamnya(COUNT16.V dan COUNT16.BSF) ke direktori proyek. Ini adalah file yang berisi symbol dan desain untuk blok COUNT16. 3. Tempatkan satu blok counter COUNT16 dengan klik kanan pada skematik, pilih Insert Symbol… dan browse untuk mencari COUNT16.BSF. Ini adalah counter 16 bit dengan masukan reset asynchronous. 4. Tambahkan sebuah kaki masukan, dua buah keluaran, dan logic yang diperlukan untuk memaksa terjadinya reset sesuai dengan implementasi 46
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
counter modulus‐2000. Sinyal reset ini juga akan digunakan sebagai keluaran dari counter anda. 5. Hubungkan masukan counter anda ke kaki masukan CLK0 dan hubungkan keluaran counter dengan HEX1[0] dan GPIO[16] . 6. Dibawah terdapat gambar referensi untuk Divide‐by‐2000 counter, pelajari dan ubah rangkaian tersebut seperlunya untuk nilai N yang anda perlukan (N=25175). 7. Garis tebal yang terlihat pada gambar 4 adalah BUS. Untuk menggunakannya Pilihlah ikon Orthogonal Bus Tools yang ada di sebelah ikon Orthogonal Node Tools yang selama ini kita pakai. Dalam penggunaan BUS yang disatukan dengan NODE, kita perlu menspesifikasikan nama pin yang terdapat pada BUS(mis Q[15..0]ÆBUS Q memiliki 16 kabel) dan NODE(mis Q15 Æ Node tsb terhubung dengan kabel Q15 pada BUS Q) untuk menandai bahwa NODE tersebut terhubung pada elemen BUS yang mana. Untuk menspesifikasikannya klik kanan pada BUS/NODE yang akan diset, kemudian pilih properties. Pada kolom General anda dapat menuliskan nama NODE
Gambar 4 : Contoh rangkaian Divide by N, N=2000
47
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
8. Simulasikan secara fungsional desain anda menggunakan clock 100MHz untuk mensimulasikan CLK masukan dan masukkan pada laporan anda hasil simulasi yang memperlihatkan satu siklus lengkap untuk keluaran output. Untuk mendapatkan pengukuran waktu yang akurat masukkan TimeBar kedua(klik kanan dan pilih Insert Time Bars…) dan tempatkan pada titik yang sesuai untuk memperlihatkan waktu yang diperlukan untuk satu siklus keluaran counter. 9. Catat hasil percobaan pada BCL anda. PERCOBAAN 4C: Mengaplikasikan Rangkaian BCD Counter Untuk pengujian ini kita akan menambahkan rangkaian bcd‐to‐7‐segment yang sudah kita buat pada modul 3 sehingga anda dapat melihat secara langsung performa dari rangkaian BCD counter yang anda buat. a. Setting Pengujian 1. Kopi file Bcd_7seg.bdf dari modul 3 kedalam folder project BCD Counter, pilih FileÆOpen dan buka file tersebut. Kemudian pilih FileÆCreate/UpdateÆCreate Symbol Files for Current File. 2. Tambahkan 2 simbol bcd_7seg kedalam skematik CNTR_TEST.bdf. Ubah rangkaian pada file CNTR_TEST.bdf dan Buatlah rangkaian seperti pada gambar 5 di halaman belakang 3. Pada saat merancang bcd‐to‐7‐segment dan BCD counter kita menggunakan asumsi seluruh keluaran dan masukan adalah active HIGH, untuk itu berikan inverter seperlunya pada posisi masukan/keluaran yang tidak sesuai dengan asumsi kita sebelumnya. 4. Untuk input kita akan menggunakan push button untuk CLK dan DIP‐switch untuk yang lainnya,sedangkan output menggunakan 7‐segment display. Cek penggunaan pin FPGA apakah sudah sesuai. Compile program anda. 5. Setelah selesai perlihatkan dahulu kepada asisten skematik dan pin assignment yang anda buat!!! 6. Download program anda kedalam board FPGA dan coba mainkan tombol atau switch yang digunakan pada program ini. Apakah angka‐angkanya cepat berubah?? Mengapa?? 7. Catat hasil percobaan pada BCL anda.
48
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
PERCOBAAN 4D: Mengaplikasikan Rangkaian Divide ByN Counter a. Setting Pengujian 1. Bukalah project DIVBY_N yang sudah anda buat. 2. Pakailah kabel jumper pada pin GPIO[16] dan GND, kemudian hubungkan osiloskop dengan kabel jumper tersebut untuk melihat keluaran rangkaian. 3. Setelah selesai perlihatkan dahulu kepada asisten skematik dan pin assignment yang anda buat!!! 4. Download program anda kedalam board FPGA dan lihat keluaran osiloskop 5. Catat hasil percobaan pada BCL anda. Setelah percobaan selesai, simpan seluruh file modul 4 ini karena akan digunakan kembali pada modul 5. Jika belum selesai, maka selesaikan di rumah.
.MENGAKHIRI PERCOBAAN 1. Sebelum keluar dari ruang praktikum, rapikan meja praktikum. Bereskan kabel dan matikan komputer, osiloskop, generator sinyal, dan power supply DC. Cabut daya dari jala‐jala ke kit FPGA dan letakkan kembali pada tempat semula. 2. Periksa lagi lembar penggunaan meja. Praktikan yang tidak menandatangani lembar penggunaan meja atau membereskan meja ketika praktikum berakhir akan mendapatkan potongan nilai sebesar minimal 10. 3. Pastikan asisten telah menandatangani catatan percobaan kali ini pada Buku Catatan Laboratorium anda. Catatan percobaan yang tidak ditandatangani oleh asisten tidak akan dinilai.
49
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
50
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
Tabel keadaan dan nilai masukan BCD counter
51
Percobaan IV: Rangkaian Logika Sekuensial Laboratorium Dasar Teknik Elektro STEI ITB
Karnaugh Map untuk masukan D‐flip‐flop
52