Anda di halaman 1dari 12

Piranti Terprogram

Perancangan Rangkaian
Kombinasional dan Sequensial
(Pertemuan ke- 3 dan 4)

1
Perancangan digital pada divais FPGA (2)
1. Tujuan
• Mampu merancang dan mendemonstrasikan rangkaian kombinasional dan sequential
pada FPGA serta melaporkan hasil percobaannya
• Membuat rangkaian sequential counter dengan VHDL
• Membuat rangkaian kombinasional dengan VHDL
• Implementasi rancangan pada FPGA devais

2. Peralatan yang dibutuhkan


• Komputer yang sudah terinstall software XILINX ISE Design Suite 14.7 dan
Adept Digilent
• BASYS 2 FPGA board

3. Langkah percobaan

1. Buka software ISE Design Suite 14.7

2
2. Klik pada tombol “New Project” untuk membuat project baru.

3. Beri nama project dan letakkan project pada folder yang ditentukan serta Top-level
source type adalah HDL

4. Setting jenis FPGA dan konfigurasi lainnya sesuai gambar dibawah, dimana

Family: Spartan-3E

Device: XC3S100E atau XC3S250E, tergantung jenis chip board anda

Package: CP132

Speed: -4

Preferred Language: VHDL

3
5. Klik Next dan anda akan mendapat konfirmasi konfigurasi yang telah dilakukan.
Selanjutnya klik Finish

6. Selanjutnya buat file VHDL dengan cara klik kanan pada nama project, selanjutnya
pilih New Source

7. Pilih jenis source VHDL Module dan berilah nama, misalnya My_Counter

8. Selanjutnya langsung klik Next kemudian Finish, karena kita akan membuat port
secara manual dengan text.

9. Maka anda akan mendapatkan file baru (*.vhd), tetapi tanpa deskripsi port yang akan
digunakan.

4
10. Untuk percobaan ini kita akan membuat Counter 4-bit. Dimana input akan didapatkan
dari Switch dan Clock dari externa, Output akan ditampilkan pada Seven-Segment.
Percobaan akan dilakukan pada board Basys2 dengan IC FPGA Spartan 3E.

11. Edit VHDL code menjadi seperti berikut:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Decoder is
Port ( mclk : in STD_LOGIC;
Switch : in STD_LOGIC_VECTOR (7 downto 0); -- 3-bit input
Seven_Segment : out STD_LOGIC_VECTOR (0 to 6);
Led : out STD_LOGIC_VECTOR (7 downto 0) -- 8-bit output
); -- enable input
end Decoder;

architecture Behavioral of Decoder is

signal sign_Count_Out : STD_LOGIC_VECTOR(3 downto 0);


signal CE,reset : STD_LOGIC;
signal cntDiv: std_logic_vector(23 downto 0); -- general clock div/cnt

begin

5
Led <= Switch;
reset <= Switch(6);

-- clock divider, untuk menurunkan frkuensi dari clock input (eksternal)


ckDivider: process(mclk)
begin
if mclk'event and mclk='1' then
cntDiv <= cntDiv + '1';
if cntDiv = X"F00000" then
CE <= '1';
cntDiv <= X"000000";
else
CE <= '0';
end if;
end if;

end process;

--Counter
process(mclk,CE,Reset)
begin
if Reset='1' then
sign_Count_Out <= "0000";
elsif(rising_edge(mclk)) then
if CE='1' then
if sign_Count_Out="1111" then
sign_Count_Out<="0000";
else
sign_Count_Out <= sign_Count_Out + 1;
end if;
end if;
end if;
end process;

-- Seven Segment Decoder


process (sign_Count_Out)
begin
case sign_Count_Out is
when "0000" => Seven_Segment <= "0000001"; ---0
when "0001" => Seven_Segment <= "1001111"; ---1
when "0010" => Seven_Segment <= "0010010"; ---2
when "0011" => Seven_Segment <= "0000110"; ---3
when "0100" => Seven_Segment <= "1001100"; ---4
when "0101" => Seven_Segment <= "0100100"; ---5
when "0110" => Seven_Segment <= "0100000"; ---6
when "0111" => Seven_Segment <= "0001111"; ---7
when "1000" => Seven_Segment <= "0000000"; ---8
when "1001" => Seven_Segment <= "0000100"; ---9

when "1010" => Seven_Segment <= "0001000"; ---A


when "1011" => Seven_Segment <= "1100000"; ---b
when "1100" => Seven_Segment <= "0110001"; ---C
when "1101" => Seven_Segment <= "1000010"; ---d
when "1110" => Seven_Segment <= "0110000"; ---E
when "1111" => Seven_Segment <= "0111000"; ---F
when others => Seven_Segment <= "1111111"; ---null

6
end case;
end process;

12. Lakukan pengecekan penulisan,dengan cara RUN Check Syntax sebagaimana


gambar berikut.

Lanjutkan ke langkah 13, jika tidak ada error.

13. Buat file deskripsi untuk penggunaan pin pada FPGA. Pada langkah ini Lokasi Switch
akan disetting untuk tepat terhubung dengan FPGA. Klik kanan pada nama project,
NEW Source kemudian pilih Implementation Constraints File

14. Buat file baru yang bernama my_Counter.ucf. Edit file ini menjadi seperti berikut
kemudian save:

# clock pin for Basys2 Board

NET "mclk" LOC = "B8"; # Bank = 0, Signal name = MCLK

#NET "uclk" LOC = "M6"; # Bank = 2, Signal name = UCLK

NET "mclk" CLOCK_DEDICATED_ROUTE = FALSE;

#NET "uclk" CLOCK_DEDICATED_ROUTE = FALSE;

# Pin assignment for LEDs

7
NET "Led<7>" LOC = "G1" ; # Bank = 3, Signal name = LD7

NET "Led<6>" LOC = "P4" ; # Bank = 2, Signal name = LD6

NET "Led<5>" LOC = "N4" ; # Bank = 2, Signal name = LD5

NET "Led<4>" LOC = "N5" ; # Bank = 2, Signal name = LD4

NET "Led<3>" LOC = "P6" ; # Bank = 2, Signal name = LD3

NET "Led<2>" LOC = "P7" ; # Bank = 3, Signal name = LD2

NET "Led<1>" LOC = "M11" ; # Bank = 2, Signal name = LD1

NET "Led<0>" LOC = "M5" ; # Bank = 2, Signal name = LD0

# Pin assignment for SWs

NET "Switch<7>" LOC = "N3"; # Bank = 2, Signal name = SW7

NET "Switch<6>" LOC = "E2"; # Bank = 3, Signal name = SW6

NET "Switch<5>" LOC = "F3"; # Bank = 3, Signal name = SW5

NET "Switch<4>" LOC = "G3"; # Bank = 3, Signal name = SW4

NET "Switch<3>" LOC = "B4"; # Bank = 3, Signal name = SW3

NET "Switch<2>" LOC = "K3"; # Bank = 3, Signal name = SW2

NET "Switch<1>" LOC = "L3"; # Bank = 3, Signal name = SW1

NET "Switch<0>" LOC = "P11"; # Bank = 2, Signal name = SW0

# Pin assignment for DispCtl

# Connected to Basys2 onBoard 7seg display

NET "Seven_Segment<0>" LOC = "L14"; # Bank = 1, Signal name = CA

NET "Seven_Segment<1>" LOC = "H12"; # Bank = 1, Signal name = CB

NET "Seven_Segment<2>" LOC = "N14"; # Bank = 1, Signal name = CC

NET "Seven_Segment<3>" LOC = "N11"; # Bank = 2, Signal name = CD

NET "Seven_Segment<4>" LOC = "P12"; # Bank = 2, Signal name = CE

NET "Seven_Segment<5>" LOC = "L13"; # Bank = 1, Signal name = CF

NET "Seven_Segment<6>" LOC = "M12"; # Bank = 1, Signal name = CG

#NET "dp" LOC = "N13"; # Bank = 1, Signal name = DP

8
15. Selanjutnya RUN Synthesize

16. Lakukan Generate Programming File untuk mendapatkan bit file yang akan di
upload ke FPGA. Apabila tidak ada error, maka anda akan mendapatkan bit file.

9
17. Sampai dengan tahap ini, anda sudah berhasil membuat file bit yang siap untuk di-
upload ke FPGA.

18. Persiapkan board BASYS 2 FPGA. Hubungkan kabel USB ke board dan Switch-On
kan. Maka led merah dekat USB dan switch akan menyala.

19. Aktifkan software Adept Digilent, maka board akan otomatis dikenali oleh software.

20. Klik Browse yang sejajar dengan FPGA XC3S dan upload file decoder.bit yang
sudah dibuat sebelumnya. Lokasi ada di folder project, misal COBA1_FPGA. Klik
Yes untuk memprogram FPGA.

10
21. Amati pada Board FPGA, apakah output pada Seven-segmen sesuai dengan yang
dirancang.

22. Tugas untuk dikerjakan di LAB

A. Rubahlah nilai batas pada “ if cntDiv = X"F00000" then”, dengan nilai yang jauh lebih
kecil dan jauh lebih besar, jelaskan apa yang terjadi?

B. Edit kode VHDL untuk mendapatkan rangkaian UP-Down counter. Gunakan


Switch(7) sebagai pengatur counter up atau down.

C. Rancanglah rangkaian untuk counter 0 s.d 9999.

Informasi, tambahan untuk tugas 22.C:

11
23. Dengan cara yang sama, buatlah rangkaian multiplexer, adder, multiplier, dan
komparator dengan VHDL.
24. Implementasikan pada modul FPGA

12

Anda mungkin juga menyukai