elsed<=1;
endmodule
2.选目标器件CycloneII中的EP2C35F672C8并编译。
3.建立仿真波形文件,进行波形仿真。
(复位清零以及使能仿真,当rst=0时,清零,当en=0,计数值维持不变)
(M=0时模119计数仿真,当q=119时,d为高电平)
(M=1时模20计数仿真,当q=20时,d为高电平)
波形分析:
当置位rst为低电平时,计数清零,当RST为高电平,使能位en为高电平时,开始计数:
模控制位m为低电平时,则计数器记到119时归0后重新计数,实现模为120的计数功能;模控制位m为高电平时,则计数器记到20时归0后重新计数,实现模为21的计数功能。
4.引脚锁定,包装元件。
5、下载测试。
下载到实验箱上测试,下推K3(m=0),可以从实验箱数码管观察到0~119模120计数。
按下K2(RST=1)可以使计数器复位清零。
K1下推(en=0),计数值维持不变。
将K3上推(m=1),可在数码管上观察0~20模21的计数,可知测试结果符合模可变计数器要求。
6、实验小结
在前面基础实验的基础上进一步深入理解实验台的配置,个人觉得知识学习了更重要的在于整合内化成为自己的东西,才能运用的游刃有余,才能在以后的世纪应用中使用到。
对于参考程序中的不理解的寄存器设置或者不理解的语句要学会查用户手册寻找答案;另外分析程序时,要将硬件和软件结合起来看,分析其各个部分连接能够实现的功能。
首先,通过这次实验,我能完成简单的设计;其次,在对模可变计数器设计过程中,花了很多时间,发现自己有很多不足,需要多看书多程序,训练自己的逻辑思维也非常重要最后,希望在以后的学习中,多用心去学习EDA这门技术,在实际操作中慢慢提高自己的设计能力。
南昌大学实验报告
学生姓名:
曾维鋆学号:
61002213863专业班级:
通信132班
实验类型:
□验证□综合█设计□创新实验日期:
2015.11.2实验成绩:
实验三序列信号检测器的设计
(一)实验目的
1、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法;
2、学习有限状态机法进行数字系统设计;
3、学习使用原理图输入法进行设计。
(二)设计要求
完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能,具体要求如下:
1、先用设计0111010011011010序列信号发生器,其最后6BIT数据用LED显示出来;
2、再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“11101”则输出为“1”,否则输出为“0”;
(三)主要仪器设备
1、微机1台
2、QuartusII集成开发软件1套
3、EDA实验装置1套
(四)状态转移
(五)实验步骤
1.建立工作库文件夹,输入计数器的VerilogHDL代码并存盘。
modulexulie(clk,f,m,clr1,clr2,ld,s,c);
inputclk,clr1,clr2,ld;
outputf,m,c;
output[4:
0]s;
regf,m;
reg[2:
0]q2;
reg[4:
0]z,s;
reg[15:
0]wo;
assignc=clk;
parameter[15:
0]xulie=16'b0111010011011010;//要产生的序列
parameter[4:
0]q1=5'b11101;//要检测的序列;.
always@(posedgeclk,negedgeclr1)
if(~clr1)f<=0;//清产生序列
elseif(ld)wo<=xulie;
elsebeginwo[0]<=wo[15];
f<=wo[15];
wo[15:
1]<=wo[14:
0];//并行转换为串行
end
always@(posedgeclkornegedgeclr2)
begin
if(~clr2)q2<=0;//清检测序列
else
case(q2)
0:
if(f==q1[4])q2<=1;elseq2<=0;
1:
if(f==q1[3])q2<=2;elseq2<=0;
2:
if(f==q1[2])q2<=3;elseq2<=0;
3:
if(f==q1[1])q2<=4;elseq2<=3;
4:
if(f==q1[0])q2<=5;elseq2<=0;//状态转移
default:
q2<=0;
endcase
end
always@(q2)
if(q2==5)m<=1;elsem<=0;//检测到11101,输出1
always@(posedgeclk)
begin
z[4:
1]=z[3:
0];
z[0]=f;
s<=z;//转换为并行输出
end
endmodule
2.选目标器件CycloneII中的EP2C35F672C8并编译。
3.建立仿真波形文件,进行波形仿真。
(检测到序列11101时,m=1)
说明:
当检测到“11101”序列时,m=1,clr1=1,clr2=1
4.引脚锁定,包装元件。
5、下载测试
1)连接电源,将开关k1,k2拨上,将k3拨上再拨下,即此时clr1=1,clr2=1,输入下一个脉冲即
LED灯1、2、3、4亮时,LED灯6亮,即m=1,为高电平,说明检测到了序列11101。
2)将开关K2拨下即clr2=0,观察得当第LED灯1、2、3、4亮时,即产生序列11101时,LED灯6不亮,说明m=0时,即clr2=0时,清检测序列。
3)将开关K1拨下,K2拨上,即clr1=0,LED灯不再亮,清产生序列。
6、实验小结
在前面基础实验的基础上进一步深入理解实验台的配置,个人觉得知识学习了更重要的在于整合内化成为自己的东西,才能运用的游刃有余,才能在以后的世纪应用中使用到。
对于参考程序中的不理解的寄存器设置或者不理解的语句要学会查用户手册寻找答案;另外分析程序时,要将硬件和软件结合起来看,分析其各个部分连接能够实现的功能。
通过本设计,进一步加深了对Verilog HDL语言的理解及应用,用Verilog HDL语言来设计电路,思路更清晰,更简洁,实现起来更加的得心应手。
这就是电子系统EDA最好的体现。
对序列信号检测器的设计的设计更加明白了,同时清产生序列和检测序列的原理也弄懂了。
还有引脚锁定的时候,clr1,clr2都是选择用户开关而不是用户按键,是为了方便操作。
南昌大学实验报告
学生姓名:
曾维鋆学号:
61002213863专业班级:
通信132班
实验类型:
□验证□综合█设计□创新实验日期:
2015.11.9实验成绩:
实验四交通灯控制器设计
合作人:
陈亚亚(8001713021)
(一)实验目的
1、学习与日常生活相关且较复杂数字系统设计;
2、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法;
3、学习二进制码到BCD码的转换;
4、学习有限状态机的设计应用。
(二)设计要求
完成设计、仿真、调试、下载、硬件测试等环节,在型EDA实验装置上实现一个由一条主干道和一条乡间公路的汇合点形成的十字交叉路口的交通灯控制器功能,具体要求如下:
1、有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;
2、交通灯由绿转红前有4秒亮黄灯的间隔时间,由红转绿没有间隔时间;
3、乡间公路右侧各埋有一个串连传感器,当有车辆准备通过乡间公路时,发出请求信号S=1,其余时间S=0;
4、平时系统停留在主干道通行(MGCR)状态,一旦S信号有效,经主道黄灯4秒(MYCR)状态后转入乡间公路通行(MRCG)状态,但要保证主干道通行大于一分钟后才能转换;
5、一旦S信号消失,系统脱离MRCG状态,即经乡道黄灯4秒(MRCY)状态进入MGCR状态,即使S信号一直有效,MRCG状态也不得长于20秒钟;
6、控制对象除红绿灯之外,还包括分别在主干道和乡间公路各有一个两位十进制倒计时数码管显示。
(三)主要仪器设备
1、微机1台
2、QuartusII集成开发软件1套
3、EDA实验装置1套
(4)实验步骤
1、交通灯的状态转移
状态转移图共有四个状态:
S0=MGCR(主绿乡红)S1=MYCR(主黄乡红)
S2=MRCG(主红乡绿)S3=MRCY(主红乡黄)
2、建立工作库文件夹,输入计数器的VerilogHDL代码并存盘。
moduletraffic(clk,s,rst,MG,CR,MY,MR,CG,CY,sel,SG);
inputclk,rst,s;
outputregMG,CR,MY,MR,CG,CY;
outputreg[7:
0]SG;
outputreg[2:
0]sel;
parameters0=0,s1=1,s2=2,s3=3;
(*synthesis,keep*)regclk1;
reg[7:
0]timMG,timCG,timY;
reg[7:
0]tim;
reg[1:
0]cs;
reg[1:
0]next_state;
reg[3:
0]gw,sw;
reg[7:
0]cnt,a;
always@(cs)//状态机控制
case(cs)
s0:
if(tim=='b0&&s=='b1)next_state<=s1;elsenext_state<=s0;
s1:
if(tim=='b0)next_state<=s2;elsenext_state<=s1;
s2:
if(tim=='b0||s==0)next_state<=s3;elsenext_state<=s2;
s3:
if(tim=='b0)next_state<=s0;elsenext_state<=s3;
default:
next_state<=s0;
endcase
always@(posedgeclk1orposedgerst)
begin
if(rst)
cs<=s0;
else
cs<=next_state;
end
always@(negedgeclk1)
case(cs)
s0:
beginMY<='b0;CR<='b1;MG<='b1;MR<='b0;CG<='b0;CY<='b0;end
s1:
beginMY<='b1;CR<='b1;MG<='b0;MR<='b0;CG<='b0;CY<='b0;end
s2:
beginMY<='b0;CR<='b0;MG<='b0;MR<='b1;CG<='b1;CY<='b0;end
s3:
beginMY<='b0;CR<='b0;MG<='b0;MR<='b1;CG<='b0;CY<='b1;end
default:
beginMY<='b0;CR<='b1;MG<='b1;MR<='b0;CG<='b0;CY<='b0;end
endcase
always@(negedgeclk1,posedgerst)//倒数计时
if(rst)//设置各种灯的计数器的预置数
begintimMG<=8'b01011001;timCG<=8'b00011001;timY<=8'b00000011;end
else
begin
case(cs)
'b00:
begin
if(timMG>0)
begin
beginif(timMG[3:
0]==0)timMG<=timMG-7;
elsetimMG<=timMG-1;endtim<=timMG;timCG<=8'b00011001;end
elsebegintim<=0;timMG<=8'b01011001;end
end
'b01:
begin
if(timY>0)
begin
beginif(timY[3:
0]==0)timY<=timY-7;
elsetimY<=timY-1;endtim<=timY;end
elsebegintim<=0;timY<=8'b00000011;end
end
'b10:
begin
if(timCG>0)
begin
beginif(timCG[3:
0]==0)timCG<=timCG-7;
elsetimCG<=timCG-1;endtim<=timCG;end
elsebegintim<=0;timCG<=8'b00011001;end
end
'b11:
begin
if(timY>0)
begin
beginif(timY[3:
0]==0)timY<=timY-7;
elsetimY<=timY-1;endtim<=timY;end
elsebegintim<=0;timY<=8'b00000011;end
end
default:
begin
timMG<=8'b01011001;timCG<=8'b00011001;timY<=8'b00000011;tim<=0;end
endcase
end
//modulefengpym(clk,tim,clk1,sel,SG);
always@(posedgeclk)
begin
cnt=cnt+1;
if(cnt==200)beginclk1=1'b1;cnt=0;end
elseclk1=1'b0;//100分频,CLK为数码管扫描频率
gw<=tim[3:
0];
sw<=tim[7:
4];
if(sel<7)sel=sel+1;elsesel=6;//sel为数码管选择
end
always@(sel)begin
case(sel)
7:
a=gw;//1数码管为个位
6:
a=sw;//0数码管为十位
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段译码值
default:
SG=8'b11111111;
endcaseend
endmodule
2.选目标器件CycloneII中的EP2C35F672C8并编译。
3.建立仿真波形文件,进行波形仿真。
开始60s倒计时初始状态主绿乡红
当s=1时,仍然保证是60s的主绿乡红
S=1时60s倒计时结束转4s倒计时即状态主黄乡红
S=1时4s倒计时结束转20s倒计时即状态主红乡绿