module
CNT10
(CLK,
RST,
EN,
CQ,
COUT);
input
CLK,RST,EN;
output[3:0]
CQ;
output
COUT;
reg[3:0]
CQ,CQI;
reg
COUT;
always
@(posedge
CLK)//检测时钟上升沿
begin
:
u1
if
(RST
==
1'b1)//计数器复位
begin
CQI={4{1'b0}};
end
begin
if(EN==1'b1)//检测是否允许计数
begin
if
(CQI<9)
begin
CQI=CQI+1;
//允许计数
end
else
begin
CQI={4{1'b0}};
//大于9,计数值清零
end
end
end
if
(CQI==9)
begin
COUT<=1'b1
;
//计数大于9,输出进位信号
end
else
begin
COUT<=1'b0
;
end
CQ<=CQI
;
//将计数值向端口输出
end
endmodule
module CNT10 (CLK, RST, EN, CQ, COUT);
input CLK,RST,EN;
output[3:0] CQ;
output COUT;
reg[3:0] CQ,CQI;
reg COUT;
always @(posedge CLK)//检测时钟上升沿
begin : u1
if (RST == 1'b1)//计数器复位
begin
CQI={4{1'b0}};
end
begin
if(EN==1'b1)//检测是否允许计数
begin
if (CQI<9)
begin
CQI=CQI+1; //允许计数
end
else
begin
CQI={4{1'b0}}; //大于9,计数值清零
end
end
end
if (CQI==9)
begin
COUT<=1'b1 ; //计数大于9,输出进位信号
end
else
begin
COUT<=1'b0 ;
end
CQ<=CQI ; //将计数值向端口输出
end
endmodule
module
count
#(parameter
size=4)
(input
clock,load_n,clear_n,updown,
input[size-1:0]load_data,output
reg[size-1:0]q
);
always
@(negedge
load_n,negedge
clear_n,posedge
clock)
if(!load_n)
q<=load_data;
else
if(!clear_n)
q<=0;
else
if(updown)
q<=(q+1)%10;
else
begin
if(q==0)
q<=9;
else
q<=q-1;
end
endmodule