求:用verilog语言编写10进制减法计数器

1 实现从9依次递减到0
2 数码管显示计数过程
3 具有启动,停止功能
4 给出整体设计框图

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
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-14
//这是39进制计数器,可进行加减操作,为0时减操作输出38,为38是加操作输出0.你改一下就成9进制了
module
counter_39{
add,
dec,
counter
};
input
add;
//为1时加操作
input
dec;
//为1时减操作
output
[5:0]
counter;
reg
[5:0]
counter;
always
@(add
and
dec)
begin
if(add
&&
!dec)
begin
if(counter
==
6'd38)
begin
counter
<=
6'd0;
end
else
begin
counter
<=
counter
+
1'b1;
end
end
if(!add
and
dec)
begin
if(counter
==
6'd0)
begin
counter
<=
6'd38;
end
else
begin
counter
<=
counter
-
1'b1;
end
end
end
endmodule
第2个回答  2019-01-14
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