DIGITAL PIANO - FPGA BOARD

by michaelhalim1107 in Circuits > Electronics

482 Views, 0 Favorites, 0 Comments

DIGITAL PIANO - FPGA BOARD

20230120_152803 (1).jpg

KELOMPOK 3 DIGITAL PIANO LB40

Devin Hartanto 2501995010 (Ketua)

Michael Halim 2501992450

Christian Robin Kieswanto 2540128474

Patrick Arthur Sahalaraja 2502012376


Pendahuluan


Latar Belakang

Saat ini, cukup banyak orang-orang yang ingin mempelajari berbagai alat musik dan salah satunya adalah piano ini. Tetapi dalam prosesnya untuk mempelajari memainkan piano, banyak orang yang menyerah dan menjadi tidak berminat untuk belajar karena faktor-faktor tertentu. Faktor yang pertama adalah masalah harga, dimana pada umumnya kisaran harga sebuah piano dapat dibilang cukup tinggi, sehingga peminatnya pun berkurang karena banyak yang berpikiran bahwa sangat disayangkan untuk mengeluarkan sejumlah uang hanya untuk mendapatkan alat musiknya saja. Faktor lainnya yang mempengaruhi hal ini adalah masalah kerumitannya, dimana orang yang baru pertama kali ingin belajar piano merasa kebingungan akan banyaknya not, chord, oktaf dan fitur-fitur lainnya dalam sebuah piano yang tentunya tidak dapat dikuasai semudah itu oleh seorang pemula.

Melihat masalah-masalah yang ada tersebut dalam pembelajaran piano bagi pemula, kami ingin membuat sebuah rancangan berupa digital piano yang bertujuan untuk memberikan alternatif lain kepada para pemula dengan piano digital yang lebih mudah dimengerti dan praktis, tanpa perlu mengeluarkan biaya yang besar untuk mulai mempelajari piano.

Dari tugas rancang yang kami buat, kami dapat menghasilkan piano yang dapat membantu pemula untuk belajar piano menggunakan produk kami yaitu digital piano yang lebih praktis untuk dimainkan dan dari segi harga lebih terjangkau daripada piano sebenarnya.


Rumusan Masalah

  • Bagaimana menghasilkan frekuensi suara yang sesuai dengan not asli?
  • Bagaimana membuat digital piano menggunakan FPGA Board?


Tinjauan Pustaka

Alat musik pada zaman sekarang sudah mendunia sehingga banyak sekali macam jenis alat musik yang sangat modern salah satunya yaitu digital piano. Digital piano yang dapat dibuat menggunakan teknologi zaman sekarang yaitu FPGA board Nexys A7-100t dapat membantu membuat digital piano menjadi lebih menarik.

Publikasi ilmiah Digital Piano Keyboard Design using FPGA Implementation for Beginner yang berasal dari International Conference on Technology, Engineering and Sciences (ICTES) 2020 membuat digital piano menggunakan FPGA board sebagai IC atau komponen utama yang membantu membuat digital piano. Desain prototipe harus dilakukan dalam lingkungan yang portabel dan mudah digunakan. Keyboard yang menampung 13 nada ditempatkan di depan di mana pengguna pemula dapat bermain dengan bebas di nada-nada utama. Prototipe ini juga memiliki penutup untuk melindungi papan dan sirkuit dari debu dan air untuk mencegah kerusakan pada prototipe. Piano digital yang dirancang pada FPGA, pengguna hanya perlu mencolokkan catu daya dan speaker eksternal ke prototipe ini. Kabel USB tipe B diperlukan untuk mengunggah Verilog ke dalam DE1-SoC. Koneksi internal untuk prototipe ini sangat sederhana karena pengguna dapat memutuskan dan menyambungkannya kembali. 

Publikasi ilmiah FPGA Piano Project yang berasal Department of Computer Science Lund University membuat digital piano menggunakan FPGA board dan juga disertai PMOD Amplifier untuk membantu memproses digital piano. Bagian utama dari perangkat keras adalah VGA, keyboard PS2, dan inti IP keluaran PWM. VGA adalah inti IP yang dibuat khusus, baik PS2 dan PWM adalah inti IP Xilinx. 

Dari kedua publikasi, dilihat perbedaan dalam membuat digital piano FPGA Board banyak cara dalam membuatnya dari menggunakan PMOD dan juga VGA. Digital piano yang dibuat oleh peneliti sekarang menggunakan PMOD Keypad sebagai alat bantu atau media untuk bermain piano sebagai tuts pada piano.


Tujuan

Tujuan dari penelitian tugas rancang ini adalah membuat piano digital yang lebih simpel. Digital piano yang kami buat memiliki fitur seperti not yang lebih sedikit daripada not piano yang asli.


Manfaat

Manfaat dari hasil penelitian yang dicapai adalah dapat membuat digital piano yang sangat efisien dan mudah untuk dibawa kemana mana untuk dimiliki oleh para pemula yang mau belajar maupun yang sudah terlatih.

Supplies

Landasan Teori


2.1 FPGA Board

FPGA atau Field-Programmable Array adalah sebuah IC digital yang  dapat diprogram ulang untuk mengkonfigurasi hardware-nya sesuai dengan pengaplikasian yang diinginkan untuk memenuhi kebutuhan yang spesifik tergantung pengguna. FPGA ini berbeda dengan IC lainnya karena memiliki fleksibilitas untuk diprogram dan diprogram ulang kembali via software untuk mengadaptasi kebutuhan sistem yang didesain menggunakan FPGA tersebut. 

Untuk menjalankan sebuah implementasi, FPGA memerlukan konfigurasi agar interkoneksi dan rangkaian logika pada FPGA tersebut dapat mengetahui peran apa yang harus dilakukan dalam pengaplikasian tertentu. Hal ini dilakukan menggunakan development software khusus yang biasa disediakan oleh supplier/perusahaan pembuat FPGA, dimana pengguna akan mendesain logika yang akan diimplementasikan ke dalam FPGA berupa HDL (Hardware Description Language).

Setelah implementasi HDL dilakukan, software akan melakukan kompilasi (compile) desain tersebut dengan melakukan sintesis dan kemudian menempatkan serta membuat rute untuk logikanya yang sedemikian rupa sesuai dengan hardware di FPGA. Setelah itu akan dibuat sebuah bitstream yang akan mengkonfigurasi FPGA tersebut dan setelah bitstream di download ke dalam FPGA, maka FPGA dapat menjalankan tugasnya sesuai dengan implementasi HDL yang dibuat.


2.2 Pmod 

Pmod atau Peripheral Module Interface adalah standar terbuka yang digunakan untuk menghubungkan periferal ke FPGA atau papan pengembangan lainnya. Ada 2 versi, versi 6-pin dan 12-pin, versi 6-pin memiliki 4 pin I/O digital, 1 pin daya, dan 1 pin ground. Versi 12-pin memiliki 8 pin I/O sinyal, 2 pin daya, dan 2 pin ground. Sinyal yang termasuk dalam versi 12-pin dibuat untuk menyediakan 2 koneksi dari 6 pin yang ditumpuk.

Secara umum, modul Pmod dapat dihubungkan langsung ke konektor pada papan pengontrol host yang disebut port host, atau ke papan pengontrol dengan kabel enam atau 12 pin. Dua modul periferal 6-pin dapat dihubungkan ke satu port host 12-pin menggunakan dua kabel breakout 12-pin ke 6-pin. Demikian pula, modul periferal 12-pin dapat dihubungkan ke dua port host 6-pin dengan kabel breakout 12-pin.

Modul Pmod ditenagai oleh host melalui power dan ground pin antarmuka. Antarmuka Pmod tidak dirancang untuk penggunaan frekuensi tinggi, tetapi dengan menggunakan konektor RJ45 dan kabel Pain Ethernet twisted pair, sinyal dengan frekuensi 24 MHz ditransmisikan dengan lancar pada jarak hingga 4 meter. Namun secara teoritis, sinyal di atas 100MHz dapat dicapai dengan port berkecepatan tinggi dengan koneksi langsung ke modul Pmod.


2.3 PMOD Keypad

PmodKYPD membuat array 16 tombol sesaat menggunakan 4 baris dan kolom melalui gerakan. Dengan menghubungkan baris kolom ke tegangan level logika rendah secara bergantian, pengguna dapat membaca tegangan level logika yang sesuai. Periksa setiap baris untuk menentukan tombol mana yang ditekan. Penekanan tombol secara bersamaan Anda juga dapat mencatatnya, tetapi Anda harus memeriksa setiap baris dan kolom satu per satu untuk memastikannya pengukuran tidak boleh terganggu dengan menekan tombol. PmodKYPD menggunakan protokol GPIO untuk berkomunikasi dengan host board. Setiap tombol adalah rangkaian pembagi tegangan sederhana. Resistor pull-up yang besar mempertahankan level logika tinggi ketika tombol tidak ditekan. Ketegangan pada setiap pin baris. Ketika pin kolom bergerak ke tegangan rendah level logika dan tombol yang sesuai ditekan untuk menyelesaikan rangkaian pembagi tegangan, pin baris membaca tegangan rendah level logika sebagai gantinya.

Metode Pelaksanaan

Cara kerja sistem

Cara kerja digital piano yang dibuat menggunakan FPGA Board sama seperti piano pada umumnya dimana tuts akan mengeluarkan suara dari output FPGA Board itu sendiri. Sistem piano digital yang menggunakan FPGA Board dan keypad PMOD akan bekerja dengan mengubah penekanan tombol fisik pada keypad menjadi sinyal digital yang dapat diproses oleh FPGA. FPGA kemudian akan menghasilkan sinyal audio yang sesuai untuk tombol yang ditekan, yang dapat dikeluarkan melalui speaker atau perangkat output audio lainnya. Keypad PMOD kemungkinan besar akan memiliki 16 tombol, tetapi kami menggunakan 15 nada yang dapat dimainkan dari C4, D4, E4, F4, G4, A4, B4, C5, D5, E5, F5, G5, A5, B5, C6. FPGA akan diprogram untuk mengenali ketika sebuah tombol ditekan dan menghasilkan sinyal audio yang sesuai untuk tombol tersebut. Selain itu, FPGA mungkin dapat menambahkan berbagai efek seperti reverb atau sustain pada output audio, tergantung pada implementasi spesifik sistem.

Blok Diagram

messageImage_1674726159487.jpg

Dari input yaitu keypad disambungkan ke PMOD(JB) untuk diproses ke FPGA Board, dimana terdapat decoder untuk membaca input keypad melalui PMOD(JB), kemudian diteruskan ke komponen kedua untuk menghasilkan frekuensi suara yang akan diteruskan ke low pass filter yang ada di audio jack(J8), lalu akan dikeluarkan sinyal analog melalui speaker sebagai output.

Flow Chart

Button_E_1.png

Dari start untuk memulai proses, tetapi dicek terlebih dahulu apakah ada arus tegangan yang masuk sebagai power, jika ada sumber tegangan maka langsung bisa di on atau off, jika tidak ada tegangan maka proses akan langsung end. Pada switch on/off, jika switch off maka proses langsung end atau bisa diulang, sedangkan jika switch on maka lanjut ke proses selanjutnya ke button pada keypad. Pada button keypad, jika di tekan button 1 maka akan keluar C4 sedangkan jika tidak tekan maka tidak akan keluar suara C4. Jika button 2 di tekan maka akan keluar D4 dan sebaliknya jika tidak ditekan maka tidak akan keluar suara D4 hingga seterusnya sampai button E. Pada button D tidak akan keluar suara karena tidak ada input frekuensi pada code VHDL nya.

Schematic

Screenshot 2023-01-26 101536.png

Pada skematik diatas dilihat terdapat 2 input yaitu clkin yang merupakan clock 100MHz dari board dan JB yang merupakan port pmod pada FPGA yang terhubung dengan keypad. Input JB akan masuk ke komponen decoder keypad yang terhubung dengan Row dan Column, input clkin terhubung dengan clk. Dari komponen decoder akan dikeluarkan output DecoderOut yang diteruskan ke komponen berikutnya yaitu PlayNoteVal yang terhubung dengan NotVal sebagai input yang meneruskan DecoderOut. Pada komponen PlayNoteVal juga menerima input clkin yang terhubung dengan clk1. Dari komponen PlayNoteVal akan dikeluarkan output audioout yang dihubungkan ke audiofix yang merupakan audio jack pada FPGA (J8).

Main Code

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

entity PianoKYPD is
Port (
clkin : in STD_LOGIC; -- clock board 100MHz
JB : inout STD_LOGIC_VECTOR (7 downto 0); -- Keypad disambungkan ke pmod JB
audiofix : out STD_LOGIC); -- output ke audio jack J8
end PianoKYPD;

architecture Behavioral of PianoKYPD is

component DecoderKYPD is
Port (
clk : in STD_LOGIC;
Row : in STD_LOGIC_VECTOR (3 downto 0);
Col : out STD_LOGIC_VECTOR (3 downto 0);
DecodeOut : out STD_LOGIC_VECTOR (3 downto 0));
end component;

component PlayNoteVal is
Port (
NotVal : in STD_LOGIC_VECTOR (3 downto 0);
clk1 : in STD_LOGIC;
audioout : out std_logic);
end component;

signal Decode: STD_LOGIC_VECTOR (3 downto 0);
begin

C0: DecoderKYPD port map (clk=>clkin,Row =>JB(7 downto 4), Col=>JB(3 downto 0), DecodeOut=> Decode);
C1: PlayNoteVal port map (NotVal=>Decode,clk1=>clkin, audioout=>audiofix);

end Behavioral;

Berikut diatas adalah main code VHDL utama untuk implementasi digital piano pada FPGA Nexys A7 100T. Dimana pada code ini hanya dilakukan port mapping untuk menggabungkan dua component lainnya yaitu DecoderKYPD.vhd dan PlayNoteVal.vhd dengan port input dan output utama.

DecoderKYPD merupakan komponen untuk membaca dan menentukan input pada button yang ditekan dari keypad yang dihubungkan melalui port pmod JB dan PlayNoteVal merupakan komponen untuk mengeluarkan output suara melalui jack audio J8 pada FPGA.

Component 1

Screenshot 2023-01-24 175907.png
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity DecoderKYPD is
Port (
clk : in STD_LOGIC;
Row : in STD_LOGIC_VECTOR (3 downto 0);
Col : out STD_LOGIC_VECTOR (3 downto 0);
DecodeOut : out STD_LOGIC_VECTOR (3 downto 0));
end DecoderKYPD;

architecture Behavioral of DecoderKYPD is

signal sclk :STD_LOGIC_VECTOR(19 downto 0);
begin
process(clk)
begin
if clk'event and clk = '1' then
-- 1ms (sclk = 100KHz , clock divider = 100MHz/100KHz = 1000Hz , Periode = 1/1000Hz = 1ms)
if sclk = "00011000011010100000" then
--C1 (check kolom 1)
Col<= "0111";
sclk <= sclk+1;

-- check pin untuk baris 1-4 (sclk = 100.008, delay untuk melanjutkan scan kolom)
elsif sclk = "00011000011010101000" then
--R1
if Row = "0111" then
DecodeOut <= "0001"; --1
--R2
elsif Row = "1011" then
DecodeOut <= "0100"; --4
--R3
elsif Row = "1101" then
DecodeOut <= "0111"; --7
--R4
elsif Row = "1110" then
DecodeOut <= "0000"; --0

end if;
sclk <= sclk+1;
-- 2ms
elsif sclk = "00110000110101000000" then
--C2 (check kolom 2)
Col<= "1011";
sclk <= sclk+1;
-- check pin untuk baris 1-4
elsif sclk = "00110000110101001000" then
--R1
if Row = "0111" then
DecodeOut <= "0010"; --2
--R2
elsif Row = "1011" then
DecodeOut <= "0101"; --5
--R3
elsif Row = "1101" then
DecodeOut <= "1000"; --8
--R4
elsif Row = "1110" then
DecodeOut <= "1111"; --F

end if;
sclk <= sclk+1;
--3ms
elsif sclk = "01001001001111100000" then
--C3 (check kolom 3)
Col<= "1101";
sclk <= sclk+1;
-- check pin untuk baris 1-4
elsif sclk = "01001001001111101000" then
--R1
if Row = "0111" then
DecodeOut <= "0011"; --3
--R2
elsif Row = "1011" then
DecodeOut <= "0110"; --6
--R3
elsif Row = "1101" then
DecodeOut <= "1001"; --9
--R4
elsif Row = "1110" then
DecodeOut <= "1110"; --E

end if;
sclk <= sclk+1;
--4ms
elsif sclk = "01100001101010000000" then
--C4 (check kolom 4)
Col<= "1110";
sclk <= sclk+1;
-- check check pin untuk baris 1-4
elsif sclk = "01100001101010001000" then
--R1
if Row = "0111" then
DecodeOut <= "1010"; --A
--R2
elsif Row = "1011" then
DecodeOut <= "1011"; --B
--R3
elsif Row = "1101" then
DecodeOut <= "1100"; --C
--R4
elsif Row = "1110" then
DecodeOut <= "1101"; --D
end if;
sclk <= sclk+1;
--5ms
elsif sclk = "01111010000100100000" then
-- check semua kolom sekaligus
Col<= "0000";
sclk <= sclk+1;
-- check saat tidak ada pin baris yang aktif
elsif sclk = "01111010000100101000" then
--R1
if Row = "1111" then
DecodeOut <= "1101";
end if;
sclk <= "00000000000000000000";
else
sclk <= sclk+1;
end if;
end if;
end process;

end Behavioral;

Component yang pertama adalah berupa decoder untuk membaca input berupa tombol apa yang ditekan pada keypad.

Decoder dapat menentukan tombol mana yang ditekan pada keypad dengan mengatur dan mengecek setiap pin kolom yang memiliki logic low (0) . Dimana setelah Decoder mengatur pin kolom menjadi logic low, selanjutnya akan dicek pin baris apakah logicnya low atau tidak. Logic low pada pin baris menandakan bahwa tombol telah ditekan.

Hal tersebut dapat tentukan dengan melihat cara kerja keypad yang dimana setiap tombol ditempatkan pada rangkaian voltage divider sederhana. Saat tombol tidak ditekan, resistor pull-up mempertahankan tegangan logic high pada setiap pin baris. Saat pin kolom digerakkan ke tegangan logic low dan tombol pada kolom tersebut ditekan, maka rangkaian voltage divider tersebut akan menjadi sempurna sehingga pin baris akan memiliki nilai tegangan dengan logic low.

Baris dan kolom dinyatakan dalam 4 bit, dimana angka paling kiri menyatakan baris/kolom pertama hingga angka paling kanan yang menyatakan baris/kolom terakhir seperti yang bisa dilihat pada skematik rangkaian keypad.

Setelah Decoder memiliki nilai kolom dan baris tombol, dapat ditentukan nilai outputnya dalam hal ini adalah DecodeOut yang akan diteruskan ke PlayNoteVal.vhd. Decoder akan berganti kolom untuk mengecek logic low setiap 1 ms dalam siklusnya menggunakan serial clock, dimana pada 1ms dicek kolom 1, 2ms dicek kolom 2 dan seterusnya hingga terakhir pada 5ms untuk menentukan nilai output DecodeOut saat tidak ada button yang ditekan di semua kolom. Saat siklus terakhir dilakukan, serial clock akan kembali lagi ke 0 dan dilakukan siklus selama 5ms lagi.

Component 2

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


entity PlayNoteVal is
Port (
--output dari Decoder KYPD
NotVal : in STD_LOGIC_VECTOR (3 downto 0);
clk1 : in STD_LOGIC; -- clock dr board 100Mhz
audioout : out std_logic); -- output ke speaker
end PlayNoteVal;

architecture Behavioral of PlayNoteVal is
signal counter: integer := 0;
signal temp_out : STD_LOGIC := '0';
signal note : std_logic_vector(3 downto 0);
begin
process(clk1, note)
begin
if(rising_edge(clk1)) then
case note is
when "0000" => --untuk not c4
if (counter >= 191204) then --
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "0001" => --untuk not d4
if (counter >= 170357) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "0010" => --untuk not e4
if (counter >= 151745) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "0011" => --untuk not f4
if (counter >= 143266) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "0100" => --untuk not g4
if (counter >= 127551) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "0101" => --untuk not a4
if (counter >= 113636) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "0110" => --untuk not b4
if (counter >= 101214) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "0111" => --untuk not c5
if (counter >= 95510) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "1000" => --untuk not d5
if (counter >= 85106) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "1001" => --untuk not e5
if (counter >= 75815) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "1010" => --untuk not f5
if (counter >= 71581) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "1011" => --untuk not g5
if (counter >= 63775) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "1100" => --untuk not a5
if (counter >= 56818) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "1101" => --untuk not b5
if (counter >= 50607) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "1110" => --untuk not c6
if (counter >= 47778) then
counter <= 0;
temp_out <= not temp_out;
else
counter <= counter +1;
end if;
when "1111" =>
temp_out <= '0';
counter <= 0;
end case;
end if;
end process;
audioout <= temp_out;

with NotVal select
note <= "0000" when "0001", --1 = c4
"0001" when "0010", --2 = d4
"0010" when "0011", --3 = e4
"0011" when "1010", --A = f4
"0100" when "0100", --4 = g4
"0101" when "0101", --5 = a4
"0110" when "0110", --6 = b4
"0111" when "1011", --B = c5
"1000" when "0111", --7 = d5
"1001" when "1000", --8 = e5
"1010" when "1001", --9 = f5
"1011" when "1100", --C = g5
"1100" when "0000", --0 = a5
"1101" when "1111", --F = b5
"1110" when "1110", --E = c6
"1111" when others;

end Behavioral;


Component kedua adalah PlayNoteVal.vhd yang digunakan untuk mengeluarkan output berupa suara not pada speaker dari DecodeOut yang berasal dari component decoder sebelumnya. Untuk mendapatkan frekuensi suara yang diinginkan, diperlukan sebuah pembagi frekuensi. Disini digunakan clock 100MHz dari board FPGA untuk mengimplementasikan pembagi frekuensi, dimana idenya diimplementasikan menggunakan counter yang terus bertambah hingga mencapai nilai yang ditentukan dan nilai pada sinyal temp_out akan ditoggle menjadi high saat counter mencapai nilai tersebut, counter juga kembali ke 0 dan melanjutkan hitungan kembali. Nilai dari temp_out akan disimpan untuk digunakan sebagai output pada speaker (audioout)


Process 1 untuk pembagi frekuensi

Pertama perlu dipastikan bahwa not hanya dapat dimainkan pada saat clock rising edge, sehingga pada if statement dipastikan untuk mengecek kondisi rising edge.

Kemudian diketahui bahwa clock dari FPGA sebesar 100MHz, maka untuk mendapatkan frekuensi not yang diinginkan kita harus membagi 100MHz dengan frekuensi not tersebut. Contoh untuk menghasilkan 500Hz, maka bagikan 100MHz/500Hz dan didapatkan 200000 yang dimana counter dari pembagi frekuensi akan menghasilkan frekuensi 500Hz setiap 100000 cycle karena clock dari board memiliki duty cycle 50% (200000 x 50% = 100000).

Dari logika tersebut untuk menghasilkan not C4 digunakan nilai frekuensi not C5 yang 1 oktaf lebih tinggi nilainya, dimana frekuensi not C5 adalah dua kalinya frekuensi not C4. Karena duty cycle clock sebesar 50%, bila 100MHz dibagi dengan frekuensi C4 dikalikan 50% akan sama saja jika 100MHz dibagi frekuensi C5 secara langsung. Jadi untuk menghasilkan not yang kami inginkan, digunakan nilai frekuensi yang lebih tinggi 1 oktaf pada pembagi frekuensi tersebut.

Jadi untuk perhitungannya adalah sebagai berikut dengan contoh untuk not C4:

C4 : 100MHz/(frekuensi C5) = 100MHz/523 = 191204

Sehingga akan dihasilkan frekuensi 261.5Hz (C4) setiap counter mencapai 191204 cycle yang dimana nilai frekuensi akan disimpan ke dalam temp_out untuk dimainkan ke audioout. Dimana untuk setiap not diberikan nilai hexadecimal 0-16 karena ada 16 macam not yang dapat dimainkan pada keypad yang hanya memiliki 16 button. Dengan begitu dapat ditentukan pada nilai not apa, maka frekuensi mana yang harus dihasilkan.

Sebagai contoh saat nilai not 0 (0000), frekuensi untuk not C4 yang akan dihasilkan. Saat nilai not 8 (1000), frekuensi untuk not D5 yang akan dihasilkan dan seterusnya. Untuk nilai not 16 (1111), sengaja dibuat tidak mengeluarkan suara dimana temp_out tetap bernilai 0 dan counter akan direset ke 0 yang dimana nilai not ini sengaja dibuat untuk diberikan ke DecodeOut dengan nilai "1101", sehingga saat button “D” ditekan / saat tidak ada button yang ditekan / saat button dilepas, suara akan hilang dengan sendirinya.


Select statement

Select statement digunakan untuk memberikan (assign) nilai output not ke button yang ditekan pada keypad. Dimana NotVal serta DecodeOut dimapping melalui sinyal Decode pada main code, sehingga NotVal akan meneruskan output DecodeOut dari component 1 sebagai input di component 2. Disini NotVal memilih sinyal yang akan ditetapkan ke sinyal target. Dalam contoh ini, ketika dipilih nilai NotVal 0001, output not adalah 0000 (C4) dan seterusnya hingga untuk nilai NotVal lainnya selain yang dituliskan (others) yaitu 1101, output not adalah 1111 (tidak ada suara).

Hasil Dan Pembahasan

tabel mantap.png

Dari hasil pengujian yang dilakukan, digital piano yang dibuat oleh peneliti berjalan dengan lancar dan mengeluarkan suara seperti piano pada umumnya, dimana pada hasil pengujian peneliti mendapatkan hasil bahwa frekuensi not yang dihasilkan cukup sesuai dengan frekuensi not yang telah ditentukan pada VHDL.

Hasil pengukuran frekuensi output suara dari FPGA Board Nexys A7-100t menunjukkan frekuensi yang cukup akurat dimana sebagai contoh dapat dilihat pada pengukuran not C4 didapat hasil 261.5Hz dibandingkan dengan not C4 yang seharusnya dengan frekuensi 261.63Hz. Untuk not lainnya juga memiliki perbedaan yang sangat tipis pada frekuensinya sehingga dapat dikatakan bahwa frekuensi yang dihasilkan memiliki akurasi yang baik.

Kesimpulan Dan Saran

Kesimpulan

Dari hasil pengujian terhadap rancangan digital piano menggunakan FPGA Nexys A7 - 100T, digital piano yang dibuat berjalan sesuai dengan yang diharapkan dimana tiap button pada PMOD Keypad digital piano dapat memainkan not yang sudah ditentukan dari code VHDL untuk masing-masing button.

Peneliti menemukan bahwa semua not yang ada pada masing-masing button pada Keypad itu cukup sesuai dengan frekuensi not yang sudah peneliti tentukan, dimana frekuensi dari not nya berada pada oktaf yang tepat dengan perbedaan yang sangat minimal.

Saran

Peneliti berharap untuk peneliti yang akan mengembangkan rancangan digital piano menggunakan FPGA Board yaitu Nexys A7-100t untuk implementasi digital piano yang lebih variatif dan fitur lebih lengkap, misalnya dapat menyediakan fitur ganti oktaf pada digital piano yang akan dibuat nanti.

Daftar Pustaka

Khairuddin, Asyraf. M. A.(2020). Digital Piano Keyboard Design using FPGA Implementation for Beginner. IOP Conference Series: Materials Science and Engineering.


Shademani, Amir.(Tanpa Tahun). Design of Embedded Systems Advanced CourseEDA385 - FPGA Piano Project Report. Department of Computer Science.


Anonim. (2020, November 29). Digilent Pmod™ Interface Specification. Digilent. 


Pmod Interface. (2022, August 25). Diakses pada 13 Januari, 2023, dari https://en.wikipedia.org/wiki/Pmod_Interface#~:text=Pmod%20interface%20


Anonim. (2019, July 10). Nexys A7™ FPGA Board Reference Manual. Digilent. 


Anonim. (2016, April 8). PmodKYPD™ Reference Manual. Digilent. 

Lampiran

2231552.jpg
2231551.jpg
VIDEO DEMONSTRASI DIGITAL PIANO | DIGITAL SYSTEM
2234296.jpg
  1. Foto alat
  2. Foto tim
  3. Foto Pengambilan data


LINK VIDEO: https://youtu.be/GK503W8-ALs

LINK POSTER: https://drive.google.com/file/d/17ANdNCx2gx_igrQ1SOEIgkvSyH3YSq9u/view?usp=share_link