Home > Desain Sistem VLSI, Kuliah, Sistem Digital Lanjut > Desain Pencacah Sinkron 8-bit dengan HDL

Desain Pencacah Sinkron 8-bit dengan HDL

Dalam artikel ini, sebuah modul pencacah sinkron 8-bit akan diimplementasikan menggunakan HDL verilog. Modul harus tersintesis di FPGA Xilinx (Spartan). Artikel ini diambil dari bahasan kuliah sistem digital lanjut dan perancangan VLSI.

Pencacah sinkron ini merupakan rangkaian sekuensial yang operasinya di-trigger oleh transisi naik sinyal clock (posedge CLK). Kebutuhan spesifikasi modul secara lengkap adalah sebagai berikut:

  • lebar keluaran d 8-bit, mampu mencacah dari -128 sampai 127 (jika representasi bilangan bertanda)
  • operasi pencacahan sirkular
  • saat reset=1 maka keluaran d=0x00
  • pencacahan ditrigger oleh transisi naik sinyal clk
  • mempunyai 4 mode pencacahan yang ditunjukkan dalam tabel berikut:
ModeOperasiContoh urutan
00+10 -> 1- > 2 -> 3 -> 4
01+2120 -> 122 -> 124 -> 126 ->-128
10-29 -> 7 -> 5 -> 3 -> 1
11-13 -> 2 -> 1 -> 0 -> -1

Rancangan HDL

Antarmuka modul pencacah sinkron:

  • masukan: reset, clk, mode(2)
  • keluaran: data_out(8)

Deskripsi struktur modul ini dalam HDL adalah sebagai berikut:

module pencacah_top(
  input [1:0] mode,
  input reset,
  input clk,
  output reg [7:0] data_out
);
  ....
endmodule

Kode HDL modul pencacah sinkron dapat dibagi jadi 3 blok, yaitu blok next_state, current_state dan output. Perilaku dari modul ini ditunjukkan dalam kode HDL berikut:

reg [7:0] cur_state, next_state;
/*Current state logic: sequential*/
always @(posedge clk) begin
  if (reset==1) cur_state = 0;
  else cur_state = next_state;
end
/*output logic: combinational*/
always @(cur_state) begin
  data_out = cur_state;
end
/*next_state logic: combinational*/
always @(cur_state or mode) begin
  case (mode)
    2'b00: begin
        next_state = cur_state + 1;
      end
    2'b01: begin
        next_state = cur_state + 2;
      end
    2'b10: begin
        next_state = cur_state - 2;
      end
    2'b11: begin
        next_state = cur_state - 1;
      end
  endcase
end

Keseluruhan kode HDL untuk modul pencacah sinkron 8-bit ini dapat didownload di sini.

Simulasi Modul
Simulasi dilakukan dengan menggunakan isim. Modul testbench dibuat untuk memberikan masukan ke modul pencacah dan melihat keluarannya. Kode HDL untuk modul testbench ini adalah:

module pencacah_top_tb;
  // Inputs
  reg [1:0] mode;
  reg reset;
  reg clk;
  // Outputs
  wire [7:0] data_out;
  // Instantiate the Unit Under Test (UUT)
  pencacah_top uut (
    .mode(mode),
    .reset(reset),
    .clk(clk),
    .data_out(data_out)
  );
  initial begin // Initialize Inputs
    mode = 0;
    reset = 1;
    clk = 0;
    #10;    // wait for 5 clock
    // Start counting
    mode = 0; // 00: count step +1
    reset = 0;
    #50;    // wait 5 clock
    mode = 1; // 01: count step +2
    #50;   // wait 5 clock
    mode = 2; // 10: count step -2
    #50;   // wait 5 clock
    mode = 3; // 11: count step -1
    #50 $finish;
  end
  // Clock generator
  always  begin
    #5 clk = 1;
    #5 clk = 0;
  end
endmodule

Diagram pewaktuan hasil simulasi diperlihatkan dalam gambar berikut:

  1. No comments yet.
  1. No trackbacks yet.
*

This blog is kept spam free by WP-SpamFree.

Skip to toolbar