第五章课堂练习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
本文来自博客园,作者:JsDakey,转载请注明原文链接:https://www.cnblogs.com/helloszy/p/16355502.html