第五章课堂练习2

题目:设计加减可控的16bit计数器

module ADD_SUB_LOAD(CLK,RST,ADD_EN,SUB_EN,LOAD,DATA,CQ,COUT);
    input 	clk;//时钟信号
    input	RST;//复位信号
    input	ADD_EN;//加法标志位
    input	SUB_EN;//减法标志位
    input	LOAD;//初始值装载标志位
    input	[15:0]DATA;//16位计数初值
    output	[15:0]CQ;//计数输出
    output	COUT;//进位标志位
    reg		COUT_reg;//进位借位标志位
    reg		[15:0]CQI;//DATA数据暂存变量
    
    always@(posedge CLK or posedge RST)
        begin
            if(RST == 1'b1)//上升沿复位
                begin
                    CQI<=16'd0;
                    COUT_reg<=1'b0;
                end
            else if(LOAD == 1'b1)//装载计数初始值
                CQI <= DATA;
            else
                begin
                    if(ADD_EN == 1'b1)//开启加法计数
                        begin
                            CQI<=CQI+16'd1;
                            if(CQI==16'hffff)//计满进位标志位置1,否则为0,即CQI=65535,当计满时溢出后从零开始计数
                                COUT_reg<=1'b1;
                            else
                                COUT_reg<=1'b0;
                        end
                    else if(SUB_EN == 1'b1)//计空借位标志位置1,否则为0,即CQI=0
                        begin
                          	 CQI<=CQI-16'd1;
                              if(CQI==16'd0)
                              	COUT_reg<=1'b1;
                              else
                                COUT_reg<=1'b0;
                   		end 
                end
        end
    assign	CQ = CQI;//计数输出
    assign	COUT = COUT_reg;//进位借位标志位输出,阻塞式赋值reg型可以赋给wire型
endmodule
posted @ 2022-06-08 14:14  JsDakey  阅读(76)  评论(0)    收藏  举报