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.
3.Logic design block.
Verilog code :
4. Simulation & waveform.
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.
3.Logic design block.
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.
Last edited: