Anda di halaman 1dari 25

TUGAS TAKE HOME PERANCANGAN SISTEM ELEKTRONIS

8 BIT BARREL SHIFTER (ARITHMETIC)

DISUSUN OLEH :

Muslim Munawar ( H1C010040)

KEMENTRIAN PENDIDIKAN DAN KEBUDAYAAN UNIVERSITAS JENDERAL SOEDIRMAN FAKULTAS SAINS DAN TEKNIK JURUSAN TEKNIK TEKNIK ELEKTRO PURBALINGGA 2012

A. DESKRIPSI 8-BIT BARREL SHIFTER (ARITHMETIC) Sebuah Barrel Shifter adalah sebuah sirkuit kombinasional dengan n data inputs, dan dengan n data outputs, dan sebuah set control yang mengatur antara nilai input dan nilai output. Pada perancangan saya kali ini adalah 8 bit barrel shifter artithmetic, dari penjelasan sebelumnya dapat diartikan bahwa 8 bit barrel shifter adalah sebuah rangkaian kombinasional dengan 8 bit input, dan dengan 8 bit output, dan sebuah operator control yang dapat menggeser data masukan dengan sejumlah posisi sesuai yang di definisikan sebelumnya. Operasi penggeseran ini dapat dilakukan baik ke arah kiri maupun ke arah kanan. yang dibagi jenisnya menjadi rotate (memutar) , logic shift (geser logika) dan arithmetic shift (geser aritmatika). Dan dalam tugas saya ini yang akan dibahas adalah mengenai arithmetic shift. Pada tugas saya ini akan menggeser suatu nilai input sesuai operator gesernya, sedemikian sehingga nilai bit paling kiri diisi nilai bit yang tergeser tsb. Jadi dapat saya artikan sebelumnya bahwa nilai bit ke 8 merupakan hasil penggeseran dari bit ke 1 yang digeser. Sehingga nilainya akan sangat bergantung kepada nilai operator gesernya. Pada hal ini saya menggunakan 4 variabel yang digunakan dalam perancangan saya, variable itu adalah yang pertama variable en atau lebih tepatnya enable, variable ini yang memutuskan apakah suatu data akan dilihat dan diteruskan untuk di process (saat nilai en = 1) atau hanya menahan kondisi sebelumnya (saat nilai en = 0). Dalam pemrograman, pergeseran aritmatika adlah sebuah operator geser yang dikenal juga dengan signed shift (geser bertanda). Pada barrel shifter (arithmetic) dikenal memiliki 2 jenis pergesran, pergeseran itu adalah : 1. Shift left arithmetic (SLA)

Shift left arithmetic adalah salah satu jenis shifter aritmetic yang digunakan untuk menggeser 8 bit ke kiri. Jadi ini akan menggeser ke kiri sebanyak n seuai dengan variabel dari amt (pada program saya) yang nantinya akan di implementasikan

bentuknya dari sebuah biner menjadi sebuah angka yang menunjukan dia harus bergeser sebanyak berapa kali. Dari contoh gambar di atas dapat terlihat akan bergeser sebanyak 1 bit ke kiri, maka nilai bit paling kanan (nilai pada vektor 0)akan diisi oleh 0 dan vektor 1 akan diisi 1 dari vektor 0 begitu seterusnya ke arah kiri hingga vektor ke 7. Untuk implmentasi barrel shifter sendiri dapat menggunakan multiplexer ( MUX), jadu jumlah number yang dibutuhkan adalah : 64-bit 64 * log2(64) = 64 * 6 = 384 buah 32 log2(32) = 32 * 5 = 160 buah 16-bit 16 * log2(16) = 16 * 4 = 64 buah 8-bit 8 * log2(8) = 8 * 3 = 24 buah 2. Shift Right Arithmetic (SRA)

Shift Right Arithmetic adalah salah satu jenis dari shifter aritmetic selain shift left arithmetic. Jadi shift right arithmetic akan menggeser ke kana sebanyak n, dimana nilai n ini di dapat dari variabel amt yang berbentuk biner dan akan di definiskan dari biner tsb menjadi suatu bilangan desimal yang nantinya akan di lakukan penggeseran sesuai nilai amt tsb. Dari gambar diatas adalah penggeseran ke kanan sebanyak 1, maka dapat dilihat bahwa nilai pada bit ke 8 adalah bernilai 0. Untuk jenis perancngan yang saya buat adalah right shifter, namun berbeda dengan penjelasan tersebut, desain yang saya buat adalah dengan bit paling kiri akan diisi dengan bit kanan yang akan di geser. Kurang lebih analoginya seprti dibawah ini : Suatu nilai x1 adalah 00010111, dan dengan variable geser akan digeser sebesar 1, maka

Nilai geser, enable, dan nilai data x1 sangat mepengaruhi output y yang pada hal ini adalah hasil dari penggeseran. Jika dibentuk dalam sebuah block diagram, maka akan menjadi sbb :

X1

en Barrel Shifter arithmetic geser y

clock

Kotak yang ditengah merupaka sebuah IC yang sudah jadi yang bias berupa mux, ataupun rangkaian kombinasional yang lain. Pada sisi kiri berupa port input yang berupa variable geser, x1, enable, dan clock, tapi pada tugas ini saya tidak memasukkan clock kedalam desain

saya. Di dalam port kiri ini variable geser akan mempunyai 3 bit, x1 akan mempunyai 8 bit, dan en berupa 1 bit logic yang hanya berupa nilai 1 dan 0 saja, jika lebih dari 2 keadaan itu ( misalkan 1 0 1) maka takutnya akan menjadi clock, dan jika ditambahkan clock, maka dasar dari clock dan en sendiri menjadi kurang begitu jelas. Dalam proses saya mendesain dan merancang saya belum bias benar benar mendapatkan modul atau referensi yang langsung menuliskan barrel shifter arithmetic, namun umunya rotate dan yang lain, saya menggunakan trial dan eror dengan mencoba setiap kode sumber dan mengubah sesuai keinginan soal tersebut.

Dan saya juga mendesaian ini berdasrkan table kebenaran yang telah saya buat sebelumnya, yaitu (saat en =1):

E n 1 1 1

Ge ser 000 001 010

X1 X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1( 0) X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1( 0) X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1( 0) X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1( 0) X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1( 0) X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1( 0) X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1( 0) X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1( 0)

Y1 X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1( 0) X1(0)X1(7)X1(6)X1(5)X1(4)X1(3)X1(2)X1( 1) X1(1)X1(0)X1(7)X1(6)X1(5)X1(4)X1(3)X1( 2) X1(2)X1(1)X1(0)X1(7)X1(6)X1(5)X1(4)X1( 3) X1(3)X1(2)X1(1)X1(0)X1(7)X1(6)X1(5)X1( 4) X1(4)X1(3)X1(2)X1(1)X1(0)X1(7)X1(6)X1( 5) X1(5)X1(4)X1(3)X1(2)X1(1)X1(0)X1(7)X1( 6) X1(6)X1(5)X1(4)X1(3)X1(2)X1(1)X1(0)X1( 1)

1 1 1 1 1

011 100 101 110 111

Saya hanya menitik bertkan perancngan saat nilai en = 1 saja, karena nilai saat en = 1 data akan diteruskan dan diolah, sedangkan saat en = 0, akan menahan data pada kondisi sebelumnya. Saya asumsikan dalam x1 (input 8 bit) memiliki bit bit:

1. X1(7) merupakan nilai bit ke 8 2. X1(6) merupakan nilai bit ke -7 3. X1(5) merupakan nilai bit ke -6 4. X1(4) merupakan nilai bit ke -5 5. X1(3) merupakan nilai bit ke -4 6. X1(2) merupakan nilai bit ke -3 7. X1(1) merupakan nilai bit ke -2 8. X1(0) merupakan nilai bit ke -1

Jadi saat digeser 1 maka nilai bit ke 8 akan digeser ke bit 7, begitu untuk bit seterusnya, dan nilai bit ke 0 akan digeser ke bit ke 8. Begitu seterusnya untuk saat kondisi geser 1, kondisi geser 2, kondisi geser 3 dst.

B. Source code vhdl library IEEE ; -- membaca semua paket standar dari library IEEE use IEEE.STD_LOGIC_1164.all; -- menggunakan semua bagian dari IEEE STD LOGIC variabel entity arithmetic is -- deklarasi entity dengan nama arithmetic port -- port yang dibutuhkan dan digunakan pada perancangan barrel shifter ini. ( EN : in std_logic; --dekalarasi port yang digunakan yang terdiri atas EN sebagai input dengan tipe std logic X1 : in std_logic_vector (7 downto 0); -- deklarasi port port x1 sebagai port input dengan tipe std_std_vector dengan jumlah 8 bit dari bit 7 sebagai MSB ke bit 0 sebagai LSB geser : in std_logic_vector (2 downto 0);

--deklarasi port geser sebagai port input yang berfungsi menggeser x1 sejauh geser dengan jumlah 3 bit dan bit ke- 2 sebagai MSB dan bit 0 sebagai LSB y : out std_logic_vector (7 downto 0) ); -- deklarasi port y sebagai port input dengan tipe data std_logic_vector dengan jumlah 8 bit dari bit 7 sebagai MSB hingga bit 0 sebagai LSB port y merupakan hasil dari penggeseran X1 terhadap geser end arithmetic ; -- akhir dari deklarasi entity arithmetic architecture arithmetic_arch of arithmetic is --deklarasi architecture yang diberi nama arithmetic_arch yang merupakan architecture dari entity arithmetic Begin --memulai definisi architecture arithmetic : process (EN,x1,geser) -- deklarasi sensitivity list yang berisi parameter EN, x1, dan variabel geser variable arith_result: std_logic_vector (7 downto 0) ; -- mendeklarasikan variabel arith_result yang mempunyai tipe data std_logic dengan 8 bit yaitu dari bit 7 sebagai MSB dan bit 0 sebagai LSB Begin -- syntax yang digunakan untuk memulai porses if (EN='1') then --kondisi logika jika EN = 1 case (geser) is
-- syntax

yang digunakan untuk memilih nilai geser yang sesuai dengan kondisi variabel geser ini di test bench

pendefinisian

when "000" => arith_result := x1 ; --saat geser adalah 000 atau dalam desimal (0) maka akan mempunyai nilai arith_result sama dengan x1 when "001" => arith_result := x1(0) & x1(7 downto 1); -- saat variabel geser adalah 001 atau dalam desiamal (1) maka arith result akan bernilai bit ke 8 akan diisi nilai vektor ke 0 dan bit ke 7 sampai ke 1 akan diisi akan diisi nilai vektor 7 downto 0.

when "010" => arith_result := x1(1) & x1(0) & x1(7 downto 2); -- saat variabel geser adalah 010 atau dalam desiamal (2) maka arith result akan bernilai pada bit ke 8 akan diisi nilai vektor ke 1,bit ke 7 akan diisi nilai vektor ke 0,dan bit ke 6 sampai ke 1 akan diisi akan diisi nilai vektor dari 7 downto 2. when "011" => arith_result := x1(2) & x1(1) & x1(0) & x1(7 downto 3); -- saat variabel geser adalah 011 atau dalam desiamal (3) maka arith result akan bernilai pada bit ke 8 akan diisi nilai vektor ke 2,bit ke 7 akan diisi nilai vektor ke 1,bit ke 6 akan diisi nilai vektor ke 0,dan bit ke 5 sampai ke 1 akan diisi akan diisi nilai vektor dari 7 downto 3. when "100" => arith_result := x1(3) & x1(2) & x1(1) & x1(0) & x1(7 downto 4); -- saat variabel geser adalah 100 atau dalam desiamal (4) maka arith result akan bernilai pada bit ke 8 akan diisi nilai vektor ke 3,bit ke 7 akan diisi nilai vektor ke 2,bit ke 6 akan diisi nilai vektor ke 1,bit ke 5 akan diisi nilai vektor ke 0,dan bit ke 4 sampai ke 1 akan diisi akan diisi nilai vektor dari 7 downto 4. when "101" => arith_result := x1(4) & x1(3) & x1(2) & x1(1) & x1(0) & x1(7 downto 5); -- saat variabel geser adalah 101 atau dalam desiamal (5) maka arith result akan bernilai pada bit ke 8 akan diisi nilai vektor ke 4,bit ke 7 akan diisi nilai vektor ke 3,bit ke 6 akan diisi nilai vektor ke 2,bit ke 5 akan diisi nilai vektor ke 1,bit ke 4 akan diisi nilai vektor ke 0,dan bit ke 3 sampai ke 1 akan diisi akan diisi nilai vektor dari 7 downto 5. when "110" => arith_result := x1(5) & x1(4) & x1(3) & x1(2) & x1(1) & x1(0) & x1(7 downto 6); -- saat variabel geser adalah 110 atau dalam desiamal (6) maka arith result akan bernilai pada bit ke 8 akan diisi nilai vektor ke 5,bit ke 7 akan diisi nilai vektor ke 4,bit ke 6 akan diisi nilai vektor ke 3,bit ke 5 akan diisi nilai vektor ke 2,bit ke 4 akan diisi nilai vektor ke 1,bit ke 3 akan diisi nilai vektor ke 0,dan bit ke 2 sampai ke 1 akan diisi akan diisi nilai vektor dari 7 downto 6. when others => arith_result := x1(6) & x1(5) & x1(4) & x1(3) & x1(2) & x1(1) & x1(0) & x1(7);

-- saat variabel geser adalah 111 atau dalam desiamal (7) maka arith result akan bernilai pada bit ke 8 akan diisi nilai vektor ke 6,bit ke 7 akan diisi nilai vektor ke 5,bit ke 6 akan diisi nilai vektor ke 4,bit ke 5 akan diisi nilai vektor ke 3,bit ke 4 akan diisi nilai vektor ke 2,bit ke 3 akan diisi nilai vektor ke 1,dan bit ke 2 akan diisi nilaii vektor ke 1,nilai bit ke 1 akan diisi nilai vektor dari 7. end case; --syntak untuk mengakhiri fungsi case y <= arith_result; --syntak untuk menginisialisasi nilai variabel y merupakan nilai dari arith_result end if; -- syntak untuk mengakhiri fungsi logika if end process; -- syntak untuk mengakhiri process end arithmetic_arch; -- syntak untuk mengakhiri architecture dengan nama arithmetic_arch

C. penjelasan jalanya program : program dengan nama architecture ini adalah terdiri atas entity dan architecture, entity tersebut dengan nama arithmetic dan architecture dengan nama arithmetci_arch. Pertama kita harus mendefinisakan library apa saja yang digunakan dalam program ini, yaitu library IEEE, dan use IEEE.STD_LOGIC_1164.all, IEEE STD LOGIC adalah library yang digunkan untuk mendefinisikan nilai nilai logic yang terdiri atas 1 dan 0. Lalu setelah model sim memeriksa pendeklarasian library tersebut, maka modelsim akan memeriksa ke dalam entitas yang telah didefiniskan sebelumnya dengan nama entitas arithmetic, lalu modelsim akan memeriksa pendeklarasian masing masing port yang akan digunakan, sebelumnya saya akan merancang sebuah barrel shifter arithmetic dengan 1 inputan yang terdiri atas 8 bit dengan enable yang digunakan untuk mengijinkan data tersebut deibaca atau tidak, dan variabel geser yang digunakan untuk menggeser nilai inputan dengan nama X1, lalu akan ada Y sebagai sebagai output hasil geser dengan jumlah 8 bit, pendefinisainya yaitu : En : input dengan tipe standar logic X1 : input dengan tipe standar logic vektor yang terdiri atas 8 bit dari 7 downto 0, dengan bit 7 adalah MSB dan 0 adalah LSB. GESER : input dengan tipe std_logic_vector yang terdiri atas 3 bit dari 2 downto 0, dengan 2 adalah MSB dan 0 adalah LSB, Y : input dengan tipe std_logic vektor yang terdiri atas 8 bit dari 7 downto 0, dengan 7 adalah MSB dan 0 adalah LSB nya.

Lalu akan diakhiri dengan syntak end arithmetic. Setelah melakukukan pendeklarasian entitas dan port portnya, selanjutnya akan dilakukan pendeklarasian architecture nya, pada hal ini architecture diberi nama arithmetic_arch yang merupakan entitas dari arithmetic ( syntak nya architecture arithmetic_arch of arithmetic is), lalu akan dimulai dengan syntak begin, lalu dengan syntak arithmetic : process(EN,X1,geser) akan dilakukan deklarasi sensitivity list yang berisi parameter EN,X1. Dan variabel geser. Lalu akan dilakukan pendeklarasian variabel arith_result yang beryipe data std_logic dengan 8 bit. Lalu dengan syntak begin akan memulai process nya. Lalu denga fungsi logika if akan digunakan untuk melogika nilai en =1. Kenapa hanaya enabel 1 saja yang dilogikan, ini dikarenakan hanya ketika enabel bernilai 1 yang akan melewatkan data dari x1, geser, ataupun y, dan saat en bernilai 0, apapun kondisi dari x1, y, an geser tidak akan berpengaruh. setelah dilakukan fungsi logika if, maka selanjutnya akan dilakukan syntak untuk memilih nilai geser yang nantinya nilai geser ini akan diinisialisasikan nilainya pada test bench. Sebelum masuk ke pilihan di source code terdapat syntak &, syntak ini digunakan untuk menggabungkan secara beruntun suatu nilai dengan nilai lainya yang dihubungkan dengan tanda &. Misalkan x1(2)

& x1(1) & x1(0) & x1(7 downto 3) ini dapat diartikan bahwa nilai x1(pada vector ke-2) akan digabung (didempetkan) dengan x1(pada vector ke1) dengan x1(pada vector ke 0), dan x1 (pada vector ke 7).

Pilihan 1, yaitu ketika cas bernilai 000, maka akan dilakukan inisialisai arith_result bernilai x1 (tidak ada yang digeser. Pilihan ke 2, yaitu ketika casebernilai 001, maka akn dilakukan inisialisasi arith_result akan bernilai pada bit ke 8 akan bernilai nilai vektor ke 0, dan bit ke 7 sampai bit ke 1 akan bernilai dari nilai vektor 7 downto 1. Pilihan ke 3, yaitu ketika case bernilai 010, maka akan dilaikan inisialisasi arith_result akan bernilai pada bit ke 8 akan bernilai vektor ke 1, bit ke 7 akan bernilai vektor ke 0, dan bit ke 6 sampai bit ke 1 akan bernilai vektor 7 downto 2. Pilihan ke 4, yaitu ketika case bernilai 011, maka akan dilakukan inisialisasi arith_result akan bernilai pada bit ke 8 akan bernilai vektor ke 2, bit ke 7 akan bernilai vektor ke 1, dan bit ke 6 akan bernilai vektor ke 0, dan bit ke 5 hingga bit ke 1 akan bernilai vektor 7 downto 3. Pilihan ke 5, yaitu ketika case bernilai 100, maka akan dilakukan inisialisasi arith_result akan bernilai pada bit ke 8 akan bernilai vektor ke 3, bit ke 7 akan bernilai vektor ke 2, dan bit ke 6 akan bernilai vektor ke 1, dan bit ke 5 akan bernilai vektor ke 0, dan bit ke 4 hingga bit ke 1 akan bernilai vektor 7 downto 4. Pilihan ke 6 yaitu ketika case bernilai 101,maka akan dilakukan inisialisasi arith_result akan bernilai pada bit ke 8 akan bernilai vektor ke 4, bit ke 7 akan bernilai vektor ke 3, dan bit ke 6 akan bernilai vektor ke 2, bit ke 5 akan bernilai ke 1, bit ke 4 akan bernilai vektor ke 0, danbit ke 3 hingga bit ke 1 akan bernilai vektor 7 downto 5. Pilihan ke 7, yaitu ketika case bernilai 110, maka akan dilakukan insialisasi arith_result akan bernilai pada bit ke 8 akan bernilai vektor ke 5,bit ke 7 akan bernilai vektor ke 4, dan bit ke 6 akan

bernilai vektor ke 3, bit ke 5 akan bernilai vektor ke 2, bit ke 4 akan bernilai vektor ke 1, bit ke 3 akan bernilai vektor ke 0, dan bit ke 2 hingga bit ke 1 akan bernilai vektor 7 downto 6 Pilihan yang lain yaitu saat case bernilai 111, maka akan dilakukan inisialisasi arith_result akan bernilai pada bit ke 8 akan bernilai vektor ke 6, bit ke 7 akan bernilai vektor ke 5, bit ke 6 akan bernilai vektor ke 4, bit ke 5 akan bernilai vektor ke 3, bit ke 4 akan bernilai vektor ke 2, bit ke 3 akan bernili vektor ke 1, bit ke 2 akan bernilai vektor ke 0, bit ke 1 akan bernilai vektor ke 7. Setelah dilakukan case akan diakhiri dengan syntak end case, setelah itu dengan syntak y <=

arith_result; akan dilakukan inisialisasi nilai y diisi dengan nilai dari arith_result. Lalu akan diakhiri dengan end if, dan end process, dan end arithmetic_arch.

D. TEST BENCH LIBRARY ieee;

--Membaca Paket Standart Dari Library IEEE


use IEEE.STD_LOGIC_1164.ALL;

--Memasukan Semua Bagian Dari IEEE STD_LOGIC Variable


use IEEE.STD_LOGIC_ARITH.ALL;

--Memasukan Semua Bagian Dari IEEE STD_LOGIC operasi aritmatika


use IEEE.STD_LOGIC_SIGNED.ALL;

--Memasukan Semua Bagian Dari IEEE STD_LOGIC Variable bertanda


entity arithmetic_tb is

--deklarasi entity tetapi kosong


end entity arithmetic_tb;

--akhir dari entity


architecture bench of arithmetic_tb is

--definisi architecture yang diberi nama direct_arch


signal EN : std_logic;

--deklarasi variabel EN bertipe std_logic sebagai signal


signal x1 : std_logic_vector (7 downto 0);

--deklarasi variabel a bertipe std_logic_vector sebanyak 8 bit sebagai signal


signal geser : std_logic_vector (2 downto 0);

--deklarasi variabel amt bertipe std_logic_vector sebanyak 3 bit sebagai signal


signal y : std_logic_vector (7 downto 0);

--deklarasi variabel y bertipe std_logic_vector sebagai signal


Begin

--memulai definisi architecture


block1 : entity work.arithmetic --memanggil entitas arithmetic pada work yang akan diberi nama dengan blok1.

port map

--Pemetaan setiap port yang digunakan


(EN => EN,

--port mapping EN
x1 => x1,

--port mapping x1
geser => geser,

--port mapping geser


y => y);

--port mapping y
arithmetic: process is

--process yang di simbolkan dengan nama arithmetic


begin

--memulai proses

EN <= '1',

--inisialisai variabel EN bernilai 1


'0' after 60 ns;

--inisialisasi bernilai 0 setelah 10 ns


x1 <= "00010111", --inisialisasi variabel a bernilai 00010111 "00000011" after 30 ns,

--inisialisasi bernilai 00000011 setelah 30 ns


"11001100" after 50 ns; --inisialisasi bernilai 00000100 setelah 50 ns geser <= "000",

--inisialisai variabel amt bernilai 000


"001" after 10 ns,

--inisialisasi bernilai 001 setelah 10 ns


"010" after 20 ns,

--inisialisasi bernilai 010 setelah 20 ns


"011" after 30 ns,

--inisialisasi bernilai 011 setelah 30 ns


"100" after 40 ns,

--inisialisasi bernilai 100 setelah 40 ns


"101" after 50 ns,

--inisialisasi bernilai 101 setelah 50 ns


"110" after 60 ns,

--inisialisasi bernilai 110 setelah 60 ns


"001" after 70 ns,

--inisialisasi bernilai 001 setelah 70 ns


"010" after 80 ns,

--inisialisasi bernilai 010 setelah 80 ns

"011" after 90 ns,

--inisialisasi bernilai 011 setelah 90 ns


"100" after 100 ns,

--inisialisasi bernilai 100 setelah 100 ns


"101" after 110 ns,

--inisialisasi bernilai 101 setelah 110 ns


"110" after 120 ns;

--inisialisasi bernilai 110 setelah 120 ns

wait;

--proses tunggu kompilasi


end process;

--akhir proses

end architecture bench; --akhir dari architecture

E. penjelasan jalanya program pada test_bench Pertama kita harus mendefinisakan library apa saja yang digunakan dalam program ini, yaitu library IEEE, dan use IEEE.STD_LOGIC_1164.all, IEEE STD LOGIC adalah library yang digunkan untuk mendefinisikan nilai nilai logic yang terdiri atas 1 dan 0. Lalu setelah model sim memeriksa pendeklarasian library tersebut, akan dilakukan pendeklarasian entitas dengan nama arithmetic_tb dengan tidak memasukkan pendeklarasian masing masing portnya. Lalu setelah itu dengan syntak end entity arithmetic_tb maka akan mengakhiri pendeklarasian entitas dari arithmetic_tb. Setelah dilakukan pendeklarasian entitasnya maka akan dilakukan pendeklarasian architecture nya, yaitu dengan cara architecture bench of arithmetic_tb is dan di dalam architecture ini akan dilakukan juga pendeklarasian sinyal, yaitu yang pertama adalah sinyal EN yang bertipe std_logic, lalu sinyal x1 yang bertipe std_logic_vector (7 downto 0), lalu sinyal geser dengan tipe std_logic vector (2 downto 0), lalu sinyal y bertipe std_logic_vector (7 downto 0),lalu dengan syntak begin maka akan memulai pendefinisian architecture. Lalu akan dilakukan port map, yaitu semacam inisialisasi sinyal ke portnya, yaitu senyal EN akan diinisialisasikan pada port EN, lalu sinyal X1 akan diinisialisasikan pada port X1, lalu sinyal geser akan diinisialisasikan pada port geser, lalu sinyal y akan diinisialisasikan pada port y. Setelah itu akan dimulai processnya dengan nama process arithmetic, dan akan dimulai ketika EN bernilai 1, dan akan bernilai 0 setelah 60 ns, lalu aka nada inisialisasi x1 yaitu "00010111", "00000011" after 30 ns dan "00000011" after 30 ns, setalah dilakukan inisialisasi x1 maka selanjutnya adalah inisialisasi geser yang diisi dengan 000, lalu 001 setelah 10 ns, 010 setelah 20 ns. Lalu 011 setelah 30 ns, lalu 100 setelah 40 ns, lalu 101 setelah 50 ns, lalu 110 setelah 60 ns, lalu 001 setelah 70

ns, lalu 010 setelah 80ns, lalu 011 setelah 90 ns, lalu 100 setelah 100 ns, lalu 101 setelah 110 ns, lalu 110 setelah 120 ns, lalu ala terdapat syntak wait yang digunakan untuk prosess tunggu kompilasi, lalu aka nada end process yang digunakan untuk mengakhiri process, dan terdapat end architecture yang digunakan untuk mengakhiri tst bench architecture.

setelah selesai melakukan kompilasi maka untuk mendapatkan simulasi wavenya maka harus melakukan simulasi, dengan cara mengklik menu bar simulate lalu pilih start simulation, pilih work dan pilih arithmetic_tb. Setelah itu akan muncul list semua port yang telah didefiniskan sebelumnya. Lalu klik kanan dan pilih add to wave all item in region. Lalu setelah di run akan menjadi sebagai berikut :

Tampilan diatas merupakan tampilan dari wave hasil simulasi source code yang telah dibuat, pada gambar sisi kiri adalah port yang saya gunakan yaitu port enable, port x1, port geser, port y. sebagai pembeda pada port en saya menggunakan warna putih, port x1 saya menggunakan warna merah, port geser saya menggunakan warna hijau, dan port y saya menggunakan warna biru. Untuk port en terdapat 2 keadaan yaitu 1 dan 0, saya hanya membuat 2 keadaan saja, karena jika lebih dari 2 keadaan jatuhnya jadi clock, lalu port x1 saya berikan 3 keadaan yaitu 00010111, lalu setelah 30ns akan diubah menjadi 00000011 lalu setelah 50ns akan berubah menjadi 11001100. Dan untuk port geser saya mendefiniskan 12 keadaan, yaitu saat keadaan 000 (geser 0), 001 (geser 1), 010 (geser 2), 011(geser 3), 100(geser 4), 101(geser 5), 110(geser 6), 001(geser 1), 011 (geser 3), 100 (geser 4), 101 (geser 5). Lalu untuk port y adalah output, hasil dari penggeseran x1 terhadap geser, 1. Untuk nilai pertama (00010111) adalah hasil penggeseran x1 ketika 00010111 terhadap varabel geser saat 000. Saat variabel geser adalah 0, maka tidak ada nilai x1 yang digeser sehingga hasilnya tetap 00010111.

2. Untuk nilai kedua, yaitu (10001011) adalah hasil penggeseran x1 ketika 00010111 terhadap variabel geser saat 001. Saat variabel geser bernilai 001, maka akan dilakukan penggeseran ke kanan sebanyak 1 kali. Dan nilai bit paling kiri (bit ke 8) akan diisi nilai yang digeser ke kanan.Sehingga :

3. Untuk nilai ketiga, yaitu (11000101) adalah hasil penggeseran x1 ketika 00010111 terhadap variabel geser saat 010. Saat variabel geser bernilai 010, maka akan dilakukan penggeseran ke kanan sebanyak 2 kali. Dan 2 bit terakhir akan terus digeser ke kana, sehingga hilang.Sehingga : 0 0 0 1 0 1 1 1

1 0 0 0 1 0 1 4. Untuk nilai keempat, yaitu (01100000) adalah hasil penggeseran x1 ketika 00000011 terhadap variabel geser saat 011. Saat variabel geser bernilai 011, maka akan dilakukan penggeseran ke kanan sebanyak 3 kali. Dan 3 bit terakhir akan terus digeser ke kana, sehingga hilang.Sehingga : 0 0 0 0 0 1 1

5. Untuk nilai kelima, yaitu (00110000) adalah hasil penggeseran x1 ketika 00000011 terhadap variabel geser saat 100. Saat variabel geser bernilai 100, maka akan dilakukan penggeseran ke kanan sebanyak 4 kali. Dan 4 bit terakhir akan terus digeser ke kanan, sehingga hilang.Sehingga :

6. Untuk nilai kelima, yaitu (00011000) adalah hasil penggeseran x1 ketika 00000011 terhadap variabel geser saat 101. Saat variabel geser bernilai 101, maka akan dilakukan penggeseran ke kanan sebanyak 4 kali. Dan 4 bit terakhir akan terus digeser ke kanan, sehingga hilang.Sehingga : 0 0 0 0 0 0 1 1

7. Untuk yang ke tujuh enable mempunyai nila 0 sehingga apapun data di x1, dan geser maka tidak akan terpengaruh atau dapat dikatakan akan mempertahankan kondisi sebelumnya yaitu 00011000

F. analisi menggunakan quartus II langkah pertama yaitu dengan membuat file project baru yaitu dengan mengklik file new, lalu akan muncul lembar kerja pilihanya lalu pilih saja new project, lalu ketikan nama rpoject kita, dan klik next hingga akhirnya klik finish. Lalu untuk membuat flow summary kita harus membuat lembar kerja untuk vhdl nya yaitu dengan menekan file new lalu pilih vhdl file setelah membuat lembar kerja vhdl maka langkah selanjutnya mengcopy source code pada model sim dengan nama arithmatic tsb ke quartus, lalu setalh itu melakukan compilasi dengan menekan start compilation diatas lembar kerja tsb. Menunggu hingga kompilasi sempurna dan sukses, jika ada eror maka kompilasi akan gagal namun jika ada warning maka kompilasi masih dapat dijalankan. Setelah kompilasi berhasil maka akan muncul gambar flow summary sebagai berikut :

Pada flow summary tsb terdapat rincian sabagai berikut : 1. Flow status Flow satus merupakan rincian dari kompilasi tersebut yang berupa sukses atau tidak, hari, tanggal, jam dan bulan. Pada flow status di atas adalah sucessful dengan hari menkompilasi pada hari rabu, tanggal 15 november 2012 pada jam 22:48:33 2. Quartus II version Ini merupakan penjelasan versi berapa software wuartus saya gunakan, pada hal ini saya menggunakan quartus versi 9.0 Build 132 25/02/2009 SJ Web Edition. 3. Revision Name Ini merupakan rincian nama yang saya gunakan, pada hal ini saya menggunakan nama arithmetic, yang sesuai dengan nama entity pada vhdl saya, karena memang pada quartus nama file harus sesuai dengan nama entity yang digunakan. 4. Top level entity Sesuai penjelasan sebelumnya nama entity yang saya gunakan adalah arithmetic 5. Family Menggunakan stratic II, nanti juga dapat dipilih menggunaka family apa yang dapat disesuaikan dengan kebutuhan. 6. Met timing requirements Disini terdapat enble sehingga yes untuk mer timing requirements.

7. Logic utilization Disini diterangkan seberapa banyak gerbang logic yang dibutuhkan untun quartus membuatkan desain sesuai source code vhdl yang saya kompilasi. Disini terdapat combinational ALUTs, di bagian ini ternyata quartus mendesainkan saya dengan jumlah Combinational ALUTs sebanyak 26 dari 12.480 yang disediakan atau sekitar < 1 % dari total yang disediakan oleh quartus sendiri. Dan tidak menggunakan dedicated logic registers dari total 12.480 dedicated logic registers yang disediakan. 8. Total register Karena saya tidak menggunakan register maka quartus pun mendesainkan saya tanpa register sehingga total register sebanyak 0. 9. Total pins Disini akan dijelaskan total pins atau seberapa banyak pins yang saya gunakan pada hal ini didapat total pins yang saya gunakan sebanyak 20 pins dari total 343 pins yang disediakan atau sebesar 6 %. Pins yang saya gunakan tersebut adalah : x1 (sebanayak 8 pin), enable (sebanyak 1 pin), dan geser (sebanyak 3 pin) itu bagian input, bagian outpunya terdapat y (sebanyak 8 pin) jika ditotal akan mempunyai sebanyak 20 pins. 10. Total virtual pins. Disini tidak menggunakan virtual pins sehingga total virtual pins adalah 0. 11. Total block memory bits Disini saya merancang rangkaian kombinasional, sehingga pada rangkaian kombinasional tidak terdapat memory sehingga total block memory adalah 0 dari total 419.328 total block memory yang disediakan. 12. DSP block 9-bit elements. Pada desain saya hanya menggunakan desai 8 bits sehingga total DSP blick 9-bit elements yang saya gunakan sebanyak 0 dari total 96 DSP block 9-bit elements yang disediakan. 13. Total PLLs Sebanyak 0 dari total 6 yang disediakan. 14. Total DLLs Sebanyak 0 dari total 2 yang disediakan. 15. Device EP2S15F484C3 16. Timing Models

Final

G. Wave form Wave form adalah semacam test bench yang digunakan untuk menganalisis sinyal keluaran. Cara membuat wave form yaitu dengan mengklik file new-pilih vector waveform file, setelah muncul lembar kerja waveform filenya langkah selanjutnya adalah dengan klik kanan pada lembar kerja tsb lalu pilih insert node bus,klik node finder,klik list, lalu klik copy all to selected node list. Lalu setelah di start simulation maka akan muncul hasilnya sebagai berikut :

Saya hanya mengambil range samapai 30 ns saja supaya dapat di screen shot. Pada interval 0 sampai 10 ns, saya set pada gesert sebeser 100 (4), lalu saya juga menset nilai x1 sebesar 00001111, lalu akan degeser sejauh 4 ke kanan, maka hasilnya menjadi 11110000, untuk yang kedua saat interval waktu 10ns 20 ns, saya menset nilai geser sebesar 110 (6)lalu saya juga menset nilai x1 sebesesar 00001000, lalu akan mencul nilai y (output hasil penggeseran) sebesar 00100000, kemudian pada interval 20 ns 30 ns, saya menset nilai geser sebesar 011 ( 3), dan saya menset nilai x1 sebesar 00000011, lalu akan muncul nilai y (output hasil

penggeseran) sebesar 01100000. Lalu sisa intervalnya saya set dengan enable 0 sehingga data akan ditahan pada kondisi interval sebelumnya.

H. Kesimpulan I.

Program Barrel Shifter Arithmetic adalah sebuah sirkuit yang dapat menggeser data masukan dengan sejumlah posisi. Ketika dilakukan pergeseran ke kanan sebanyak n, maka nilai bit paling kiri akan sama dengan nilai bit yang digeser . Pada Program ini terdapat sensitivity list dimana sensitivity list ini sangat berpengaruh dan menentukan dalam berjalannya program. Variabel yang dianggap paling berpengaruh yaitu EN. Variabel EN berada pada posisi pertama dalam penentuan jalannya program. Jika EN = 0 berarti dalam keadaan off dimana program tidak dijalankan atau dalam arti outputnya sesuai dengan keadaan sebelumnya. Tetapi jika EN = 1 berarti dalam keadaan on dimana program akan dijalankan dan akan melakukan penyesuaian dalam penentuan outputnya.

J.

Referensi

http://www.scribd.com/doc/110582575/Barrel-Shifter

http://www.scribd.com/doc/93396915/Barrel-Shifter

http://www.google.com/cse?cx=016703912148653225111%3Aosmuvcrimei&cof=FORID %3A10&ie=UTF8&q=filetype %3Apdf+8+bit+barrel+shifter&qfront=8+bit+barrel+shifter&sa=Search&algorithm=filetype %3Apdf+&siteurl=pdfsearchengine.org%2F&ref=&ss=&ad=n9&num=10&rurl=http%3A %2F%2Fwww.pdfsearchengine.org%2Fresults.html%3Fcx %3D016703912148653225111%253Aosmuvcrimei%26cof%3DFORID%253A10%26ie %3DUTF-8%26q%3Dfiletype%253Apdf%2B8%2Bbit%2Bbarrel%2Bshifter%26qfront %3D8%2Bbit%2Bbarrel%2Bshifter%26sa%3DSearch%26algorithm%3Dfiletype%253Apdf %2B%26siteurl%3Dpdfsearchengine.org%252F%26ref%3D%26ss %3D#gsc.tab=0&gsc.q=filetype%3Apdf%208%20bit%20barrel%20shifter&gsc.page=1

Anda mungkin juga menyukai