Program Verilog FPGA

Assalamualaikum Warohmatullah Wabarokatuh.

Dibawah ini  contoh dari program Verilog FPGA beserta pengertianya:


Encoder - Using if-else Statement
//-----------------------------------------------------
// Design Name : encoder_using_if
// File Name   : encoder_using_if.v
// Function    : Encoder using If
// Coder       : Deepak Kumar Tala
//-----------------------------------------------------
module encoder_using_if(
binary_out , //  4 bit binary output
encoder_in , //  16-bit input
enable       //  Enable for the encoder
); 
//-----------Output Ports---------------
output [3:0] binary_out  ;
//-----------Input Ports---------------
input  enable ; 
input [15:0] encoder_in ; 
//------------Internal Variables--------
reg [3:0] binary_out ;  
//-------------Code Start-----------------
always @ (enable or encoder_in)
 begin 
   binary_out = 0; 
   if (enable) begin
     if (encoder_in == 16'h0002) begin
      binary_out = 1;
     end  if (encoder_in == 16'h0004) begin 
      binary_out = 2; 
     end  if (encoder_in == 16'h0008) begin 
      binary_out = 3; 
     end  if (encoder_in == 16'h0010) begin 
      binary_out = 4; 
     end  if (encoder_in == 16'h0020) begin 
      binary_out = 5; 
     end  if (encoder_in == 16'h0040) begin 
      binary_out = 6; 
     end  if (encoder_in == 16'h0080) begin 
      binary_out = 7; 
     end  if (encoder_in == 16'h0100) begin 
      binary_out = 8; 
     end  if (encoder_in == 16'h0200) begin 
      binary_out = 9; 
     end if (encoder_in == 16'h0400) begin 
      binary_out = 10; 
     end  if (encoder_in == 16'h0800) begin 
      binary_out = 11; 
     end  if (encoder_in == 16'h1000) begin
      binary_out = 12; 
     end  if (encoder_in == 16'h2000) begin 
      binary_out = 13;
     end  if (encoder_in == 16'h4000) begin 
      binary_out = 14; 
     end if (encoder_in == 16'h8000) begin 
      binary_out = 15; 
     end
  end
end
      
endmodule

Logika Program

membuat program Encoder menggunakan if dan else pada program FPGA verilog seperti text diatas, untuk membuat komentar diawali dengan perintah (//), lalu modul yang digunakan binary_out dan encoder_in, selanjutnya perintah "output_[3:0] binary out" adalah output sebanyak 4 bit sedangkan "input [15:0] adalah input sebanyak 16 bit dan "reg [3:0] binary_out adalah penyimpanan sementara di register. 
Dan kodingan isi (if dan Else) dimulai saat perintah "begin" yaitu 16 bit sebagai wakil dari input h0002 mempunyai output 1 bilangan biner dan kodingan h0002 berkelipatan sampai h8000 dan akan mengasilkan ouput 15 sebagai bilangan biner dan di akhiri "Endmodule"


Decoder - Using case Statement
//-----------------------------------------------------
// Design Name : decoder_using_case
// File Name   : decoder_using_case.v
// Function    : decoder using case
// Coder       : Deepak Kumar Tala
//-----------------------------------------------------
module decoder_using_case (
binary_in   , //  4 bit binary input
decoder_out , //  16-bit  out
enable        //  Enable for the decoder
);
input [3:0] binary_in  ;
input  enable ;
output [15:0] decoder_out ;

reg [15:0] decoder_out ;

always @ (enable or binary_in)
begin
  decoder_out = 0;
  if (enable) begin
    case (binary_in)
      4'h0 : decoder_out = 16'h0001;
      4'h1 : decoder_out = 16'h0002;
      4'h2 : decoder_out = 16'h0004;
      4'h3 : decoder_out = 16'h0008;
      4'h4 : decoder_out = 16'h0010;
      4'h5 : decoder_out = 16'h0020;
      4'h6 : decoder_out = 16'h0040;
      4'h7 : decoder_out = 16'h0080;
      4'h8 : decoder_out = 16'h0100;
      4'h9 : decoder_out = 16'h0200;
      4'hA : decoder_out = 16'h0400;
      4'hB : decoder_out = 16'h0800;
      4'hC : decoder_out = 16'h1000;
      4'hD : decoder_out = 16'h2000;
      4'hE : decoder_out = 16'h4000;
      4'hF : decoder_out = 16'h8000;
    endcase
  end
end

endmodule

Logika Program

membuat program Decoder menggunakan "case" pada program FPGA verilog seperti text diatas, untuk membuat komentar diawali dengan perintah (//), lalu modul yang digunakan binary_in dan decoder_out, selanjutnya perintah "input_[3:0] binary_in" adalah output sebanyak 4 bit sedangkan "output [15:0] adalah input sebanyak 16 bit dan "reg [15:0] binary_in adalah penyimpanan sementara di register. setelah itu ada perintah always @ (enable or binary_in) sebagai pengantar nilai masukan ke pin-pin keluaran.
Dan memulai kodingan isi dengan "begin" perintah selanjutnya menhitung bilangan hexa sebesar 4 bit dan mempunyai keluaran desimal sampai pemberhentian case " andcase dan modul "endmodul".

Mux : Using if Statement  

//-----------------------------------------------------
// Design Name : mux_using_if
// File Name   : mux_using_if.v
// Function    : 2:1 Mux using If
// Coder       : Deepak Kumar Tala
//-----------------------------------------------------
module  mux_using_if(
din_0      , // Mux first input
din_1      , // Mux Second input
sel        , // Select input
mux_out      // Mux output
);
//-----------Input Ports---------------
input din_0, din_1, sel ;
//-----------Output Ports---------------
output mux_out;
//------------Internal Variables--------
reg  mux_out;
//-------------Code Starts Here---------
always @ (sel or din_0 or din_1)
begin : MUX
  if (sel == 1'b0) begin
      mux_out = din_0;
  end else begin
      mux_out = din_1 ;
  end
end

endmodule //End Of Module mux

Logika Program

membuat program Mux menggunakan if pada program FPGA verilog seperti text diatas, untuk membuat komentar diawali dengan perintah (//), lalu modul yang digunakan "din_0" sebagai inputan pertama dan "din_1" sebagai inputan kedua,setelah itu ada "sel" sebagai select input dan "Mux_out" sebagai keluaran mux, selanjutnya petintah "always @ enable or binary_in" sebagai pengantar nilai masukan ke pin-pin keluaran.
Dan memulai kodingan isi dengan "begin" perintah selanjutnya jika select input sebesar 1'bo maka keluaran mux sama dengan mux masukan pertma dan jika select sebesar selanjutnya atau (1'b1) maka keluaran mux sama dengan masukan mux kedua, ditutup dengan endmodule.
Synchronous reset D- FF
//-----------------------------------------------------
// Design Name : dff_sync_reset
// File Name   : dff_sync_reset.v
// Function    : D flip-flop sync reset
// Coder       : Deepak Kumar Tala
//-----------------------------------------------------
module dff_sync_reset (
data   , // Data Input
clk    , // Clock Input
reset  , // Reset input
q        // Q output
);
//-----------Input Ports---------------
input data, clk, reset ; 

//-----------Output Ports---------------
output q;

//------------Internal Variables--------
reg q;

//-------------Code Starts Here---------
always @ ( posedge clk)
if (~reset) begin
  q <= 1'b0;
end  else begin
  q <= data;
end

endmodule //End Of Module dff_sync_reset

Logika Program

membuat program synchronous reset D- FF pada program FPGA verilog seperti text diatas, untuk membuat komentar diawali dengan perintah (//), 
modul yang digunakan data, clock, reset sebagai input dan Q sebagai output lalu di simpan kedalam Register Q, lalu perintah isi tidak mereset, maka keluaran q kurang dari sama dengan 1'b0. dan jika masukan melebihi q sama dengan kurang dari sama dengan data. Endmodule mengakiri program.

8-Bit Simple Up Counter

//-----------------------------------------------------
// Design Name : up_counter
// File Name   : up_counter.v
// Function    : Up counter
// Coder�     : Deepak
//-----------------------------------------------------
module up_counter    (
out     ,  // Output of the counter
enable  ,  // enable for counter
clk     ,  // clock Input
reset      // reset Input
);
//----------Output Ports--------------
    output [7:0] out;
//------------Input Ports--------------
     input enable, clk, reset;
//------------Internal Variables--------
    reg [7:0] out;
//-------------Code Starts Here-------
always @(posedge clk)
if (reset) begin
  out <= 8'b0 ;
end else if (enable) begin
  out <= out + 1;
end

Logika Program

membuat program 8 bit simple up Counter pada program FPGA verilog seperti text diatas, untuk membuat komentar diawali dengan perintah (//), menggunakan modul out sebagai ouput counter dan enable untuk counter lalu clock dan reset sebagai input, selanjutnya perintah output [7:0] out berarti counter mempunyai keluaran sebanyak 8 buah,
dan reg [7:0] out sebagai registernya, lalu always @ (posedge clk) adalah clock diatur secara terus menerus dan medefiniskan clock yang aktif pada sisi naik untuk pengantar nilai masukan ke pin-pin keluaran. perintah isi pada program ini diartikan jika kondisi masukannya reset maka keluaran berupa 0 sebanyak 8 bit, jika enable keluaran adalah output sebelumnya ditambah 1. dan program ditutup dengan endmodule.

 
ROM/EPROM - Loading from File

//-----------------------------------------------------
// Design Name : rom_using_file
// File Name   : rom_using_file.v
// Function    : ROM using readmemh
// Coder       : Deepak Kumar Tala
//-----------------------------------------------------
module rom_using_file (
address , // Address input
data    , // Data output
read_en , // Read Enable 
ce        // Chip Enable
);
input [7:0] address;
output [7:0] data; 
input read_en; 
input ce; 
           
reg [7:0] mem [0:255] ;  
      
assign data = (ce && read_en) ? mem[address] : 8'b0;

initial begin
  $readmemb("memory.list", mem); // memory_list is memory file
end

endmodule

Logika Program

membuat program ROM/EPROM - Loading from Filepada program FPGA verilog seperti text diatas, untuk membuat komentar diawali dengan perintah (//), program ini menggunakan modul address sebagai input, data sebagai output dan read_en dan ce atau chip keadaan enable, selanjutnya input [7:0] address adalah masukan alamat sebanyak 8 bit dan output [7:0] data adalah data keluaran sebanyak 8 bit, lalu perintah reg [7:0] mem [0:255] disimpan di register hexal dan biner, perintah selanjutnya di artikan
menetapkan masukan sebagai variabel read_en dan ce lalu juga menetapkan address 8'b0 sebagai masukan memori data
Dan baris kodingan selanjutnya memori yang diprogram bisa membaca dan menhapus serta menulis kembali, memori juga mempunyai sifat non-volatile.

Using Assign (Parity)


//-----------------------------------------------------
// Design Name : parity_using_assign
// File Name   : parity_using_assign.v
// Function    : Parity using assign
// Coder       : Deepak Kumar Tala
//-----------------------------------------------------
module parity_using_assign (
data_in    , //  8 bit data in
parity_out   //  1 bit parity out
);
output  parity_out ;
input [7:0] data_in ; 
     
wire parity_out ;
      
assign parity_out =  (data_in[0] ^ data_in[1]) ^  
                     (data_in[2] ^ data_in[3]) ^ 
                     (data_in[4] ^ data_in[5]) ^  
                     (data_in[6] ^ data_in[7]);

endmodule 

Logika Program

membuat program ROM/EPROM - Loading from Filepada program FPGA verilog seperti text diatas, untuk membuat komentar diawali dengan perintah (//), modul yang di gunakan pada program data_in sebagai inputan data sebanyak 8 bit dan parity_out adalah 1 bit parity keluaran,
selanjutnya perintah input [7:0] data_in sebagai inputan data sebanyak 8 bit,
perintah " wire parity_out" sebagai penyambung pin ke keluaran parity,
dan perintah isi bermaksud menetapkan keluaran variabel parity out dengan masukan data sebanyak 0 sampai dengan 7 membentuk sebuah parity sesuai dengan masukannya serta membandingkan, apa bila hasil ganjil maka lampu led menyala.


Sumber: http://asic-world.com/examples/verilog/index.html

Komentar

Postingan populer dari blog ini

Resensi Film Percy Jackson & the Olympians: The Lightning Thief

Manajemen Proyek dan Resiko

RANCANG BANGUN ROBOT PENGANTAR MAKANAN LINE FOLLOWER