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 : 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.