Senin, 30 Oktober 2017

Pembahasan beberapa program dalam verilog

Encoder - Using if-else Statement
//-----------------------------------------------------
  2 // Design Name : encoder_using_if
  3 // File Name   : encoder_using_if.v
  4 // Function    : Encoder using If
  5 // Coder       : Deepak Kumar Tala
  6 //-----------------------------------------------------
Dari gambar di atas dia hanya menandakan bahwa itu hanya sebuah komentar ,karena menggunakan symbol “//”
module encoder_using_if(
  8 binary_out , //  4 bit binary output
  9 encoder_in , //  16-bit input
 10 enable       //  Enable for the encoder
 11 ); 
 12 //-----------Output Ports---------------
 13 output [3:0] binary_out  ;
 14 //-----------Input Ports---------------
 15 input  enable ; 
 16 input [15:0] encoder_in ;
Pada gambar diatas menunjukan bahwa encoder_using_if sebagai judul module,binary_out sebagai variable 4 bit biner output ,variable encoder_in sebagai 16 bit input,enable yaitu sebagai variable untuk program encoder.
Output [3:0] binary_out; sebagai output dari suatu port
Input enable ;
Input [15:0]encoder_in; untuk mendeklarasikan bahwa dia sebagai port input
//------------Internal Variables--------
 18 reg [3:0] binary_out ;

Reg [3:0] binary out; sebagai register pada variable binary_out
always @ (enable or encoder_in):untuk mendeklarasikan bahwa setiap pemrosesan selau menggunakan gerbang logika OR

begin 
 22    binary_out = 0; 
 23    if (enable) begin
 24      if (encoder_in == 16'h0002) begin
 25       binary_out = 1;
 26      end  if (encoder_in == 16'h0004) begin 
 27       binary_out = 2; 
 28      end  if (encoder_in == 16'h0008) begin 
 29       binary_out = 3; 
 30      end  if (encoder_in == 16'h0010) begin 
 31       binary_out = 4; 
 32      end  if (encoder_in == 16'h0020) begin 
 33       binary_out = 5; 
 34      end  if (encoder_in == 16'h0040) begin 
 35       binary_out = 6; 
 36      end  if (encoder_in == 16'h0080) begin 
 37       binary_out = 7; 
 38      end  if (encoder_in == 16'h0100) begin 
 39       binary_out = 8; 
 40      end  if (encoder_in == 16'h0200) begin 
 41       binary_out = 9; 
 42      end if (encoder_in == 16'h0400) begin 
 43       binary_out = 10; 
 44      end  if (encoder_in == 16'h0800) begin 
 45       binary_out = 11; 
 46      end  if (encoder_in == 16'h1000) begin
 47       binary_out = 12; 
 48      end  if (encoder_in == 16'h2000) begin 
 49       binary_out = 13;
 50      end  if (encoder_in == 16'h4000) begin 
 51       binary_out = 14; 
 52      end if (encoder_in == 16'h8000) begin 
 53       binary_out = 15; 
 54      end
 55   end
 56 end
 57       
 58 endmodule

Jadi kondisi awal pada pemroses yaitu 0 lalu dia memulai pemrosesan program
if (encoder_in == 16'h0002) begin
 25       binary_out = 1;
Jika encoder yang inputannya 16’h0002 ( maksud 16’h0002 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 1
26      end  if (encoder_in == 16'h0004) begin 
 27       binary_out = 2; 
Namun jika yang inputnya 16’h0004 ( maksud 16’h0004 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 2
end  if (encoder_in == 16'h0008) begin 
 29       binary_out = 3; 
Ketika yang inputnya 16’h0008 ( maksud 16’h0008 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 3
end  if (encoder_in == 16'h0010) begin 
 31       binary_out = 4; 
Ketika yang inputnya 16’h0010 ( maksud 16’h0010 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 4
end  if (encoder_in == 16'h0020) begin 
 33       binary_out = 5; 
Ketika yang inputnya 16’h0020 ( maksud 16’h0020 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 5
end  if (encoder_in == 16'h0040) begin 
 35       binary_out = 6; 
Ketika yang inputnya 16’h0040 ( maksud 16’h0040 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 6
end  if (encoder_in == 16'h0080) begin 
 37       binary_out = 7;
Ketika yang inputnya 16’h0080 ( maksud 16’h0080 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 7
end  if (encoder_in == 16'h0100) begin 
 39       binary_out = 8; 
Ketika yang inputnya 16’h0100 ( maksud 16’h0100 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 8
end  if (encoder_in == 16'h0200) begin 
 41       binary_out = 9; 
Ketika yang inputnya 16’h0200 ( maksud 16’h0200 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 9
end if (encoder_in == 16'h0400) begin 
 43       binary_out = 10; 
Ketika yang inputnya 16’h0400 ( maksud 16’h0400 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 10
end  if (encoder_in == 16'h0800) begin 
 45       binary_out = 11; 
Ketika yang inputnya 16’h0800 ( maksud 16’h0800 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 11
end  if (encoder_in == 16'h1000) begin
 47       binary_out = 12; 
Ketika yang inputnya 16’h1000 ( maksud 16’h1000 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 12
end  if (encoder_in == 16'h2000) begin 
 49       binary_out = 13;
Ketika yang inputnya 16’h2000 ( maksud 16’h2000 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 13
end  if (encoder_in == 16'h4000) begin 
 51       binary_out = 14; 
Ketika yang inputnya 16’h4000 ( maksud 16’h4000 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 14
end if (encoder_in == 16'h8000) begin 
 53       binary_out = 15; 
Ketika yang inputnya 16’h8000 ( maksud 16’h8000 yaitu hexanya) maka dia akan mengeluarkan output yang bernilai 15
54      end
 55   end
 56 end
 57       
 58 endmodule

Untuk mengakhiri badan/body program dan mengakhiri dari suatu modul program
========================================================================
Mux : Using if Statement
// Design Name : mux_using_if
  3 // File Name   : mux_using_if.v
  4 // Function    : 2:1 Mux using If
  5 // Coder       : Deepak Kumar Tala
Hanya untuk sebagai komentar karena ada symbol “//”
 
module  mux_using_if(
  8 din_0      , // Mux first input
  9 din_1      , // Mux Second input
 10 sel        , // Select input
 11 mux_out      // Mux output
 12 );
Module mux_using_if sebagai judul dari module yang ingin di buat
din_0 sebagai mux yang pertama kali masuk/inputan pertama
 
//-----------Input Ports---------------
 14 input din_0, din_1, sel ;
 
Untuk mendeklarasikan bahwa variable din_0,din_1,sel sebagai port input
//-----------Output Ports---------------
 16 output mux_out;
Untuk mendeklarasikan bahwa variable mux_out sebagai port output
//------------Internal Variables--------
 18 reg  mux_out;
Sebagai register pada variable mux_out
//-------------Code Starts Here---------
 20 always @ (sel or din_0 or din_1)
 21 begin : MUX
 22   if (sel == 1'b0) begin
 23       mux_out = din_0;
 24   end else begin
 25       mux_out = din_1 ;
 26   end
 27 end
Disini adalah sebagai body dari program always @(sel or din_0 or din_1) yaitu untuk selalu menggunakan gerbang logika OR yang 3 input an
Begin mux untuk memulai suatu pemrograman MUX
22   if (sel == 1'b0) begin
 23       mux_out = din_0;
 24   end else begin
 25       mux_out = din_1 ;
 26   end
Yaitu jika variable sel sama dengan 1’b0 maka dia akan menjalankan perintah mux_out=din_0 dan langsung selesai ,namun jika variable sel tidak sama dengan 1’b0 maka dia akan menjalankan perintah mux_out=din_1 dan langsung selesai
endmodule //End Of Module mux
untuk mengakhiri dari suatu module program mux
========================================================================
Synchronous reset D- FF
// Design Name : dff_sync_reset
  3 // File Name   : dff_sync_reset.v
  4 // Function    : D flip-flop sync reset
  5 // Coder       : Deepak Kumar Tala
Hanya sebagai komentar karena ada symbol “//”
module dff_sync_reset (
  8 data   , // Data Input
  9 clk    , // Clock Input
 10 reset  , // Reset input
 11 q        // Q output
 12 );
Untuk memberikan nama module/judul dff sync reset
Membuat variable data,clk,reset,q
 
//-----------Input Ports---------------
 14 input data, clk, reset ; 
Mendeklarasikan bahwa variable data,clk,reset sebagai port input
 
//-----------Output Ports---------------
 17 output q;
Mendeklarasikan bahwa variable q sebagai port output
 
//------------Internal Variables--------
 20 reg q;
Sebagai register pada variable q
 
//-------------Code Starts Here---------
 23 always @ ( posedge clk)
 24 if (~reset) begin
 25   q <= 1'b0;
 26 end  else begin
 27   q <= data;
 28 end
 
always @ ( posedge clk)yaitu untuk menghantarkan nilai masukan secara terus menerus pada setiap sisi positfe edge / ketika clocknya naik.
 
Jika variable reset dijalankan maka dia akan melakukan perintah q<=1’b0 atau kita ibaratkan hasilnya q=1 dan 1’b0=0 
namun jika variable reset kondisinya tidak terpenuhi maka dia akan menjalankan perintah q<=data atau kita ibaratkan q=0 dan data=1. 
Lalu selesai
 
endmodule //End Of Module dff_sync_reset
untuk mengakhiri module dff_sync_reset
====================================================================================================================================================
8-Bit Simple Up Counter
// Design Name : up_counter
  3 // File Name   : up_counter.v
  4 // Function    : Up counter
  5 // Coder     : Deepak
Hanya sebagai komentar karena ada symbol “//”
module up_counter    (
  8 out     ,  // Output of the counter
  9 enable  ,  // enable for counter
 10 clk     ,  // clock Input
 11 reset      // reset Input
 12 );
Untuk menamakan module dengan judul up_counter
out,enable,clk,reset di buat sebagai suatu variabel
//----------Output Ports--------------
 14     output [7:0] out;
Variabel out di deklarasikan sebagai port output dari suatu program up counter
//------------Input Ports--------------
 16      input enable, clk, reset;
Variabel enable,clk,reset sebagai port input dari suatu program up counter
//------------Internal Variables--------
 18     reg [7:0] out;
Sebagai register dari variabel out
//-------------Code Starts Here-------
 20 always @(posedge clk)
 21 if (reset) begin
 22   out <= 8'b0 ;
 23 end else if (enable) begin
 24   out <= out + 1;
 25 end
Disini sebagai suatu body dari program always @(posedge clk) yaitu untuk menghantarkan nilai masukan secara terus menerus pada setiap sisi positfe edge / ketika clocknya naik.
Jika variable reset dijalankan maka dia akan melakukan perintah out<=8’b0 atau kita ibaratkan hasilnya out 0 sampai dengan angka 7 
namun jika variable reset kondisinya tidak terpenuhi maka dia akan menjalankan perintah out<=out+1 atau kita ibaratkan hasil dari variabel out itu akan 
terus bertambah sampai kondisi terpenuhi atau 
sampai angka 7. Lalu selesai
 
endmodule
untuk mengakhiri module up_counter
========================================================================================================================================================
ROM/EPROM - Loading from File
// Design Name : rom_using_file
  3 // File Name   : rom_using_file.v
  4 // Function    : ROM using readmemh
  5 // Coder       : Deepak Kumar Tala
Hanya sebagai komentar karena ada simbol “//”
module rom_using_file (
  8 address , // Address input
  9 data    , // Data output
 10 read_en , // Read Enable 
 11 ce        // Chip Enable
 12 );
Module rom_using_file untuk memberikan judul pada module rom/eprom
Untuk address,data,read_en,ce sebagai suatu variabel
reg [7:0] mem [0:255] ;  
reg disini sebagai register dan memory dari 0 sampai dengan 255
assign data = (ce && read_en)
yaitu untuk menggabungkan file text pada variabel ce dan read_en
? mem[address] : 8'b0;
Untuk mencetak hasil memory address pada baris 8’b0
initial begin
 23   $readmemb("memory.list", mem); // memory_list is memory file
 24 end
Untuk memulai program
 23   $readmemb("memory.list", mem);
Untuk membaca memory.list pada variabel mem
endmodule
untuk mengakhiri program rom_using_file
=======================================================================================================
And the Practical One
// Design Name : parity_using_bitwise
  3 // File Name   : parity_using_bitwise.v
  4 // Function    : Parity using bitwise xor
  5 // Coder       : Deepak Kumar Tala
Hanya sebagai suatu komentar karena ada simbol “//”
module parity_using_bitwise (
  8 data_in    , //  8 bit data in
  9 parity_out   //  1 bit parity out
 10 );
Parity_using_bitwise sebagai judul dari suatu module yang ingin dibuat
data_in,parity_out sebagai suatu variabel
output  parity_out ;
untuk mendeklarasikan bahwa variabel parity_out sebagai output program
 
input [7:0] data_in ;
untuk mendeklarasikan bahwa variabel data_in yang memiliki 8 bit data sebagai input program
 
assign parity_out = ^data_in;
untuk menggabungkan suatu berkas dengan tipe text yang dibuat yaitu parity_out di gabungkan dengan variabel data_in dan melakukan proses perhitungan yang ber parity 1
endmodule
untuk mengakhiri program parity_using_bitwise
==================================================================================================

Tidak ada komentar:

Posting Komentar