verilog实现序列检测器.docx
《verilog实现序列检测器.docx》由会员分享,可在线阅读,更多相关《verilog实现序列检测器.docx(8页珍藏版)》请在冰点文库上搜索。
verilog实现序列检测器
西北工业大学
《串行数据检测器》实验报告
学院:
软件与微电子学院
学 号:
200830****
姓 名:
陈昊
专业:
微电子学
实验时间:
2010年11月
实验地点:
实验室及宿舍
指导教师:
西北工业大学
2010年11月
一、实验目的及要求
目的:
1、掌握利用有限状态机实现一般时序逻辑分析的方法;
2、掌握用verilog编写可综合的有限状态机的标准模板;
3、掌握用verilog编写状态机模块的测试文件的一般方法。
要求:
1.设计一个串行数据检测器。
要求:
连续4个或4个以上为1时输出为1,其他输入情况为0。
编写测试模块对设计的模块进行各层次的仿真,并观察波形,编写实验报告。
二、实验设备(环境)及要求
实验设备:
PC机一台
环境要求:
安装Modelsim仿真软件以及SynplifyPro综合工具
三、实验内容与步骤
1.分析序列检测器示意图
2.参照可综合有限状态机模板编写序列检测器源代码serial_detected.v如下
/*
*@fileserial_detected.v
*@Synopsis这是一个利用有限状态机实现的串行数据检测器,
*连续4个或4个以上为1时输出为1,其他输入情况为0。
*@Author陈昊,@
*@Version1
*@Date2010-11-04
*/
/*
*Copyright(C)2010-
*By陈昊
*Allrightreserved
*
*/
moduleserial_detected(din,clk,reset,out);
inputdin;//串行数据输入
inputclk;//时钟输入
inputreset;//异步复位信号输入
outputout;//结果输出
regout;
reg[3:
0]state,nextstate;
//状态编码
parameter
Idle=3'b000,
First_bit=3'b001,
Second_bit=3'b010,
Third_bit=3'b011,
Fourth_bit=3'b100;
//----------------更新当前状态--------------------------
always@(posedgeclkornegedgereset)
begin
if(!
reset)
state<=Idle;
else
state<=nextstate;
end
//------------------------------------------------------
//-------------产生下一状态组合逻辑---------------------
always@(stateordin)
begin
case(state)
Idle:
if(din)
nextstate=First_bit;
else
nextstate=Idle;
First_bit:
if(din)
nextstate=Second_bit;
else
nextstate=Idle;
Second_bit:
if(din)
nextstate=Third_bit;
else
nextstate=Idle;
Third_bit:
if(din)
nextstate=Fourth_bit;
else
nextstate=Idle;
Fourth_bit:
if(din)
nextstate=Fourth_bit;
else
nextstate=Idle;
default:
nextstate=3'bxxx;
endcase
end
//------------------------------------------------------
//--------------产生输出的组合逻辑----------------------
always@(stateorresetordin)
begin
if(!
reset)
out<=0;
else
if(state==Fourth_bit)
out<=1;
else
out<=0;
end
//------------------------------------------------------
endmodule
3.编写测试模块test_serial_detected.v如下
/*
*@Filetest_serial_detected.v
*@Synopsis这是串口序列检测器的测试文件
*@Author陈昊,@
*@Version1
*@Date2010-11-04
*/
/*
*Copyright(0C)2010-
*By陈昊
*Allrightreserved
*/
`timescale1ns/1ns
moduletest_serial_detected;
regdin;
regclk,reset;
wireout;
//--------初始化信号和变量--------------------------
initial
begin
din=0;
reset=1;//给复位信号变量赋初值
clk=0;//给时钟变量赋初值
#22reset=0;//使复位信号有效
#133reset=1;//经过一个多周期以后是复位信号无效
end
//---------------------------------------------------
//--------产生信号和控制-----------------------------
always#50clk=~clk;//产生周期性时钟
always@(posedgeclk)//在每次时钟正跳变沿时刻产生不同的din
begin
#50din<={$random}%2;//din的值是随机产生的
#(3*50+12);//din的值维持一段时间
end
initial//暂停仿真以便观察仿真波形
begin
#100000$stop;
end
//---------------------------------------------------
//----------------调用被测试模块---------------------
serial_detectedtsd(.clk(clk),.reset(reset),.out(out),.din(din));
//---------------------------------------------------
endmodule
4.利用Modelsim编译纠错和仿真
5.利用SynplifyPro进行综合
6.利用Quartus2进行布局布线
四、实验结果与数据处理
1.Modelsim仿真波形如下,自上向下信号依次为reset、clk、din、out
2.选择AlteraSTRATIX器件库综合产生的RTL级电路如下
3.使用QuatusII进行布局布线结果如下
4.使用Modelsim进行后仿真波形如下
五、分析与讨论
用有限状态机编写的该序列检测器成功的通过了综合和布局布线,分析前仿真和后仿真波形发现,该电路功能完全正确,实现了预定任务。
六、教师评语
签名:
日期:
成绩