110序列检测器仿真报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Lab 110序列检测器仿真
1.实验目的
学会序列检测的设计,学会modelsim的使用,熟悉用Quartus编译Verilog语言的方法,熟悉DEO板的操作。
2.实验内容
1)用HDL语言的输入方式,实现110序列检测器。
2)用modelsim进行仿真。
3)用DE0下载并进行测试。
3.代码分析
1)该实验使用状态机进行设计,使用两个always语句,一个作为时序逻辑,另一个作为组合逻辑,其结构图为
2)首先定义输入输出变量和中间变量:
module test110(data_in,data_out,Q,cp,en);
output data_out,Q; //定义输出变量;
input data_in,cp,en; //定义输出变量;
reg data_out; //定义中间变量;
reg[1:0]pres_state,next_state; //定义两个时态;
wire Q; //定义wire型中间变量;
parameter s0=2'd0,s1=2'd1,s2=2'd2; //指定状态编码;
3)第一个always语句实现时序逻辑功能:
fenpinqi(Q,cp); //调用分频器,改变时钟信号;
always@(posedge Q or negedge en) //采用边沿触发;
if(~en)pres_state<=s0; //清零;
else pres_state<=next_state; //在Q上升沿触发器状态翻转;
4)第二个always语句实现组合逻辑功能:
always@(pres_state or data_in) //电平触发事件
Begin
next_state<=2' xx; //定义输出为零
data_out=1'b0;
case(pres_state) //判断条件为现态的状态,对各状态值惊醒判断,并输出值s0:next_state<=(data_in==1)?s1:s0;
s1:next_state<=(data_in==1)?s2:s0;
s2:begin
next_state<=(data_in==1'b1)?s2:s0;
if(data_in==1'b0)data_out=1'b1;
end
endcase
end
endmodule
5)所调用的分频器的模块:
module fenpinqi(Q,CP);
output Q; //定义输出端口
input CP; //定义输入端口
wire [32:0]A; //定义中间变量
counter(A,CP); //调用计数器进行计数
D_FF(Q,~Q,CP,A); //调用D触发器是信号发生翻转endmodule
module counter(Q,CP); //计数器,每第25M个信号发生一次变化output Q[32:0]; //定义输出端口
input CP; //定义信号输入端口
reg[32:0]Q; //定义中间变量
always@(posedge CP) //采用边沿触发
if(Q==33'd2*******)Q<=33'd0;//每25M作为一个计数周期
else Q<=Q+1'd1; //Q自增并输出
endmodule
module D_FF(Q,D,CP,CR); //D触发器
output Q; //定义输出端
input D,CP; //定义输入端及D信号输入
input [32:0]CR; //定义输入变量
reg Q; //定义中间变量
always@(posedge CP) //采用边沿触发
if(CR==0)Q<=D; //将D值赋给Q
else Q<=Q; //Q保持不变
endmodule
4.实验步骤
1)打开Quartus软件,选择“File=>New Project Wizard”,在弹出的窗口中输入项目的名称
和存储位置。
2)单击两次Next后,选择实验板的具体型号,本次使用EP3C16F484C6。
3)继续单击Next,确认信息无误后,单击Finish完成项目的创建。
将文件保存在与项目文件同样的位置即可。
5)选择“Processing=》Start Compilation”开始编译,编译通过后可以查看生成的Report。
6)新建“Vector Waveform File”,并导入所有引脚。
7设置仿真类型为功能仿真。导入网络表。
进行功能仿真。仿真效果如下:
8)打开modelsim,创建工程
9)写入程序源代码:
10)创建用于书写测试波形的源文件
11)添加文件并编译
12)创建仿真设定
13)添加测试端口并开始测试
14)选择“assignment=》pins”进行引脚设置,设置如下:
15)再次进行编译。
16)将程序下载到DEO实验板进行测试。
5.实验结果的测试和分析
将程序下载到DE0实验板上进行测试:
将开关置1,时钟信号灯闪烁两次后将开关置0,可以看到输出对应的LED灯点亮,而后熄灭,说明改程序能过检测110序列。
6.实验总结
通过这个实验我学会了序列检测器的设计,学会了modelsim的使用,掌握了Verilog HDL语言编程的基本语法以及Quartus软件的一些常用操作,熟悉了与DEO实验板相关的一系列实验流程。
7.参考文献
[1] 罗杰. Verilog HDL与数字ASIC设计基础武汉:华中科技大学出版社,2008.
[2]康华光. 电子技术基础(数字部分)[数字部分][M]. 5版. 北京:高等教育出版社,2006.