资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
模可变计数器设计( 一 ) 实验目的1、进一步熟悉实验装置和 Quartus H软件的使用;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:0a;reg 11:0 q;reg 11:0 model;reg 7:0 cnt,SG;reg 2:0 sel;reg 0:0d;output 0:0d;always (posedge clk)begin cnt=cnt+1;if (cnt=200) begin clk1=1b1; cnt=0; endelse clk1=1bO; 200分频,CLK为数码管扫描频率,CLK1为计数频率if (sel2) sel=sel+1; else sel=0; end /sel为数码管选择always (sel) begincase (sel)0: a=bw; /0数码管为百位1: a=sw; /1数码管为十位2: a=gw; /2数码管为个位default: a=0;endcasecase (a)0:SG=8b00111111; 1:SG=8b00000110;2:SG=8b01011011; 3:SG=8b01001111;4:SG=8b01100110; 5:SG=8b01101101;6:SG=8b01111101; 7:SG=8b00000111;8:SG=8b01111111; 9:SG=8b01101111; /8段译码值endcase endalways (m)if (m) model=12b000000100000; /模值 20assign gw=q3:0;assign sw=q7:4;assign bw=q11:8;always (posedge clk1,negedge rst)beginif (!rst) q=0;else if (en)beginif (qmodel)begin调整if (gw=9) begin q=q+7; if (sw=9) q=q+96; end /BCDelse q=q+1;endelse q=0;endendalways (q)if(qmodel) d=0;else d=1;endmodule波形仿真:Clk1 是计数频率,每来一个 clk1 信号 q 计数一次 如图所示: rst=1 有效时开始计数 clk 为扫描频率 sel=0 时数码管显示百位 a=0sel=1 时数码管显示十位 a=1sel=2 时数码管显示个位 a=3m=1 模 20 计数器m=0 模 119 计数器管脚分配:SG0 PIN_F13SG1 PIN_F14SG2 PIN_F15SG3 PIN_E15SG4PIN_F16SG5PIN_F17SG6PIN_E18SG7PIN_F18clkPIN_C13enPIN_H8mPIN_J9rstPIN_C5sel0PIN_G18sel1PIN_G17sel2PIN_G16d0PIN_G13(五)实验心得本实验主要是三大模块的编写, 第一次的实验在老师给的参考代码下进 行的,不过错误依然很多,主要有几个重点药掌握,一是首先要编写出能够 计数的模块,用m来控制模值的变化 m=1时模值为20 m=0时模值为119;二 是计数模块都是二进制计数的,而要在数码管上显示计数的话就必须进行 BCD调整,并且q是一个是十二位的寄存器,通过把 gw=q3:0; sw=q7:4; bw=q11:8 赋值的方法;一个个的显示在数码管上,由于 clk 的频率比较快,所以可以看到三位数码管显示的值,我觉得管脚分 配也是比较关键的!一开始我就把个位和百位显示的值搞反了序列信号发生和检测器设计( 一 ) 实验目的1、进一步熟悉EDA实验装置和Quartus H软件的使用方法;2、学习有限状态机法进行数字系统设计;3、学习使用原理图输入法进行设计( 二 ) 设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能,具体要求如下:1、再设计一个序列信号检测器,检测上述序列信号,若检测 到串行序列“ 11101”则输出为“ 1”,否则输出为“ 0”;( 三 ) 主要仪器设备1、微机 1 台2、QuartusII 集成开发软件1套3、EDA实验装置1套( 四 ) 实验步骤主要两部分1:序列信号发生器 设置q0=q15;Q=q15; q15:1=q14:0 ;通过循环移位串行输出2:序列信号检测器状转移态图 一共有六个状态分别为S = 5d00000,A = 5d00001,B = 5d00011,C = 5d00110,D = 5d01101,E = 5d11010;源程序: module xulie(clk,rst,z,Q,led);input clk,rst;output Q,z;output 4:0 led; reg 4:0 led; reg 4:0 state; reg Q,z; reg 4:0 a; reg 15:0 q; parameter S = 5d00000,A = 5d00001, B = 5d00011, C = 5d00110, D = 5d01101, E = 5d11010; always (posedge clk) beginif(rst=0) begin end else begin q0=q15; Q=q15; q15:1=q14:0 ; endend always (posedge clk) beginif(state=D & Q=1) begin z=1;led=5b11101;endelse begin z=0;led=5b00000;end endalways (posedge clk or negedge rst) beginstate=S;end else casex(state) S: if(Q=1) state=A;else state=S;A: if (Q=1) state=B;else state= S;B: if (Q=1) state=C;else state=S;C: if(Q=0) state=D;else state=C;D: if(Q=1) state=E;else state=S;E: if(Q=0) state=S;else state=A; default: state=S; endcase endmodule 波形仿真当 rst=1 是序列信号发生器循环发出 当检测到 11101 是 z=1 输出高电平, 并且同时使 11101 序列显示在五个 led 灯上( 五 ) 实验心得 做实验之前准备了很多,实验时还是出现了很多问题,一开始序列信号发生 器在第一个周期之后就会多出一个 0 即输出 0,原因在于 Q=q15; q15:1=q14:0 ;q0=Q; 因为 q0=Q 需要一个时钟的上升沿才能执行, 所以就会多输出一 个 0 ;其次状态转移图也是关键,需要记忆六个不同的状态;做这个实验让我学到了 casex 的一些用法;进一步了解编写 verilog 语言
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号