Thiết kế counter đơn giản.

duongnt

Administrator
Staff member
9 Tháng ba 2017
32
17
8
37
1.Yêu cầu
Thiết kế một simple counter có nhừng chức năng sau:
- Khi tín hiệu inc_i = 1 thì counter tăng 1 đơn vị.
- Khi tín hiệu dec_i =1 thì counter giảm 1 đơn vị.
- Khi cả hai tín hiệu trên đều bằng 1 thì counter giữ nguyên giá trị trước đó (không tăng cũng không giảm).
- Khi clr_i = 1 thì reset giá trị counter về 0.
2.Input/Output block diagram.
11.jpg

3.Logic design block.
12.jpg

Verilog code :
Mã:
////////////////////////////////////////////////////////////////////////////////
//Company : vimach.net
// Filename    : cnt.v
// Description : Simple counter
// Author      :
// Created On  :
// History     : Initial
//
////////////////////////////////////////////////////////////////////////////////
module cnt
    (
    clk,
    rst_n,
    //---------------------------------
    //Input
    inc_i,
    dec_i,
    clr_i,
    //---------------------------------
    //Output
    cnt_o
    );

//------------------------------------------------------------------------------
//parameter
parameter CNT_DW  = 4'd8;

//------------------------------------------------------------------------------
// Port declarations
input                 clk;
input                 rst_n;
//---------------------------------
//Input
input                 inc_i;
input                 dec_i;
input                 clr_i;
//---------------------------------
//Output
output  [CNT_DW-1:0]  cnt_o;
//------------------------------------------------------------------------------
//internal signal
wire [CNT_DW-1:0]      nxt_cnt;
reg [CNT_DW-1:0]       cnt;
wire                            inc_and_dec;
//------------------------------------------------------------------------------
//Count logic
assign inc_and_dec = inc_i & dec_i;
assign nxt_cnt = clr_i ? 8'd0 :
                         inc_and_dec ? cnt :
                         inc_i ? (cnt + 1'b1) :
                         dec_i ? (cnt - 1'b1) :cnt;
//------------------------------------------------------------------------------
//Flip flop
always @ (posedge clk or negedge rst_n)
    begin
    if(!rst_n)
        cnt <= 8'd0;
    else
        cnt <= nxt_cnt;
    end

assign cnt_o = cnt;

endmodule


4. Simulation & waveform.
14.jpg
 
Last edited:
  • Like
Reactions: snvv and Lu ROm