You are on page 1of 14

LAPORAN PENDAHULUAN

ELEKTRONIKA 2
SEQUENTIAL BCD COUNTER

Nama
NPM
Rekan Kerja
Kelompok
Hari
Tanggal
Modul ke

: Ummaira Fadhilah
: 1406601750
: Iskandar
: 10
: Senin
: 2 Mei 2016
: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-34-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 flipflop 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
8-nilai diperkenalkan dalam standar

std_logic_vector): system logika


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 masingmasing 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, 7segmen 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 proyekproyek 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
SW1 = B(3)
SW2 = B(2)
SW3 = B(1)
SW4 = B(0)

Onboard
Switches
SW1 = B(3)
SW1 = B(2)
SW1 = B(1)
SW1 = B(0)

Onboard
Buttons
BTN3 = Enable
BTN1 = Load
BTN0 = Up_Dn
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;

: in STD_LOGIC_VECTOR(3 downto 0);

overflow

: out STD_LOGIC;

: 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/

You might also like