verilog模六十计数器设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
六、 系统功能与性能测试结果
功能测试: 1、 将 SW0 与 SW1 同时打到闭合,观察到数码管上显示每过 0.5 秒计一次数,到 59 后
回到 00,完成基本计数功能。 2、 将 SW0 与 SW1 同时打到闭合,在数码管上显示 05 时,将 SW0 断开,数码管上保
持显示 05,完成暂停功能。 3、 将 SW0 与 SW1 同时打到闭合,在数码管上显示 05 时,将 SW1 断开,观察到数码
三、 源程序
1
主模块:
module cnt_60( input cp,ce,cr, output [7:0]seg, output [3:0]cs
);
wire cp0; frequency2 U0( .cp(cp), .cp0(cp0) );
wire cp1; frequency1000 U1( .cp(cp), .cp1(cp1) );
3
cnt<={16{1'b0}}; end end
endmodule
子模块 2:
module cnt10( input cp0, input ce, input cr, output reg tc, output reg [3:0]q10 ); always@(posedge cp0 or negedge cr) begin tc<=1'b0; if(~cr) q10<=4'b0000; else if(~ce) q10<=q10; else if(q10>=4'b1001) begin q10<=4'b0000; tc<=1'b1; end else q10<=q10+1'b1; end
八、 实验心得体会
这次实验从上学期的原理到这学期的实践,跨度稍有些大,因而显得很有挑战性。自己 在课下又自学了很多东西,才把问题基本解决。虽然耗时较大,但收获也较大。
7
wire [3:0]q; selector U5( .q0(q6[3:0]),
2
.q1(q10[3:0]), .cs(cs[3:0]), .q(q[3:0]) );
decoder U6( .q(q[3:0]), .seg(seg[7:0]) );
endmodule
子模块 0:
module frequency2( input cp, output reg cp0
4
else q6<=q6+1'b1;
end
endmodule
子模块 4:
module slt( input cp1, output [3:0]cs ); assign cs[0]=cp1; assign cs[1]=~cp1; assign cs[2]=1'b1; assign cs[3]=1'b1;
endmodule
四、 管脚约束文件
#Created by Constraints Editor (xc3s100e-cp132-4) - 2013/12/05 NET "cp" TNM_NET = "cp"; TIMESPEC TS_cp = PERIOD "cp" 20 ns HIGH 50 %;
endmodule
子模块 3:
module cnt6( input tc, input cr, output reg [3:0]q6=0 ); always@(posedge tc or negedge cr) begin if(~cr) q6<=4'b0000; else if(q6>=4'b0101) q6<=4'b0000;
模六十计数器设计 一、 系统设计实现目标要求
利用层次化方法在实验板上实现模六十计数, 即 0—1—2—3—4—……—9—10 —……—59—0—1……,并在 Basys2 实验板的 AN1 与 AN0 上显示。
二、 设计原理
顶层模块图如图 1 所示,子模块图如图 2 所示。
图1
图2 frequency2 模块将 50MHz 分频为 2Hz,作为计数器的计数脉冲。frequency1000 模块将 50MHz 分频为 1000Hz,用于分别轮换点亮两个数码管。cnt10 为 10 进制计数器,一方 面作为点亮个位数码管的输入,另一方面得到 6 进制计数器的进位输入。cnt6 为 6 进制 计数器,作为点亮十位数码管的输入。slt 将 1000Hz 频率分给 cs[0]和 cs[1],作为两个 使能信号,用于分别轮换点亮两个数码管。selector 将 cnt10 和 cnt6 的输出端轮换送给 decoder,decoder 将计数器的数据译码,使之可以在数码管上显示。
always@(*) begin
case(q) 4'h1:seg = 8'b11111001; 4'h2:seg = 8'b10100100; 4'h3:seg = 8'b10110000; 4'h4:seg = 8'b10011001; 4'h5:seg = 8'b10010010;
5
4'h6:seg = 8'b10000010; 4'h7:seg = 8'b11111000; 4'h8:seg = 8'b10000000; 4'h9:seg = 8'b10010000; 4'hA:seg = 8'b10001000; 4'hB:seg = 8'b10000011; 4'hC:seg = 8'b11000110; 4'hD:seg = 8'b10100001; 4'hE:seg = 8'b10000110; 4'hF:seg = 8'b10001110; default:seg = 8'b11000000; endcase end
end
endmodule
子模块 1:
module frequency1000( input cp, output reg cp1
); reg [15:0]cnt=0; always@(posedge cp) begin cnt<=cnt+1'b1; if(cnt>=16'b1100001101001111)//50000-1,把 50MHz 分频为 1000Hz begin cp1<=~cp1;
); reg [24:0]cnt=0; always@(posedge cp) begin cnt<=cnt+1'b1; if(cnt>=25'b1011111010111100000111111)//25000000-1,把 50MHz 分
频为 2Hz begin cp0<=~cp0; cnt<={25{1'b0}}; end
NET "cp" LOC = B8;
6
五、 系统使用说明
拨码开关 SW1 为复位开关,拨码开关 SW0 为暂停开关,当 SW0 与 SW1 同时处于闭合 状态时,每过 0.5 秒计一次数,并在数码管上显示,到 59 后回到 00,重新计数。当 SW1 闭合,SW0 断开时,计数暂停。当 SW1 断开,无论 SW0 闭合还是断开,数码管始终显 示 00.当 SW1 闭合后,重新开始计数。
wire tc; wire [3:0]q10; cnt10 U2( .cp0(cp0), .ce(ce), .cr(cr), .tc(tc), .q10(q10[3:0]) );
wire [3:0]q6; cnt6 U3( .tc(tc), .cr(cr), .q6(q6[3:0]) );
slt U4( .cp1(cp1), .cs(cs[3:0]) );
管上保持显示 00,再将 SW1 闭合,观察到数码管上重新计数,完成复位功能。 4、 将 SW0 与 SW1 同时打到闭合,在数码管上显示 05 时,将 SW0 断开,数码管上保
持显示 05,再将 SW1 断开,观察到数码管上保持显示 00,再将 SW1 闭合,观察到 数码管上重新计数,完成在暂停的基础上复位的功能。
# PlanAhead Generated physical constraints
NET "ce" LOC = P11; NET "cr" LOC = L3; NET "seg[0]" LOC = L14; NET "seg[1]" LOC = H12; NET "seg[2]" LOC = N14; NET "seg[3]" LOC = N11; NET "seg[4]" LOC = P12; NET "seg[5]" LOC = L13; NET "seg[6]" LOC = M12; NET "seg[7]" LOC = N13; NET "cs[0]" LOC = J12; NET "cs[1]" LOC = F12; NET "cs[2]" LOC = K14; NET "cs[3]" LOC = M13;
endmodule
子模块 5:
module selector( input [3:0]q0, input [3:0]q1, input [3:0]cs, output [3:0]q );
assign q=cs[0]?q1:q0;
endmodule
子模块 6:
module decoder( input [3:0]q, output reg [7:0]seg );
性能测试: 用电子表测量系统从 00 显示到 59,再到 00 的时间,确实为 30 秒(计数信号为 2Hz), 性能上达到Leabharlann Baidu求。
七、 系统设计开发步骤与过程
1、 明确设计要求与拥有的资源; 2、 设计原理图; 3、 编写代码; 4、 仿真; 5、 修改代码后,重复步骤 4、5,直到仿真结果无误为止; 6、 将代码写入开发板,进行性能与功能测试; 7、 修改代码后,重复步骤 4、5、6、7,直到性能与功能都达到要求为止; 8、 撰写系统说明书与报告。
功能测试: 1、 将 SW0 与 SW1 同时打到闭合,观察到数码管上显示每过 0.5 秒计一次数,到 59 后
回到 00,完成基本计数功能。 2、 将 SW0 与 SW1 同时打到闭合,在数码管上显示 05 时,将 SW0 断开,数码管上保
持显示 05,完成暂停功能。 3、 将 SW0 与 SW1 同时打到闭合,在数码管上显示 05 时,将 SW1 断开,观察到数码
三、 源程序
1
主模块:
module cnt_60( input cp,ce,cr, output [7:0]seg, output [3:0]cs
);
wire cp0; frequency2 U0( .cp(cp), .cp0(cp0) );
wire cp1; frequency1000 U1( .cp(cp), .cp1(cp1) );
3
cnt<={16{1'b0}}; end end
endmodule
子模块 2:
module cnt10( input cp0, input ce, input cr, output reg tc, output reg [3:0]q10 ); always@(posedge cp0 or negedge cr) begin tc<=1'b0; if(~cr) q10<=4'b0000; else if(~ce) q10<=q10; else if(q10>=4'b1001) begin q10<=4'b0000; tc<=1'b1; end else q10<=q10+1'b1; end
八、 实验心得体会
这次实验从上学期的原理到这学期的实践,跨度稍有些大,因而显得很有挑战性。自己 在课下又自学了很多东西,才把问题基本解决。虽然耗时较大,但收获也较大。
7
wire [3:0]q; selector U5( .q0(q6[3:0]),
2
.q1(q10[3:0]), .cs(cs[3:0]), .q(q[3:0]) );
decoder U6( .q(q[3:0]), .seg(seg[7:0]) );
endmodule
子模块 0:
module frequency2( input cp, output reg cp0
4
else q6<=q6+1'b1;
end
endmodule
子模块 4:
module slt( input cp1, output [3:0]cs ); assign cs[0]=cp1; assign cs[1]=~cp1; assign cs[2]=1'b1; assign cs[3]=1'b1;
endmodule
四、 管脚约束文件
#Created by Constraints Editor (xc3s100e-cp132-4) - 2013/12/05 NET "cp" TNM_NET = "cp"; TIMESPEC TS_cp = PERIOD "cp" 20 ns HIGH 50 %;
endmodule
子模块 3:
module cnt6( input tc, input cr, output reg [3:0]q6=0 ); always@(posedge tc or negedge cr) begin if(~cr) q6<=4'b0000; else if(q6>=4'b0101) q6<=4'b0000;
模六十计数器设计 一、 系统设计实现目标要求
利用层次化方法在实验板上实现模六十计数, 即 0—1—2—3—4—……—9—10 —……—59—0—1……,并在 Basys2 实验板的 AN1 与 AN0 上显示。
二、 设计原理
顶层模块图如图 1 所示,子模块图如图 2 所示。
图1
图2 frequency2 模块将 50MHz 分频为 2Hz,作为计数器的计数脉冲。frequency1000 模块将 50MHz 分频为 1000Hz,用于分别轮换点亮两个数码管。cnt10 为 10 进制计数器,一方 面作为点亮个位数码管的输入,另一方面得到 6 进制计数器的进位输入。cnt6 为 6 进制 计数器,作为点亮十位数码管的输入。slt 将 1000Hz 频率分给 cs[0]和 cs[1],作为两个 使能信号,用于分别轮换点亮两个数码管。selector 将 cnt10 和 cnt6 的输出端轮换送给 decoder,decoder 将计数器的数据译码,使之可以在数码管上显示。
always@(*) begin
case(q) 4'h1:seg = 8'b11111001; 4'h2:seg = 8'b10100100; 4'h3:seg = 8'b10110000; 4'h4:seg = 8'b10011001; 4'h5:seg = 8'b10010010;
5
4'h6:seg = 8'b10000010; 4'h7:seg = 8'b11111000; 4'h8:seg = 8'b10000000; 4'h9:seg = 8'b10010000; 4'hA:seg = 8'b10001000; 4'hB:seg = 8'b10000011; 4'hC:seg = 8'b11000110; 4'hD:seg = 8'b10100001; 4'hE:seg = 8'b10000110; 4'hF:seg = 8'b10001110; default:seg = 8'b11000000; endcase end
end
endmodule
子模块 1:
module frequency1000( input cp, output reg cp1
); reg [15:0]cnt=0; always@(posedge cp) begin cnt<=cnt+1'b1; if(cnt>=16'b1100001101001111)//50000-1,把 50MHz 分频为 1000Hz begin cp1<=~cp1;
); reg [24:0]cnt=0; always@(posedge cp) begin cnt<=cnt+1'b1; if(cnt>=25'b1011111010111100000111111)//25000000-1,把 50MHz 分
频为 2Hz begin cp0<=~cp0; cnt<={25{1'b0}}; end
NET "cp" LOC = B8;
6
五、 系统使用说明
拨码开关 SW1 为复位开关,拨码开关 SW0 为暂停开关,当 SW0 与 SW1 同时处于闭合 状态时,每过 0.5 秒计一次数,并在数码管上显示,到 59 后回到 00,重新计数。当 SW1 闭合,SW0 断开时,计数暂停。当 SW1 断开,无论 SW0 闭合还是断开,数码管始终显 示 00.当 SW1 闭合后,重新开始计数。
wire tc; wire [3:0]q10; cnt10 U2( .cp0(cp0), .ce(ce), .cr(cr), .tc(tc), .q10(q10[3:0]) );
wire [3:0]q6; cnt6 U3( .tc(tc), .cr(cr), .q6(q6[3:0]) );
slt U4( .cp1(cp1), .cs(cs[3:0]) );
管上保持显示 00,再将 SW1 闭合,观察到数码管上重新计数,完成复位功能。 4、 将 SW0 与 SW1 同时打到闭合,在数码管上显示 05 时,将 SW0 断开,数码管上保
持显示 05,再将 SW1 断开,观察到数码管上保持显示 00,再将 SW1 闭合,观察到 数码管上重新计数,完成在暂停的基础上复位的功能。
# PlanAhead Generated physical constraints
NET "ce" LOC = P11; NET "cr" LOC = L3; NET "seg[0]" LOC = L14; NET "seg[1]" LOC = H12; NET "seg[2]" LOC = N14; NET "seg[3]" LOC = N11; NET "seg[4]" LOC = P12; NET "seg[5]" LOC = L13; NET "seg[6]" LOC = M12; NET "seg[7]" LOC = N13; NET "cs[0]" LOC = J12; NET "cs[1]" LOC = F12; NET "cs[2]" LOC = K14; NET "cs[3]" LOC = M13;
endmodule
子模块 5:
module selector( input [3:0]q0, input [3:0]q1, input [3:0]cs, output [3:0]q );
assign q=cs[0]?q1:q0;
endmodule
子模块 6:
module decoder( input [3:0]q, output reg [7:0]seg );
性能测试: 用电子表测量系统从 00 显示到 59,再到 00 的时间,确实为 30 秒(计数信号为 2Hz), 性能上达到Leabharlann Baidu求。
七、 系统设计开发步骤与过程
1、 明确设计要求与拥有的资源; 2、 设计原理图; 3、 编写代码; 4、 仿真; 5、 修改代码后,重复步骤 4、5,直到仿真结果无误为止; 6、 将代码写入开发板,进行性能与功能测试; 7、 修改代码后,重复步骤 4、5、6、7,直到性能与功能都达到要求为止; 8、 撰写系统说明书与报告。