110序列检测器仿真报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.

相关文档
最新文档