加减BCD计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
module counter(clkin, rst_n, ld, data, out, c,jiajian,hex0,hex1); input clkin, rst_n, ld,jiajian;
input [7:0] data;
output [7:0] out;
output c;
output [6:0]hex0;
output [6:0]hex1;
reg [6:0]hex0;
reg [6:0]hex1;
reg c = 0;
reg[3:0] ten, unit;
assign out = {ten, unit};
parameter seg0 = 7'b1000000, //显示在数码管上的数码 seg1 = 7'b1111001,
seg2 = 7'b0100100,
seg3 = 7'b0110000,
seg4 = 7'b0011001,
seg5 = 7'b0010010,
seg6 = 7'b0000010,
seg7 = 7'b1111000,
seg8 = 7'b0000000,
seg9 = 7'b0010000,
sega = 7'b0001000,
segb = 7'b0000011,
segc = 7'b1000110,
segd = 7'b0100001,
sege = 7'b0000110,
segf = 7'b0001110;
always@(posedge clkin )
begin
case (jiajian)
1'b0:
begin
if(!rst_n)
{ten, unit} <= 0;
else if(ld)
{ten, unit} <= data;
else
begin
if(ten == 5)
begin
if(unit == 8)
begin
c = 1;
unit <= unit-1; end
else if(unit == 0)
begin
c = 0;
{ten, unit} <= 9; end
else
unit <= unit-1; end
else if(unit == 0)
begin
ten <= ten-1;
unit <= 9;
end
else
unit <= unit-1;
end
end
1'b1:
begin
if(!rst_n)
{ten, unit} <= 0;
else if(ld)
{ten, unit} <= data;
else
begin
if(ten == 5)
begin
if(unit == 8)
begin
c = 1;
unit <= unit+1; end
else if(unit == 9)
begin
c = 0;
{ten, unit} <= 0; end
else
unit <= unit+1; end
else if(unit == 9)
begin
ten <= ten+1;
unit <= 0;
end
else
unit <= unit+1;
end
end
endcase
end
always@(unit[3:0]) //数码管显示程序case(unit[3:0])
4'b0000:hex0[6:0]=seg0;
4'b0001:hex0[6:0]=seg1;
4'b0010:hex0[6:0]=seg2;
4'b0011:hex0[6:0]=seg3;
4'b0100:hex0[6:0]=seg4;
4'b0101:hex0[6:0]=seg5;
4'b0110:hex0[6:0]=seg6;
4'b0111:hex0[6:0]=seg7;
4'b1000:hex0[6:0]=seg8;
4'b1001:hex0[6:0]=seg9;
endcase
always@(ten[3:0])
case(ten[3:0])
4'b0000:hex1[6:0]=seg0;
4'b0001:hex1[6:0]=seg1;
4'b0010:hex1[6:0]=seg2;
4'b0011:hex1[6:0]=seg3;
4'b0100:hex1[6:0]=seg4;
4'b0101:hex1[6:0]=seg5;
4'b0110:hex1[6:0]=seg6;
4'b0111:hex1[6:0]=seg7;
4'b1000:hex1[6:0]=seg8;
4'b1001:hex1[6:0]=seg9;
endcase
endmodule