14S15046
NIM : _____________
NAMA Kumatetsu76
: _____________________________
PETUNJUK
Sebelum mengerjakan soal UTS, Anda diharapkan untuk membaca
petunjuk pengerjaan berikut ini:
1. Lembar soal terbagi atas lima bagian, yaitu bagian A, B, C, D, dan E.
Bagian A, B, C, D, E wajib untuk Anda jawab dengan nilai maksimal: 105.
2. Baca petunjuk pengerjaan masing-masing bagian dengan seksama.
3. Soal bagian B, C, dan D dijawab pada tempat yang telah disediakan pada
kertas soal halaman 10, soal bagian A dan E dijawab langsung pada
kotak yang tersedia pada soal.
4. Tulislah nama, NIM dan kelas Anda di tempat yang telah disediakan pada
lembar soal dan lembar jawaban.
5. Ujian bersifat closed book.
Tulislah jawaban anda pada tempat yang disediakan pada halaman 10.
1. F Logic cell dapat diconfigurasi untuk menyediakan interkoneksi antar logic cell dan
programmable switch dapat dikostumisasi untuk melakukan fungsi sederhana.
2. F Kamera digital merupakan embedded system yamg tidak begitu membutuhkan pemrosesan
gambar khusus dan kemampuan kompresi.
3. F Kebanyak embedded system harus memenuhi constrain real-time, artinya respon sistem tidak
boleh datang terlambat tetapi boleh datang lebih dini dari yang ditentukan.
4. T Embedded system biasanya terhubung ke physical environment (lingkunga fisik) melalui
sensor dan aktuator.
5. T Salah satu perbedaan embedded system (ES) dengan General Purpose Computing (GPC)
adalah EC tidak dapat diprogram oleh end user sedangkan GPC dapat diprogram oleh end user.
6. T Implementasi ES dengan FPGA memberikan performance power effeciency yang lebih baik
dibandingkan microcontroller atau DSPs, namun microcontroller atau DSPs memberikan
fleksibilitas yang lebih baik dibandingkan FPGA.
7. T VHDL adalah hardware description language yang dapat digunakan untuk mendefinisikan
fungsionalitas FPGA.
8. T Simulasi digunakan untuk menguji fungsionalitas desain Anda sebelum
mengimplementasikannya perangkat keras.
9. T Kode VHDL dibagi menjadi tiga bagian: deklarasi library, deklarasi entity, dan
architecture body
10. F vSemua VHDL proses (process) pada architecture akan aktif sepanjang waktu ketika
architecture tersebut aktif.
11. T Semua signal yang dideklarasikan pada entity akan visible di semua architectures yang
ditetapkan untuk entity ini.
12. F Tipe data std_logic VHDL hanya mempunyai dua nilai ‘1’ dan ‘0’.
13. T Embedded system berbasis SoPC memberikan dimensi baru dari segi fleksibilitas karena baik
hardware dan software dapat kostumisasi untuk memenuhi kebutuhan khusus.
14. F Software/hardware partition adalah tahapan untuk menentukan tugas-tugas apa yang
diimplementasikan sebagai hardware dan software. Tugas dengan kompleksitas yang tinggi
tetapi tidak membutuhkan constrain waktu yang tinggi sebaiknya diimplementasikan sebagai
hardware.
15. F NIOS II adalah hard processor core yang disediakan oleh vendor FPGA Altera.
16. T Kebanyakan FPGA menyediakan embedded memori on-chip, ukuran memori ini tergantung
pada kepadatan perangkat FPGA yang digunakan.
17. F NIOS II processor mendukung cache dan virtual memory, virtual memory ini dapat
diimplementasikan hanya dengan System Operasi tanpa menggunakan memory management
unit.
18. T Nios II processor menggunakan metode memory-mapped I/O untuk melakukan input dan
output antara prosesor dan perangkat peripheral.
19. T PIO (parallel input/output) core menyediakan memory-mapped interface antara port Avalon
interconnect dan general-purpose I/O port.
20. F HAL (hardware abstraction layer) mendefinisikan basic routines untuk berinteraksi dengan
perangkat I/O.
Components All the required components are It requires RAM, ROM and
needed sufficiently available on chip itself. No external storage. Almost
external components are needed unless most of the FPGA boards
for specific requirements. come up with these
components in order to
have rapid prototype
developments.
2. [10] Saat merancang sistem komputer, kita harus mempertimbangkan berbagai factor seperti
cost, general computation speed, special computation need, real-time constraint, reliability,
power consumption. Gambarkan radar chart untuk sistem berikut (a) microwave oven dan (b)
vehicle ESC system dan berikan penjelasan untuk kedua chart tersebut.
Jawab:
4. [Total 25] Tuliskan VHDL untuk mengimplementasikan rangkaian four-bit ripple-carry adder
seperti gambar berikut.
Multiplexer 1 bit 2 to 1
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux2to1 IS
PORT(
x,y,s : IN STD_LOGIC;
m : OUT STD_LOGIC
);
END mux2to1;
b. [10] Tuliskan VHDL entity untuk mengimplementasikan full adder subcircuit yamg
menginstansiasi satu buah 2-to1 multiplexer
Full adder subcircuit
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY fadder IS
PORT(
a,b,ci : IN STD_LOGIC;
s, co : OUT STD_LOGIC
);
END fadder;
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY bit4fadder IS
PORT(
a4, b4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
cin : IN STD_LOGIC;
s4 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
cout : OUT STD_LOGIC
);
END bit4fadder;
5. [Total 25] Diketahui sebuah rangkaian division dengan entity seperti gambar berikut akan
digunakan sebagai accelerator untuk mempercepat operasi pembagian. Rangkaian pembagi
memiliki dua port data masukan (dvnd dan dvsr), dua port data output (quo dan rmd), satu
sinyal kontrol (start), dan dua sinyal status (ready dan done_tick). Sinyal ready bernilai 1
ketika rangkaian siap untuk mengambil input data baru. Rangkaian ini akan diintegrasikan
dengan system NIOS II menggunakan custom I/O peripheral dengan PIO cores.
a. [7] Jika lebar data adalah 32 bit, tuliskan instansiasi modul PIO yang diperlukan untuk
mengintegrasikan rangkaian pembagi tersebut. Tuliskan pada table berikut :
Nama Modul Lebar data Direction
dvnd 32-bit output-only
dvsr 32-bit output-only
start 1-bit output-only
quo 32-bit input-only
b. [10] Jika diketahui contoh VHDL untuk deklarasi sistem NIOS dari Qsys seperti
dibawah ini, tuliskan top-level HDL file untuk menginstansiasi nios system dan
rangkaian division, gunakan internal signal untuk menghubungkan rangkaian division
dan Nios II processor.
component nios_system is
port (
clk_clk : in std_logic := 'X'; -- clk
reset_reset_n : in std_logic := 'X'; -- reset_n
switch_export : in std_logic_vector(9 downto 0) := (others => 'X'); -- export
ledg_export : out std_logic_vector(7 downto 0); -- export
ledr_export : out std_logic_vector(9 downto 0); -- export
sseg_export : out std_logic_vector(31 downto 0); -- export
btn_export : in std_logic_vector(3 downto 0) := (others => 'X'); -- export
done_tick_external_connection_export : in std_logic := 'X'; -- export
ready_external_connection_export : in std_logic := 'X'; -- export
rmd_external_connection_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export
quo_external_connection_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export
start_external_connection_export : out std_logic; -- export
dvsr_external_connection_export : out std_logic_vector(31 downto 0); -- export
dvnd_external_connection_export : out std_logic_vector(31 downto 0) -- export
);
end component nios_system;
u0 : component nios_system
port map (
clk_clk => CONNECTED_TO_clk_clk, -- clk.clk
reset_reset_n => CONNECTED_TO_reset_reset_n, -- reset.reset_n
switch_export => CONNECTED_TO_switch_export, -- switch.export
ledg_export => CONNECTED_TO_ledg_export, -- ledg.export
ledr_export => CONNECTED_TO_ledr_export, -- ledr.export
sseg_export => CONNECTED_TO_sseg_export, -- sseg.export
btn_export => CONNECTED_TO_btn_export, -- btn.export
done_tick_external_connection_export => CONNECTED_TO_done_tick_external_connection_export, -- done_tick_external_connection.export
ready_external_connection_export => CONNECTED_TO_ready_external_connection_export, -- ready_external_connection.export
rmd_external_connection_export => CONNECTED_TO_rmd_external_connection_export, -- rmd_external_connection.export
quo_external_connection_export => CONNECTED_TO_quo_external_connection_export, -- quo_external_connection.export
start_external_connection_export => CONNECTED_TO_start_external_connection_export, -- start_external_connection.export
dvsr_external_connection_export => CONNECTED_TO_dvsr_external_connection_export, -- dvsr_external_connection.export
dvnd_external_connection_export => CONNECTED_TO_dvnd_external_connection_export -- dvnd_external_connection.export
);
Jawab:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY nios_divl_top IS
PORT (
CLOCK_50 : IN STD_LOGIC;
KEY : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
SW : IN STD_LOGIC_VECTOR (9 DOWNTO 0);
LEDG : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
LEDR : OUT STD_LOGIC_VECTOR (9 DOWNTO 0);
HEX0, HEX1,HEX2,HEX3 : OUT STD_LOGIC_VECTOR (6 DOWNTO 0)
);
END nios_divl_top;
COMPONENT division
generic (
W : integer:=8;
CBIT: integer:=4 -- CBIT=log2(W)+l
);
port(
clk, reset : in std_logic;
start : in std_logic;
dvsr, dvnd: in std_logic_vector(W-1 downto 0);
ready, done_tick: out std_logic;
quo, rmd: out std_logic_vector(W-1 downto 0)
);
END COMPONENT;
BEGIN
-- instantiate processor
u0 : component nios_system
port map (
clk_clk => CLOCK_50, -- clk.clk
reset_reset_n => KEY(0), -- reset.reset_n
switch_export => SW(9 DOWNTO 0), -- switch.export
ledg_export => LEDG(7 DOWNTO 0), -- ledg.export
ledr_export => LEDR(9 DOWNTO 0), -- ledr.export
sseg_export => sseg4, -- sseg.export
btn_export => KEY(3 DOWNTO 0), -- btn.export
done_tick_external_connection_export => done_tick, -- done_tick_external_connection.export
ready_external_connection_export => ready, -- ready_external_connection.export
rmd_external_connection_export => rmd, -- rmd_external_connection.export
quo_external_connection_export => quo, -- quo_external_connection.export
start_external_connection_export => start, -- start_external_connection.export
dvsr_external_connection_export => dvsr, -- dvsr_external_connection.export
dvnd_external_connection_export => dvnd -- dvnd_external_connection.export
);
c. [8] Berikut adalah main program yang digunakan untuk mengakses dan berkomunikasi
dengan peripheral. Lengkapi listing program dibawah ini, Gunakan fungsi read dan
write dari Altera io.h untuk mengirim dan me
int main()
{
while (1){
printf("Perform division a / b = q remainder r\n");
printf("Enter a: " );
scanf ("%d " , &a);
scanf ("%d" , &b);
printf("Start . . . \ n " ) ;
// generate a start pulse
IOWR(START_BASE, 0, 1);
// wait for completion
while (1) {
done = IORD(DONE_TICK_BASE , 0) & 0x00000001;
if (done== 1)
break ;
}
// clear done-tick register
IOWR(DONE_TICK_BASE , 0, 1);
// retrieve results from division accelerator
q = IORD(QUO_BASE,0);
r = IORD(RMD_BASE,0);
printf (" Hardware : %u / %u = %u remainder %u\n" , a, b, q, r) ;
/* compare results with built—in C operators */
printf (" Software : %u / %u = %u remainder %u\n\n\n" , a, b, a/b, a%b) ;
return 0;
}
Jawaban – Bagian D
1.