模可变计数器设计Verilog语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模可变计数器设计
V e r i l o g语言
Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】
模可变计数器设计
(一)实验目的
1、进一步熟悉实验装置和QuartusⅡ软件的使用;
2、进一步熟悉和掌握EDA设计流程;
3、学习简单组合、时序电路的EDA设计;
4、学习计数器中二进制码到BCD码的转换技巧;
5、学习实验装置上数码管的输出方法。
(二)设计要求
完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:
1、设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值自行确定)
的数,没按下时模为100-199之间(具体数值自行确定)的数;
2、计数结果用三位数码管十进制显示。
(三)主要仪器设备
3、微机1台
4、QuartusII集成开发软件
1套
5、EDA实验装置1套
(四)实验步骤
主要有三个模块
1:一个模20和模119的计数器
2:数码管的显示
3:BCD的调整
源程序:
module count (clk,m,en,rst,a,sel,SG,d);
input clk,m,en,rst;
output [7:0] SG;
output [2:0] sel;
output a;
(* synthesis, keep *) reg clk1;
(* synthesis, keep *) wire [3:0] gw,sw,bw;
/*(* synthesis, keep *) */reg [3:0]a;
reg [11:0] q;
reg [11:0] model;
reg [7:0] cnt,SG;
reg [2:0] sel;
reg [0:0]d;
output [0:0]d;
always @(posedge clk)
begin cnt=cnt+1;
if (cnt==200) begin clk1=1'b1; cnt=0; end
else clk1=1'b0; //200分频,CLK为数码管扫描频率,CLK1为计数频率 if (sel<2) sel=sel+1; else sel=0; end //sel为数码管选择
always @(sel) begin
case (sel)
0: a=bw; //0数码管为百位
1: a=sw; //1数码管为十位
2: a=gw; //2数码管为个位
default: a=0;
endcase
case (a)
0:SG<=8'b00111111; 1:SG<=8'b00000110;
2:SG<=8'b01011011; 3:SG<=8'b01001111;
4:SG<=8'b01100110; 5:SG<=8'b01101101;
6:SG<=8'b01111101; 7:SG<=8'b00000111;
8:SG<=8'b01111111; 9:SG<=8'b01101111; //8段译码值
endcase end
always @(m)
if (m) model=12'b000000100000; //模值20
assign gw=q[3:0];
assign sw=q[7:4];
assign bw=q[11:8];
always @(posedge clk1,negedge rst)
begin
if (!rst) q=0;
else if (en)
begin
if (q begin if (gw==9) begin q=q+7; if (sw==9) q=q+96; end //BCD调整 else q=q+1; end else q=0; end end always @(q) if(q else d<=1; endmodule 波形仿真: Clk1是计数频率,每来一个clk1信号q计数一次 如图所示:rst=1有效时开始计数 clk为扫描频率 sel=0时数码管显示百位a=0 sel=1时数码管显示十位a=1 sel=2时数码管显示个位a=3 m=1 模20计数器 m=0 模119计数器 管脚分配: SG[0] PIN_F13 SG[1] PIN_F14 SG[2] PIN_F15 SG[3] PIN_E15 SG[4] PIN_F16 SG[5] PIN_F17 SG[6] PIN_E18 SG[7] PIN_F18 clk PIN_C13 en PIN_H8 m PIN_J9 rst PIN_C5 sel[0] PIN_G18 sel[1] PIN_G17 sel[2] PIN_G16 d[0] PIN_G13 (五)实验心得 本实验主要是三大模块的编写,第一次的实验在老师给的参考代码下进行的,不过错误依然很多,主要有几个重点药掌握,一是首先要编写出能够计数的模块,用m来控制模值的变化m=1时模值为20 m=0时模值为119;二是计数模块都是二进制计数的,而要在数码管上显示计数的话就必须进行BCD调整,并且q是一个是十二位的寄存器,通过把gw=q[3:0]; sw=q[7:4]; bw=q[11:8]赋值的方法;一个个的显示在数码管上,由于clk的频率比较快,所以可以看到三位数码管显示的值,我觉得管脚分配也是比较关键的!一开始我就把个位和百位显示的值搞反了 序列信号发生和检测器设计 (一)实验目的 1、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法; 2、学习有限状态机法进行数字系统设计; 3、学习使用原理图输入法进行设计。 (二)设计要求 完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能,具体要求如下: 1、再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“11101”则 输出为“1”,否则输出为“0”; (三)主要仪器设备 1、微机1台 2、QuartusII集成开发软件 1套 3、EDA实验装置1套