lp e2 senin 1406601750 m07 k10 ummaira fadhilah

20
LAPORAN PENDAHULUAN ELEKTRONIKA 2 SEQUENTIAL BCD COUNTER Nama : Ummaira Fadhilah NPM : 1406601750 Rekan Kerja : Iskandar Kelompok : 10 Hari : Senin Tanggal : 2 Mei 2016 Modul ke : 7 LABORATORIUM ELEKTRONIKA – DEPARTEMEN FISIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS INDONESIA

Upload: harismaulanayunefi

Post on 10-Jul-2016

238 views

Category:

Documents


0 download

TRANSCRIPT

LAPORAN PENDAHULUANELEKTRONIKA 2

SEQUENTIAL BCD COUNTER

Nama : Ummaira FadhilahNPM : 1406601750Rekan Kerja : IskandarKelompok : 10Hari : SeninTanggal : 2 Mei 2016Modul ke : 7

LABORATORIUM ELEKTRONIKA – DEPARTEMEN FISIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS INDONESIA

DEPOK

2016

MODUL 7

SEQUENTIAL BCD COUNTER

A. Tujuan

Dalam praktikum kali ini mahasiswa diharapkan dapat merancang sequential BCD

counter.Hal ini akan dicapai dengan menggunakan desain sirkuit sekuensial dan clock

division. Output yang dihasilkan akan ditampilkan pada dua digit display seven segment.

B. Alat

1. ZYBO Zync7000

2. Micro-USB power usb cable

3. Software Vivado

4. PC /Laptop 64 bit

C. Teori Dasar

Counter merupakan salah satu rangkaian elektronika digital yang menggunakan urutan logika

digital dan dipicu oleh pulsa atau clock(rangkaian sekuensial). Counter biasanya mencacah

atau menghitung dalam biner dan dapat dibuat untuk berhenti atau berulang ke hitungan awal

setiap saat. Pada counter yang berulang, jumlah kondisi biner yang berbeda

menunjukkan modulus  (MOD) counter. Sebagai contoh, counteryang mencacah dari 0-1-2-

3-4-5-6-7 secara berulang disebut juga modulus8 atau MOD-8. Rangkaian

dasar counter adalah beberapa flip-flop yang jumlahnya bergantung pada modulus yang

diperlukan. Secara  umum,counter  terbagi menjadi 2 jenis, yaitu asynchronous

counter (ripple counter) dan synchronous counter.

Rangkaian Asynchronous BCD Counter adalah rangkaian digital yang berfungsi melakukan

proses penghitungan data input dan memeberikan output data penghitungan tersebut dalam

format data BCD (Binary Coded Decimal) secara asynchronous (tidak sinkron/tidak

simultan). Teknik penghitungan pada Asynchronous BCD Counter adalah menghitung secara

serial yaitu secara bertahap dimana data output flip-flop pertama sebagai data input flip-flop

kedua dan data output flip-flop kedua sebagai data input flip-flop ketiga dan output data flip-

flop ketiga sebagai data input flip-flop ke empat dan seterusnya.

Asynchronous BCD Decade Counter adalah rangkaian penghitung data yang dibatasi samapi

10 hitungan saja, proses counter dibatasi maksimal sampai 10 kali penghitungan. Rangkaian

Asynchronous BCD Decade Counter pada artikel ini dibuat menggunakan 4 unit JK-FF (JK

Flip-flop) seperti terlihat pada gambar berikut

Rangkaian Asynchronous BCD Decade Counter

Gambar 1. Rangkaian BCD Decade Counter

Proses counter pada rangkaian Asynchronous BCD Decade Counter adalah menghitung data

clock secara serial dimana data clock adalah input JK-FF pertama kemudian output JK-FF

pertama sebagai clock JK-FF kedua dan output JK-FF kedua sebagai clock JK-FF ketiga dan

output JK-FF ketiga sebagai clock JK-FF kempat kemudian pada hitungan ke sepeuluh

(decade) secara otomatis output conter direset kembali ke NOL (0000) menggunakan gerbang

NAND 3 input yang mendapat input data HIGH dari data BCD 9 (1001) sehingga data output

maksimum adalah BCD 9 (1001). Rangkaian Asynchronous BCD Decade Counter hanya

menghitung sebanyak 10 kali hitungan dengan output data BCD 0 (0000) hingga BCD 9

(1001) sperti pada tabel dan timing diagram berikut.

Tabel input/output Asynchronous BCD Decade Counter

Gambar 2. Tabel Input/Output BCD Decade Counter

Timing Diagram Asynchronous BCD Decade Counter

Gambar 3. Timing Diagram BCD Decade Counter

Dari data pada tabel dan timing diagram diatam terlihat bahwa proses penghitungan data

clock dolakukan secara serial dan dibatasi sampai 10 kali hitungan (decade) saja. Setiap 10

kali hitungan maka rangkaian Asynchronous BCD Decade Counter diatas akan direset atau

dipaksa kembali ke nilai awal lagi BCD 0 (0000). Dimana output rangkaian Asynchronous

BCD Decade Counter dengan JK-FF diatas adalah data BCD 0 (0000) sampai BCD 9 (1001).

Gambar 4. Block diagram

Std_logic (dan std_logic_vector): system logika 8-nilai diperkenalkan dalam standar IEEE 1164.

Contoh:

Sebagian besar tingkat std_logic dimaksudkan untuk simulasi saja. Namun, '0 ', '1', dan

'Z' adalah synthesizable tanpa pembatasan. Sehubungan dengan nilai-nilai "weak

(lemah)", mereka diselesaikan dalam mendukung nilai-nilai “forcing (memaksa)" di node

multiply-driven (lihat tabel 3.1). Bahkan, jika ada dua sinyal std_logic yang terhubung ke

node yang sama, maka tingkat logika yang bertentangan adalah otomatis diselesaikan

sesuai dengan tabel 3.1.

1. Designing Clock Divider Modules

Jam Pembagi memiliki beberapa tujuan dalam desain FPGA. Untuk keperluan lab ini,

ada dua alasan khusus untuk menggunakannya. Yang pertama adalah bahwa jam

onboard yang disediakan oleh ZYBO terlalu cepat untuk proses dalam desain kami,

berjalan pada 125MHz. Sebuah Jam Divider dapat digunakan untuk memperlambat jam

masukan dengan menetapkan variabel yang bertambah dengan setiap nyata jam hit.

Setelah variabel mencapai nilai yang ditentukan oleh pengguna, Jam Divider output 1.

Misalnya: Jam masukan dari 10Hz, yang berarti bahwa jam pemogokan 10 kali setiap

detik, adalah masukan ke sebuah jam pembagi. Output dari clock divider adalah jam

2Hz. Hal ini ditunjukkan pada

Dalam rangka untuk output jam 2Hz, 2 serangan per detik, pertama Anda harus

menentukan berapa banyak serangan dari jam nyata akan terjadi untuk setiap

pemogokan jam dibagi. Hal ini dilakukan hanya dengan membagi input jam Hz oleh

clock output yang diinginkan Hz. (10/2 = 5)

Nilai 5Hz adalah apa yang akan ditetapkan sebagai nilai variabel internal harus

mencapai sebelum keluaran 1. Dengan menetapkan variabel yang increment oleh 1

setiap jam pemogokan, jam divider akan sekarang hanya output '1' setelah 5 jam

pemogokan yang sebenarnya, memproduksi jam 2Hz kita inginkan

Gambar 5.. 10Hz to 2Hz Clock Divider. N is set at 5, the value which the internal variable must count up to before outputting

a 1

Konsep yang sama diterapkan saat mengambil masukan jam 125MHz yang ZYBO dan

membawanya ke frekuensi yang diinginkan.

Alasan kedua kita akan menggunakan pembagi jam di lab ini adalah karena kita

membutuhkan beberapa kecepatan clock yang berbeda. Seperti ditunjukkan dalam

Gambar 1, Lab 3 desain menggunakan Jam Pembagi selama tiga komponen yang

berbeda, masing-masing memerlukan kecepatan clock yang berbeda. Di sinilah obat

generik akan berguna, memungkinkan kita untuk menggunakan komponen jam

pembagi yang sama dan mengatur kecepatan clock output yang berbeda untuk kedua

komponen counter, yang toggler, serta komponen PoV_SS_Driver.

2. Designing the Persistence of Vision Driver

Di lab sebelumnya hanya salah satu digit dari dua digit, 7-Segmen Tampilan

digunakan. Pada lab ini kedua angka akan digunakan. Melihat pin tampilan, Anda akan

melihat bahwa ada hanya cukup masukan untuk menerangi tujuh segmen pada satu

saat, jadi bagaimana kita menyalakan kedua angka dengan angka yang terpisah?

Di lab sebelumnya Anda hanya peduli dengan tujuh pin yang terkait dengan masing-

masing segmen pada layar. Input pin kedelapan, katoda, yang tersisa yang belum

ditetapkan. Jika Anda adalah untuk bukannya mengatur pin yang ke tinggi, angka di

sebelah kiri akan menampilkan jumlah bukan digit di sebelah kanan. Hal ini karena

layar dirancang untuk menyalakan satu digit atau yang lain tergantung pada apa nilai

input katoda adalah.

Di sinilah konsep Persistence of Vision datang ke dalam bermain. Kegigihan Visi

mengacu pada teknik di mana cahaya diaktifkan dan off pada frekuensi yang cukup

cepat sehingga terlihat seperti lampu tidak dimatikan sama sekali, karena otak Anda

tidak memiliki cukup waktu untuk memproses bahwa cahaya telah dimatikan sebelum

itu lagi. Ini dapat diterapkan untuk layar 7-Segmen kami. Dengan beralih katoda off

dan pada frekuensi yang cukup cepat, kedua angka akan tampak menyala secara

konsisten pada waktu yang sama.

D. Prosedur Percobaan

1. Designing Clock Divider Modules

1. Jam divider Anda hanya harus memiliki satu input dan satu output, serta

pernyataan generik.

2. Untuk nilai default dari N dalam pernyataan generik Anda, menggunakan apa

yang dibahas di atas untuk menentukan apa N nilai harus membawa jam masukan

dari 125MHz ke 2Hz. Ini akan menjadi kecepatan counter akan kenaikan dan

penurunan di.

3. Di dalam arsitektur clock divider kami akan menjadi proses yang sederhana.

Proses dinyatakan seperti ini: proses (CLK) Bagian dalam kurung disebut daftar

sensitivitas. Ini memberitahu hardware bahwa proses ini tergantung pada

perubahan sinyal yang, dalam hal ini perubahan input CLK.

4. Setelah deklarasi proses, jam divider Anda akan memerlukan variabel yang dapat

bertambah pada setiap jam mogok. Untuk memungkinkan untuk ini, jenis variabel

harus dibuat alami daripada std_logic biasa. Ini akan memberitahu desain Anda

memperlakukan variabel ini seperti integer. Ini akan memungkinkan Anda untuk

menggunakan pernyataan seperti: count: = count + 1; Namun, Anda hanya ingin

variabel Anda untuk kenaikan ketika jam pemogokan. Ada beberapa cara untuk

menyatakan ini, tapi untuk tujuan lab ini, Anda akan menggunakan: jika

(clk'EVENT) dan (CLK = '1') maka Dengan pernyataan ini, sisa blok Jika hanya

akan dimulai ketika perubahan CLK terdeteksi (Clk'EVENT), dan ketika nilai

saat ini adalah 1. 'EVENT adalah atribut dari sinyal. Cara lain untuk melakukan

hal ini akan menggunakan pernyataan sisi kenaikan.

5. Dengan variabel Anda incrementing setiap serangan jam, tujuannya sekarang

adalah untuk memiliki pembagi clock output Anda hanya sebesar '1' ketika

variabel yang telah mencapai nilai N yang ditetapkan, jika tidak maka harus sama

'0'. Hal ini dilakukan dengan yang lain kecil Jika blok.

* Jangan lupa untuk me-reset variabel menghitung Anda setelah mencapai N, jika jam

Anda akan output 1 setelah waktu yang diinginkan, dan kemudian tinggal di satu tanpa

batas.

2. Designing the Persistence of Vision Driver

1. Dalam SS_PoV_Driver Anda Anda akan menerapkan PoV dengan menggunakan

proses sederhana yang beralih cepat antara dua nilai katoda. Sopir PoV Anda harus

memiliki tiga input, satu untuk jam Anda, dan dua untuk nilai output dari Anda dua

BCD Counters. Anda juga akan memerlukan sebuah output untuk sinyal tujuh

segmen, serta katoda.

2. Buat sinyal internal untuk memegang nilai katoda selama proses switching. Hal ini

kemudian akan menjadi output untuk output katoda, serta bertindak sebagai pilih

baris untuk multiplexer kecil. Sebuah sinyal internal yang kedua akan digunakan

sebagai output dari yang multiplexer pertama, dan kemudian akan bertindak

sebagai pilih untuk multiplexer kedua.

3. Proses Anda untuk beralih antara dua nilai katoda harus lagi peka terhadap

perubahan input CLK. Dalam proses Anda akan ingin katoda untuk beralih antara

tinggi dan rendah berdasarkan jika CLK baru saja berubah dan jika itu saat nilai

adalah '1'. Ini adalah semua yang diperlukan di blok proses.

4. Nilai yang dihasilkan dari proses switching akan menjadi output melalui sinyal

internal untuk output katoda.

5. Blok akan multiplexer. Menggunakan nilai dari sinyal katoda internal akan

menentukan apakah sinyal internal yang kedua terhubung ke input BCD meja

pertama, atau yang lain.

6. Itu keluaran kemudian akan digunakan sebagai pilih untuk multiplexer yang lebih

besar, yang akan menampilkan nilai 7-segmen yang dibutuhkan untuk

menampilkan mana nilai BCD kontra saat ini.

Misalnya, Jika nilai sekarang dari sinyal katoda internal '0', sinyal internal yang kedua

harus mengambil nilai dari input BCD meja pertama. Tergantung pada nilai itu, 7-

segmen digit di sebelah kanan layar harus harus yang nilai dalam desimal.

3. Top Level Design

1. Anda telah disediakan counter modul BCD, dan modul beralih. Buat file Lab3.vhd

yang instantiates dan interkoneksi dua BCD counter dan dua matikan, tiga modul

divisi jam, dan PoV 7-Segmen driver.

2. Tulis testbench untuk desain Lab3. Memverifikasi bahwa ia bekerja sebagaimana

dimaksud sebelum melanjutkan. Simulasikan dengan vektor uji ditampilkan di Lab

Kerja bagian 4, pada halaman 2 dari dokumen ini. Simpan gelombang dan tabel

kebenaran yang dihasilkan dan memasukkan mereka dalam laporan laboratorium

Anda.

3. alat Perencanaan I / O Gunakan Vivado untuk merancang berkas kendala Anda.

Papan ZYBO membantu memberikan jam onboard untuk digunakan dalam proyek-

proyek yang berjalan pada 125MHz. Untuk menggunakan jam ini, sederhana

menetapkan input jam Anda ke PIN L16 dalam file kendala Anda.

4. Sisa kendala Anda harus sesuai dengan tugas yang tercantum dalam Tabel 1.

PMOD Switches Onboard Switches Onboard ButtonsSW1 = B(3) SW1 = B(3) BTN3 = EnableSW2 = B(2) SW1 = B(2) BTN1 = LoadSW3 = B(1) SW1 = B(1) BTN0 = Up_DnSW4 = B(0) SW1 = B(0) BTN2 = Reset

5. Dua Digit 7-Segmen Tampilan harus dipetakan pada itu di laboratorium 2, namun

kali ini, P5 dari konektor J2 harus ditugaskan sebagai output Katoda.

E. Tugas Pendahuluan

Buatlah kode yang digunakan “Sequential BCD Counter”! Dan penjelasan kodenya!

Jawaban:

Kode:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use ieee.numeric_std.all;

entity counter is

port(

rst : in STD_LOGIC;

clk : in STD_LOGIC;

ld : in STD_LOGIC;

en : in STD_LOGIC;

up_dn : in STD_LOGIC;

D : in STD_LOGIC_VECTOR(3 downto 0);

overflow : out STD_LOGIC;

Q : out STD_LOGIC_VECTOR(3 downto 0)

);

end counter;

architecture Behavioral of counter is

signal Qi : std_logic_vector(3 downto 0);

begin

Q_proc : process(clk, rst) is

begin

if rst = '1' then

Qi <= "0000";

elsif clk = '1' and clk'event then

if ld = '1' then

if (unsigned(D) >= 0) and (unsigned(D) <= 9) then

Qi <= D;

else

Qi <= "0000";

end if;

elsif en = '1' then

if up_dn = '0' then

if Qi = "0000" then

Qi <= "1001";

else

Qi <= std_logic_vector(unsigned(Qi) - 1);

end if;

elsif up_dn = '1' then

if Qi = "1001" then

Qi <= "0000";

else

Qi <= std_logic_vector(unsigned(Qi) + 1);

end if;

end if;

end if;

end if;

end process Q_proc;

Q <= Qi;

overflow_proc : process(Qi, en, up_dn) is

begin

if en = '1' then

if Qi = "0000" and up_dn = '0' then

overflow <= '1';

elsif Qi = "1001" and up_dn = '1' then

overflow <= '1';

else

overflow <= '0';

end if;

else

overflow <= '0';

end if;

end process overflow_proc;

end Behavioral;

skematik :

Simulasi :

Keterangan:

Input rst: “Leading Edge Value” = 1; “Trailing Edge Value” = 0;

“Period” = 10 ns

Input clk: “Leading Edge Value” = 1; “Trailing Edge Value” = 0;

“Period” = 20 ns

Input ld: “Leading Edge Value” = 0; “Trailing Edge Value” = 1;

“Period” = 40 ns

Input en: “Leading Edge Value” = 1; “Trailing Edge Value” = 0;

“Period” = 80 ns

Input up_dn: “Leading Edge Value” = 1; “Trailing Edge Value” = 0;

“Period” = 30 ns

Input D: “Leading Edge Value” = 1; “Trailing Edge Value” = 0;

“Period” = 50 ns

“Specify Time” = 600 ns

F. Referensi

http://bit.ly/1O60J9H

http://eng.umb.edu/~cuckov/classes/engin341/Labs/LAB3%20-%20Sequential%20BCD

%20Counter/Lab%203%20%E2%80%93%20Sequential%20BCD%20Counter.pdf

http://elektronika-dasar.web.id/synchronous-counter/

http://elektronika-dasar.web.id/asynchronous-bcd-decade-counter/