tugas take home

30
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

Upload: muslim-munawar

Post on 05-Aug-2015

67 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tugas Take Home

TUGAS TAKE HOME

PERANCANGAN SISTEM ELEKTRONIS

“8 BIT BARREL SHIFTER (ARITHMETIC)“

DISUSUN OLEH :

Muslim Munawar ( H1C010040)

KEMENTRIAN PENDIDIKAN DAN KEBUDAYAANUNIVERSITAS JENDERAL SOEDIRMAN

FAKULTAS SAINS DAN TEKNIKJURUSAN TEKNIKTEKNIK ELEKTRO

PURBALINGGA2012

Page 2: Tugas Take Home

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

Page 3: Tugas Take Home

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 buah32 log2(32) = 32 * 5 = 160 buah16-bit — 16 * log2(16) = 16 * 4 = 64 buah8-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

0 0 0 1 0 1 1 1

Page 4: Tugas Take Home

1 0 0 1 0 0 1 1

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

gesery

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

Barrel Shifter arithmetic

Page 5: Tugas Take Home

En

Geser

X1 Y1

1 000 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)

1 001 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)

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

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

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

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

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

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

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

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

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

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

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

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

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 – 82. X1(6) merupakan nilai bit ke -73. X1(5) merupakan nilai bit ke -64. X1(4) merupakan nilai bit ke -55. X1(3) merupakan nilai bit ke -46. X1(2) merupakan nilai bit ke -37. X1(1) merupakan nilai bit ke -28. 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.

Page 6: Tugas Take Home

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) ;

Page 7: Tugas Take Home

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

pendefinisian variabel geser ini di test bench

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.

Page 8: Tugas Take Home

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

Page 9: Tugas Take Home

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).

Page 10: Tugas Take Home

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.

Page 11: Tugas Take Home

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.

Page 12: Tugas Take Home

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

Page 13: Tugas Take Home

"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

Page 14: Tugas Take Home

wait;

--proses tunggu kompilasi

end process;

--akhir proses

end architecture bench;

--akhir dari architecture

Page 15: Tugas Take Home

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 :

Page 16: Tugas Take Home

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 :

0 0 0 1 0 1 1 1

1 0 0 0 1 0 1 1

Page 17: Tugas Take Home

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 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 0 1 1

0 1 1 0 0 0 0 0

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 :

0 0 0 0 0 0 1 1

0 0 1 1 0 0 0 0

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

Page 18: Tugas Take Home

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

0 0 0 1 1 0 0 0

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

Page 19: Tugas Take Home

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 versionIni 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 NameIni 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 entitySesuai penjelasan sebelumnya nama entity yang saya gunakan adalah arithmetic

Page 20: Tugas Take Home

5. FamilyMenggunakan stratic II, nanti juga dapat dipilih menggunaka family apa yang dapat disesuaikan dengan kebutuhan.

6. Met timing requirementsDisini terdapat enble sehingga yes untuk mer timing requirements.

7. Logic utilizationDisini 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 registerKarena saya tidak menggunakan register maka quartus pun mendesainkan saya tanpa register sehingga total register sebanyak 0.

9. Total pinsDisini 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 bitsDisini 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 PLLsSebanyak 0 dari total 6 yang disediakan.

14. Total DLLsSebanyak 0 dari total 2 yang disediakan.

15. Device EP2S15F484C3

16. Timing ModelsFinal

G. Wave formWave form adalah semacam test bench yang digunakan untuk menganalisis sinyal keluaran.

Page 21: Tugas Take Home

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

Page 22: Tugas Take Home

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

Page 23: Tugas Take Home

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