EL2195 5 Dito Wijanarko

11
Halaman 1 PROYEK PERANCANGAN RANGKAIAN DIGITAL: VARIABLE-SPEED CHASER LED Praktikan: Dito Wijanarko (18010054) Asisten: M. Sulthon (13208048) Waktu Percobaan: 24 November 2011 EL2195-Praktikum Sistem Digital Laboratorium Dasar Teknik Elektro Sekolah Teknik Elektro dan Informatika – ITB Abstrak Sejauh ini, modul 1-5 Praktikum Sistem Digital telah menjelaskan kepada kita bagaimana membuat rangkaian digital berdasarkan ASM, skema, atau program yang ada. Pada modul 6, praktikan akan mendesain rangkaian sistem digital berdasarkan spesifikasi/masalah yang ada. Tahapan pengerjaan modul ini menerjemahkan spesifikasi yang ada menjadi desain awal. Desain awal ini mencakup desain jalur data dari input hingga output, lalu desain unit pemroses (termasuk unit kendali) dari data- data input ini, barulah desain integrasi dari unit- unit pemroses ini lengkap dengan jalur datanya. Pada percobaan ini telah dibuat program rangakain Variable-Speed Chaser LED, yaitu rangkaian pemancar cahaya (dengan LED) sekuensial (cahaya terpancar satu per satu), dan telah diimplementasikan pada board FPGA Cylcone II EP2C20F484C7. Kata kunci: Variable Speed Chaser LED, Desain Jalur Data, Desain Unit Kendali 1. Pendahuluan Desain unit kendali yang telah dilakukan pada modul 5 Praktikum Sistem Digital memungkinkan kita untuk mengendalikan blok-blok rangkaian yang telah kita buat sebelumnya, sehingga perilakunya dapat kita manipulasi; tidak bergerak secara linear; memungkinkan terjadinya perpindahan atau penetapan state. Akan tetapi, pada kenyataanya, desain rangkaian digital tidak hanya melingkupi desain unit kendalinya, melainkan mendesain keseluruhannya, dimulai dari jalur data, blok-blok di dalam entitas tersebut, hingga input dan output sesuai dengan sistem yang telah kita spesifikasikan. Oleh karenanya, praktikum pada modul ini akan berbicara mengenai desain jalur data, desain unit pengendali, integrasi dari unit kendali dengan blok-blok lainnya (termasuk mencocokkan jalur data dengan pin input dan output), serta implementasi dari desain ini pada FPGA Board. 2. Teori Dasar Sebenarnya gagasan dari Variable-Speed Chaser LED adalah memanfaatkan shift register untuk menggeser nilai yang telah tersimpan pada satu pin, katakanlah LED_OUT, kearah kanan atau kiri, tergantung arah yang diinput oleh pengguna. Berikut adalah contoh shift register pada salah satu blok dari rangkaian Variable-Speed Chaser LED ini: process begin wait until clock'event and clock = '1';

Transcript of EL2195 5 Dito Wijanarko

Page 1: EL2195 5 Dito Wijanarko

Hal

aman

1

PROYEK PERANCANGAN RANGKAIAN DIGITAL: VARIABLE-SPEED CHASER LED

Praktikan: Dito Wijanarko (18010054) Asisten: M. Sulthon (13208048)

Waktu Percobaan: 24 November 2011EL2195-Praktikum Sistem Digital

Laboratorium Dasar Teknik ElektroSekolah Teknik Elektro dan Informatika – ITB

Abstrak

Sejauh ini, modul 1-5 Praktikum Sistem Digital telah menjelaskan kepada kita bagaimana membuat rangkaian digital berdasarkan ASM, skema, atau program yang ada. Pada modul 6, praktikan akan mendesain rangkaian sistem digital berdasarkan spesifikasi/masalah yang ada. Tahapan pengerjaan modul ini menerjemahkan spesifikasi yang ada menjadi desain awal. Desain awal ini mencakup desain jalur data dari input hingga output, lalu desain unit pemroses (termasuk unit kendali) dari data-data input ini, barulah desain integrasi dari unit-unit pemroses ini lengkap dengan jalur datanya. Pada percobaan ini telah dibuat program rangakain Variable-Speed Chaser LED, yaitu rangkaian pemancar cahaya (dengan LED) sekuensial (cahaya terpancar satu per satu), dan telah diimplementasikan pada board FPGA Cylcone II EP2C20F484C7.

Kata kunci: Variable Speed Chaser LED, Desain Jalur Data, Desain Unit Kendali

1. Pendahuluan

Desain unit kendali yang telah dilakukan pada modul 5 Praktikum Sistem Digital memungkinkan kita untuk mengendalikan blok-blok rangkaian yang telah kita buat sebelumnya, sehingga perilakunya dapat kita manipulasi; tidak bergerak secara linear; memungkinkan terjadinya perpindahan atau penetapan state. Akan tetapi, pada kenyataanya, desain rangkaian digital tidak hanya melingkupi desain unit kendalinya, melainkan mendesain keseluruhannya, dimulai dari jalur data, blok-blok di dalam entitas tersebut, hingga input dan output sesuai dengan sistem yang telah kita spesifikasikan. Oleh karenanya, praktikum pada modul ini akan berbicara mengenai desain jalur data, desain unit pengendali, integrasi dari unit kendali dengan blok-blok lainnya (termasuk mencocokkan jalur data dengan pin input dan output), serta implementasi dari desain ini pada FPGA Board.

2. Teori Dasar

Sebenarnya gagasan dari Variable-Speed Chaser LED adalah memanfaatkan shift register untuk menggeser nilai yang telah tersimpan pada satu pin, katakanlah LED_OUT, kearah kanan atau kiri, tergantung arah yang diinput oleh pengguna. Berikut adalah contoh shift register pada salah satu blok dari rangkaian Variable-Speed Chaser LED ini:

Page 2: EL2195 5 Dito Wijanarko

Hal

aman

2

processbeginwait until clock'event and clock = '1';if enable = '1' thenif reset = '1' thenq <= "0000000001";elsif dir = '0' then

q(8)<=q(9);

q(7)<=q(8);

q(6)<=q(7);

q(5)<=q(6);

q(4)<=q(5);

q(3)<=q(4);

q(2)<=q(3);

q(1)<=q(2);

q(0)<=q(1);

q(9)<=q(0);

q(8)<=q(9);else

q(0)<=q(9);

q(1)<=q(0);

q(2)<=q(1);

q(3)<=q(2);

q(4)<=q(3);

q(5)<=q(4);

q(6)<=q(5);

q(7)<=q(6);

q(8)<=q(7);

q(9)<=q(8);

q(0)<=q(9);end if;end if;end process;

Kode Program 2.1: Shift Register

Pada shift register ini, kita tidak dapat memberikan input dalam artian input nilai pada elemen q. Nilai q sendiri telah kita definisikan pada awalnya, dengan ketentuan input reset harus aktif, yaitu “0000000001”. Reset sendiri akan menggeser selama input enable = 1. Bila input enable = 0 , maka penggeseran ini tidak akan terjadi. Kesimpulannya adalah, input enable hanya untuk mengaktifkan pergeseran ini terjadi atau tidak. Input yang lain, yaitu input dir, yang akan memengaruhi pergeseran ini terjadi kearah kiri atau kanan.

Blok shift register ini disebut sebagai rangkaian datapath. Rangkaian datapath adalah rangkaian yang berfungsi untuk menyimpan dan memanipulasi data; dalam hal ini, data yang telah kita definisikan pada state awal (saat reset = 0), akan memertahankan kondisinya atau mulai menggeser data-data yang ada ke kiri atau ke kanan.

Blok shift register ini tentu tidak beroperasi terus menerus; dalam artian pergeseran data per data ini hanya kita kehendaki terjadi dalam satu selang waktu yang tetap untuk semua data. Kesimpulannya, input enable ini haruslah bernilai aktif (HIGH) hanya untuk satu selang waktu yang terbatas saja. Perilaku sinyal yang seperti ini sebenarnya telah kita lihat pada rangkaian DivByN Counter, yang mencacah jumlah sinyal hingga jumlah N tertentu, dan mengeluarkan input aktif (HIGH) setelah jumlah cacahan sinyal = N. Mengulang kembali prinsip DivByN Counter:

T= JumlahCacahanSinyalN (KHz )

Alias, jumlah cacahan sinyal = N ini hanya akan terjadi selama periode tertentu saja. Selang waktu inilah yang akan kita manfaatkan untuk menjadikannya sebagai kecepatan pergeseran dari shift register. Pada implementasinya, kecepatan pergeseran dari shift register ini akan menjadi kecepatan pergeseran nyala LED.

Maka dari itu, karena rangkaian DivByN Counter ini mengendalikan perilaku rangkaian datapath kita, maka rangkaian DivByN Counter ini dapat kita manfaatkan untuk mendesain rangkaian kendali, karena kita masih harus mendefinisikan empat kecepatan yang berbeda, yang tidak mungkin kita definisikan di dalam rangkaian DivByN Counter.

3. Metodologi

Alat dan Bahan:

Komputer (PC) yang telah ter-install program Quartus II (minimal) versi 6.0.

Kabel jumper

Osiloskop + probe

Page 3: EL2195 5 Dito Wijanarko

Hal

aman

3

q <= q

EN=?

q=”0000000001”

RES=?

EN=?

RES=?

DIR=?

SHIFTLEFT(q)

SHIFTLEFT(q)

0

1

1

0

1

1

1 0

CURRENT_STATE

FPGA Development board, bertipe ALTERA UP2 atau ALTERA DE1 beserta kelengkapannya:

Diagram Alur:

4. Hasil dan Analisis

Gambar 4.1.1: ASM Untuk Unit Kendali

Gambar 4.1.2: Skema Integrasi Rangkaian Unit Kendali dan Rangkaian Jalur Data

-- checked

library ieee;use ieee.std_logic_1164.all;

entity divbyinput isport

(clock: in std_logic;n: in std_logic_vector (31

downto 0);tc: out std_logic);

end divbyinput;

architecture structural of divbyinput iscomponent count32

port(CLK :in std_logic;RESET:in std_logic;

Baclaah/tentukanlah spesifikasi dari rangkaian

digital yang ingin didesain.

Tentukanlah dua bagian utama: bagian jalur data dan

bagian pengendali.

Spesifikasikan masing-masing bagian tersebut; apa

yang bagian tersebut lakukan.

Buatlah ASM dari masing-masing bagian.

Integrasikan kedua bagian tersebut dalam bentuk

skema sederhana, untuk menjelaskan alur data dan

blok-blok pemroses dari satu rangkaian tersebut.

Buatlah program dari masing-masing bagian (jalur

data dan pengendali), dimulai dari blok-blok yang

urutan level nya paling bawah.

Lakukan simulasi dari masing-masing program

penyusun rangkana kendali dan rangkaian jalur data.

Integrasikan unit pengendali dan unit jalur data. Lakukan

simulasi, pastikan telah berjalan dengan baik.

Lakukan proses pin planner. Pastikan input dan output

telah mendapatkan pin assignment yang sesuai.

Implementasikan desain dalam FPGA Board. Amati

baik-baik bila terjadi ketidaksesuaian dari hasil

simulasi.

Catat percobaan pada BCL.

Page 4: EL2195 5 Dito Wijanarko

Hal

aman

4

Q:out std_logic_vector (31 downto 0));

end component;signal assign_out:std_logic;signal s:std_logic_vector (31 downto

0);

begincount32bit:count32 port map (CLK => clock, RESET => assign_out, Q

=> s);

process (s,n)begin

if s = n then assign_out <= '1';

else assign_out <= '0';end if;

end process;tc <= assign_out;end structural;

Program 4.1.1: Program DivByInput Counter

library ieee;use ieee.std_logic_1164.all;

entity speedchaser isport (clock:in std_logic;speed_input:in std_logic_vector (0 to

3);out_enable:out std_logic);

end speedchaser;

architecture structural of speedchaser iscomponent divbyinput port (clock:in std_logic; n:in std_logic_vector (31 downto 0); tc: out std_logic);end component;signal signal_n:std_logic_vector (31 downto 0);begin

process (speed_input, signal_n)beginif speed_input = "0001" thensignal_n <=

"00000000000000000000000000110010"; --0,5 selsif speed_input = "0010" thensignal_n <=

"00000000000000000000000001100100"; --0,25 selsif speed_input = "0100" thensignal_n <=

"00000000000000000000000011001000"; --0,125 selsif speed_input = "1000" thensignal_n <=

"00000000000000000000000110010000"; --0,0625 selsesignal_n <= signal_n;end if;end process;

speed_control : divbyinput PORT MAP (clock => clock, n => signal_n, tc => out_enable);end structural;

Program 4.1.2: Program Speedchaser (Program Unit Kendali – Pengatur Kecepatan)

library ieee;use ieee.std_logic_1164.all;

entity shifter is

port (clock:in std_logic;reset:in std_logic;enable:in std_logic;dir:in std_logic;led_out :out std_logic_vector (0 to 9));

end shifter;architecture behavioral of shifter is

signal q : std_logic_vector (0 to 9);

beginprocessbeginwait until clock'event and clock =

'1';if enable = '1' thenif reset = '1' thenq <= "0000000001";elsif dir = '0' then

q(8)<=q(9);

q(7)<=q(8);

q(6)<=q(7);

q(5)<=q(6);

q(4)<=q(5);

q(3)<=q(4);

q(2)<=q(3);

q(1)<=q(2);

q(0)<=q(1);

q(9)<=q(0);

q(8)<=q(9);else

q(0)<=q(9);

q(1)<=q(0);

q(2)<=q(1);

q(3)<=q(2);

q(4)<=q(3);

q(5)<=q(4);

q(6)<=q(5);

q(7)<=q(6);

q(8)<=q(7);

q(9)<=q(8);

q(0)<=q(9);end if;end if;end process;led_out(9) <= q(9);led_out(8) <= q(8);led_out(7) <= q(7);led_out(6) <= q(6);led_out(5) <= q(5);led_out(4) <= q(4);led_out(3) <= q(3);led_out(2) <= q(2);led_out(1) <= q(1);led_out(0) <= q(0);end behavioral;

Page 5: EL2195 5 Dito Wijanarko

Hal

aman

5

Program 4.1.3: Program Shift Register

library ieee;use ieee.std_logic_1164.all;

entity variable_speedchaser isport ( clock:in std_logic;reset:in std_logic;dir:in std_logic;input:in std_logic_vector (0 to 3);output: out std_logic_vector (0 to 9));

end variable_speedchaser;

architecture structural of

variable_speedchaser iscomponent speedchaser port

(clock:in std_logic;speed_input:in std_logic_vector (0 to

3);out_enable:out std_logic);

end component;

component shifter port(clock:in std_logic;reset:in std_logic;enable:in std_logic;dir:in std_logic;led_out:out std_logic_vector (0 to

9));end component;

signal q:std_logic;begin

speed:speedchaser PORT MAP (clock => clock, speed_input => input, out_enable => q);

shift:shifter PORT MAP (clock => clock, reset => reset, enable => q, dir => dir, led_out => output);end structural;

Program 4.1.4: Program Variable-Speed Chaser LED (Integrasi dari unit jalur data dan unit

kendali)

Gambar 4.1.3: Hasil Simulasi DivByInput Counter

Gambar 4.1.4: Hasil Simulasi Speedchaser (Unit Kendali)

Gambar 4.1.5: Hasil Simulasi Shift Register (Unit Jalur Data)

Gambar 4.1.6: Hasil Simulasi Variable-Speed Chaser LED (Integrasi Unit Kendali dan Unit Jalur

Data)

Nama Input Nama Pin Lokasi

DIR SW1 PIN_L21

Reset SW0 PIN_L22

Clock CLOCK_50 PIN_L1

Input(0) SW9 PIN_L2

Input(1) SW8 PIN_M1

Input(2) SW7 PIN_M2

Input(3) SW6 PIN_U11

Output(0) LEDR0 PIN_R20

Output(1) LEDR1 PIN_R19

Output(2) LEDR2 PIN_U19

Output(3) LEDR3 PIN_Y19

Page 6: EL2195 5 Dito Wijanarko

Hal

aman

6

Output(4) LEDR4 PIN_T18

Output(5) LEDR5 PIN_V19

Output(6) LEDR6 PIN_Y18

Output(7) LEDR7 PIN_U18

Output(8) LEDR8 PIN_R18

Output(9) LEDR9 PIN_R17

Tabel 4.1.1: Pin Assignment

Secara umum, dapat kita lihat bahwa program-program yang telah praktikan buat, berfungsi sebagaimana mestinya. DivByInput Counter telah menunjukkan perilaku yang semestinya, yaitu menghasilkan nilai keluaran HIGH setelah satu periode tertentu, tergantung input 32 bit yang kita masukkan. Demikain pula unit kendali kita, sesungguhnya berperilaku sama seperti DivByInput Counter, karena bila kita lihat skema integrasi rangkaian, keluaran dari unit kendali kita sesungguhnya adalah keluaran dari DivByInput Counter. Satu hal yang perlu diperhatikan adalah DivByInput Counter yang praktikan desain menggunakan modul eksternal yang terletak dalam satu folder, yaitu count32.v yang berfungsi untuk mencacah inputan 32 bit. (Modul ini praktikan modifikasi sedikti dari praktikum sebelumnya)

module count32(CLK, RESET, Q);input CLK;input RESET;output [31:0] Q;reg [31:0] Q;

always @(posedge CLK)begin

if(RESET) Q <= 31'b0;

elseQ <= Q + 31'b1;

endendmodule

Bila kita melihat skema integrasi rangkaian, disitu digambarkan ada sebuah 4bit to 32 bit converter. Sesungguhnya bila kita melihat implementasinya pada program speedchaser.vhd (unit kendali), tidak ada blok khusus yang membuat converter ini, tetapi sudah dicakup pada progam speedchaser.vhd ini.

process (speed_input, signal_n)beginif speed_input = "0001" thensignal_n <=

"00000000000000000000000000110010"; --0,5 selsif speed_input = "0010" thensignal_n <=

"00000000000000000000000001100100"; --0,25 selsif speed_input = "0100" thensignal_n <=

"00000000000000000000000011001000"; --0,125 selsif speed_input = "1000" thensignal_n <=

"00000000000000000000000110010000"; --0,0625 selsesignal_n <= signal_n;end if;end process;

Dapat kita lihat pada proses di program speedchaser.vhd (unit kendali) ini menjelaskan tentang pemilihan kecepatan, yang praktikan desain terbatas hanya untuk empat kecepatan saja. Metodenya adalah one-hot encoding, yaitu hanya ada empat state pilihan kecepatan saja yang setiap state pilihannya hanya mengandung satu nilai yang aktif. Sinyal signal_n ini kemudian akan diteruskan menuju program DivByN Counter, yang besarnya akan menentukan periode pin keluaran dari DivByN Counter selama selang waktu tertentu, melalui perintah PORT MAP.

speed_control : divbyinput PORT MAP (clock => clock, n => signal_n, tc => out_enable);

Pin keluaran dari DivByN Counter inilah yang akan digunakan sebagai input enable dari shift register yang kita desain, sehingga perilaku pergeseran dapat terjadi secara periodik dan satu persatu. Selebihnya, perilaku shift register ini telah praktikan jelaskan pada dasar teori.

q(8)<=q(9);

q(7)<=q(8);

q(6)<=q(7);

q(5)<=q(6);

Page 7: EL2195 5 Dito Wijanarko

Hal

aman

7

q(4)<=q(5);

q(3)<=q(4);

q(2)<=q(3);

q(1)<=q(2);

q(0)<=q(1);

q(9)<=q(0);

q(8)<=q(9);

Baris ini menjelaskan pergeseran kearah kiri.

q(0)<=q(9);

q(1)<=q(0);

q(2)<=q(1);

q(3)<=q(2);

q(4)<=q(3);

q(5)<=q(4);

q(6)<=q(5);

q(7)<=q(6);

q(8)<=q(7);

q(9)<=q(8);

q(0)<=q(9);

Baris ini menjelaskan pergeseran kearah kanan.

Pada program shift register (shifter.vhd), ada satu pertanyaan yang menarik, yaitu mengapa pin output led_out(x) baru di-assign di luar proses sekuensial? Mengapa tidak praktikan langsung assign di dalam proses sekuensial? Hal ini mudah sebetulnya, yaitu untuk menangani keluaran yang berubah-rubah dan tidak terkendali. Dengan meletakannya di luar proses sekuensial, pin output ini baru akan di-assign begitu proses sekuensial yang kita definisikan telah selesai, dapat dengan aman nilai yang telah tergeser kita assign pada pin output.

Hingga di level integrasi, praktikan cukup melakukan port map dari setiap komponen yang telah ada. Hasil simulasi telah menunjukkan bahwa integrasi dari seluruh program yang kita miliki telah berjalan dengan baik. Simulasi dengan berbagai kondisi pun telah dilakukan dan dapat dilihat bahwa tidak ada masalah yang berarti.

Hanya saja saat simulasi yang lain ditemukan perilaku yang cukup aneh. Tidak ada masalah ketika inputan kecepatan diganti secara berurutan: “1000”, “0100”, “0010”, dan “0001”. Lalu ketika diganti kembali dari “0001”, “0010”, 0100”, juga tidak ada masalah. Hanya ketika diganti ke “1000”, tiba-tiba lampu menyala hanya pada satu tempat saja, alias tidak terjadi pergeseran. Hal ini terjadi cukup lama, hingga satu-dua menit.

Gambar 4.1.7: Perilaku Delay Pada Rangkaian

Komputer praktikan tidak mampu melakukan simulasi hingga orde menit, karena itu tidak tertampilkan saat hingga rangkaian kembali menunjukkan perilaku yang normal.

Dapat disimpulkan bahwa masalah terjadi ketika kita ingin mengembalikan inputan speed pada posisi “1000”, terjadi masalah. Tetapi melalui simulasi yang dijelaskan sesuai pada gambar sebelumnya, strategi yang dapat kita lakukan untuk glitch ini adalah pengaturan pengubahan inputan kecepatan sebagai berikut:

“1000”, ”0100”, ”0010”, ”0001”, ”0010”, ”0100”, ”0010”, ”0001”, ”0100”, ”1000”.

Saat implementasi, praktikan menggunakan inputan clock dari pin master clock yang bernilai 50 MHz, sehingga perlu penyesuaian nilai N pada empat pilihan kecepatan. Praktikan mengaturnya pada empat nilai: N = 50.000.000, N = 25.000.000, N = 12.500.000, dan N = 6.750.000. Hasil yang ditunjukkan pun tidak ada perbedaan, tetap terdapat glitch pada perpindahan kecepatan dari “1000”,”0100”,”0010”,dan ke “0001”. Dugaan praktikan adalah terjadi kebocoran pada DivByInput, yaitu pada baris berikut:

Page 8: EL2195 5 Dito Wijanarko

Hal

aman

8

process (s,n)begin

if (s = n) thenassign_out <= '1';

elseassign_out <= '0';

end if;end process;

Dapat terjadi kebocoran bila nilai “s” yang telah dicacah jumlahnya melebihi “n”, dimana kasus ini bisa terjadi ketika kita berpindah dari n yang lebih besar menuju n yang lebih kecil, mengakibatkan nilai assign_out nya menjadi 0, dan proses ini harus menunggu looping pada count32.v selesai hingga 32 bit bernilai 1...1 semua, mengakibatkan terjadinya delay yang cukup lama. Sehingga, syarat (s=n) tidaklah cukup, perlu kita tambahkan syarat (s>n):

process (s,n)begin

if ((s = n)or(s > n)) thenassign_out <= '1';

elseassign_out <= '0';

end if;end process;

Program 4.1.5: Revisi Syarat Untuk DivByInput Counter

Gambar 4.1.8: Hasil Revisi Program

Dapat dilihat bahwa hasil revisi program kini dapat mencakup semua kemungkinan perubahan sinyal.

Selain spesifikasi wajib yang dijelaskan pada modul, praktikan juga diberikan beberapa spesifikasi tambahan, antara lain:

1. Variable-Speed LED Chaser hanya terdiri dari empat LED.

2. Arah gerak LED adalah dari tengah menuju pinggir kanan kiri, atau sebaliknya, tergantung inputan DIR.

3. Diberikan sebuah push button. Bila PB tersebut ditekan, maka kecepatan pergeseran LED akan meningkat/menurun hingga batas maksimal/minimal, lalu kembali ke kecepatan awal lagi, dan bertingkat lagi, dan seterusnya.

4. Ketika masing-masing dari empat LED ini menyala, setiap empat LED ini harus mampu menampilkan kode heksadesimal dari inverse LED yang menyala. Misalkan, bila suatu saat LED yang menyala adalah “0001”, maka sinyal yang akan diteruskan ke HCD (hexadecimal code display) to 7 Segment Converter adalah “1110”, sehingga pada 7 Segment akan ditampilkan huruf E (sebagai representasi angka 14). Pada saat yang bersamaan, empat LED di seberangnya tentu sedang menyala dengan konfigurasi “1000”. Maka di 7 Segment yang lain, huruf/angka yang ditampilkan adalah “0111”, alias angka 7.

Dari keempat spesifikasi tambahan tersebut, praktikan hanya mampu menyelesaikan spek nomor satu dan nomor dua, yaitu menjadikan Variable-Speed Chaser LED ini menjadi empat LED, dan menyalakannya dari tengah menuju pinggir kanan-kiri, dan sebaliknya. Cukup sederhana, apa yang perlu kita ubah adalah kondisi awal dari shift register, serta perilaku pergeserannya:

library ieee;use ieee.std_logic_1164.all;

entity shifter isport

(clock:in std_logic;reset:in std_logic;enable:in std_logic;

dir:in std_logic;led_out :out std_logic_vector (0 to 7));

end shifter;architecture behavioral of shifter is

signal q : std_logic_vector (0 to 7);

beginprocessbeginwait until clock'event and clock =

'1';if enable = '1' thenif reset = '1' then

Page 9: EL2195 5 Dito Wijanarko

Hal

aman

9

q <= "00011000";elsif dir = '0' then

q(2)<=q(3);

q(1)<=q(2);

q(0)<=q(1);

q(3)<=q(0);

q(5)<=q(4);

q(6)<=q(5);

q(7)<=q(6);

q(4)<=q(7);else

q(0)<=q(3);

q(1)<=q(0);

q(2)<=q(1);

q(3)<=q(2);

q(7)<=q(4);

q(6)<=q(7);

q(5)<=q(6);

q(4)<=q(5);end if;end if;

end process;led_out(7) <= q(7);led_out(6) <= q(6);led_out(5) <= q(5);led_out(4) <= q(4);led_out(3) <= q(3);led_out(2) <= q(2);led_out(1) <= q(1);led_out(0) <= q(0);end behavioral;

Program 4.1.6: Revisi Program Shift Register unuk Spesifikasi Tambahan No. 2

Cukup definisikan initial state dari shift register kita adalah “00011000”, selanjutnya tetapkanlah empat baris pertama untuk bergeser ke kiri, dan empat baris kedua untuk bergeser ke kanan, dan tentu diatur sebaliknya untuk pilihan DIR yang berbeda.

Gambar 4.1.9: Simulasi Variable-Speed Chaser LED dengan Spesifikasi Tambahan No.2

Gambar 4.1.10: Perilaku Pergeseran Yang Sesuai dengan Spesifikasi Tambahan No. 2

5. Kesimpulan

Unit kendali dapat kita realisasikan dengan terlebih dahulu menetapkan ASM nya, sebagai alur kondisional dari state-state yang kita inginkan.

Arsitektur One-Hot-Controller memungkinkan kita untuk mendesain unit kendali dengan waktu implementasi yang lebih singkat, walaupun tidak menggunakan cost yang minimum (diperlukan N flip-flop untuk N keadaan).

Rangkaian penghitung frekuensi ini dapat dibentuk dari mengintegrasikan BCD Counter dengan Divide-by-N Counter, untuk masing-maisng mencacah banyak gelombang dan menghitung selang waktu tertentu, kemudian diolah lagi sehingga diperolehlah bacaan frekuensi, yaitu banyak gelombang per selang waktu.

Perlu diperhatikan dalam simulasi adalah pengaturan nilai clock yang baik (sesuai dengan spesifikasi pada unit-unit yang ada di dalamnya, seperti Divide-by-N Counter)

6. Daftar Pustaka

[1] Altera Corporation, DE 1 Development and Education Board User Manual, Altera Corporation, 2006.

[2] A. S. Sedra et.al., Microelectronic Circuits, Hal. 427-428, Saunders College Publising, Toronto, 1991

[3] Brown, Stephen, Zvonko Vranesic, Fundamentals of Digital Logic With

Page 10: EL2195 5 Dito Wijanarko

Hal

aman

10

VHDL Design, McGraw-Hill, 2009, hal.670-674.

[4] H. S. Jackstar, Panduan Penulisan Laporan, Jacks Publishing, Bandung, 2008

[5] Hwang, Enoch O., Digital Logic and Microprocessor Design With VHDL, Brooks/Cole, 2005, Appendix D; VHDL Summary.