FPGA用状态机实现序列检测器的设计.docx
- 文档编号:11484864
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:16
- 大小:186.30KB
FPGA用状态机实现序列检测器的设计.docx
《FPGA用状态机实现序列检测器的设计.docx》由会员分享,可在线阅读,更多相关《FPGA用状态机实现序列检测器的设计.docx(16页珍藏版)》请在冰豆网上搜索。
FPGA用状态机实现序列检测器的设计
******大学
实验报告
课程名称:
基于FPGA的现代数字系统设计
实验名称:
用状态机实现序列检测器的设计
姓名:
******
学号:
**********
班级:
电子******
指导教师:
******
*******信息工程学院
一、实验原理
1、实验内容:
应用有限状态机设计思路,检测输入的串行数据是否是”01111000”。
拟用SW3---SW0,J4接口的E8,F8,C7,D7作为系统输入(系统由此需要设计一个8bits并行数据转串行的模块)
一个7段数码显示译码器作为检测结果的输出显示,如果串行序列为”11100101”,显示a,否则显示b(系统需要设计一个7段数码显示译码器模块)
为了显示可控,清晰,拟用V16,D18实现时钟,复位信号的输入。
本实验由顶层文件、串行检测、并行数据转串行、数码管显示四个模块组成
2、要求:
系统主要包括3个模块:
1)并行数据转串行数据模块(xulie.v)
2)串行检测模块(schk.v)
3)数码管显示模块(decled7s.v)
于需要用按键V16作为时钟输入,按键D18作为系统复位输入,所以需调用实验二中应用的消抖模块,对两个按键输入信号进行消抖。
•并行数据转串行数据模块(xulie.v),串行检测模块(schk.v)均采用有限状态机的描述方式。
•并行数据转串行数据模块(xulie.v)功能描述:
可以异步复位,可以在时钟控制下,将并行输入数据din[7:
0],按照din[7],din[6],din[5],din[4],din[3],din[2],din[1],din[0]的顺序输出至串行检测模块的输入端口din。
•根据设计要求,先画出并行数据转串行数据模块的状态转移图,并写出HDL代码。
•比较实验指导书提供并行数据转串行数据模块的参考代码,总结有限状态机的HDL设计方法。
•串行检测模块(schk.v)
输入信号:
DIN-----1bit的串行输入数据
CLK-----同步输入时钟
CLR------异步清零信号,当CLR=1,系统输出置0,否则,系统正常工作
输出信号:
AB--------4bits数据,如果系统检测到“01111000”这8bit的输入,AB=4’b1010,否则,AB=4’b1011.
•串行检测模块(schk.v)
•画出串行检测模块(schk.v)的状态转移图,并自行设计HDL源代码。
•用VerilogHDL设计数码管驱动电路、系统顶层电路。
3、数码管显示驱动模块(led.v)
输入:
AB[3:
0]-------待显示的数值
输出:
Q[6:
0]----------驱动数码管的七位数值
表2-1共阳极数码管驱动模块输入与输出关系表
输入(4bits)
输出(7bits)
显示内容
4’b1010
7’b1110111
a
4’b1011
7’b1111100
b
4’b0000
7’b1000000
0
4、消抖
(1)按键抖动的产生原因:
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。
图2-3按键抖动波形图
(2)本次实验提供的消抖模块简介
图2-4消抖模块框图
电平检查模块:
检测输入的按键是否被按下或者释放,并分别将H2L_Sig,L2H_Sig拉高,并随后拉低,给出按键的操作信息。
延时模块:
对输入的信号变化时刻进行计时并观察信号的变换情况,对输出端口进行恰当地赋值。
二、实验步骤
1、建立工程:
file->NewProject。
2、建立新VerilogHDL模块编辑窗口,按并行数据转串行数据模块(xulie.v),串行检测模块(schk.v),数码管显示模块(decled7s.v)的目标要求进行设计,模块在综合后,采用画波形的方式编辑测试激励波形,对相关模块进行功能仿真,实现模块的验证、修正。
3、L组合为一个模块,完成综合、功能仿真,分析波形,修正设计。
4、拷贝消抖模块代码:
debounce_module.v,delay_module.v,detect_module.v,组合完成消抖模块。
5、将消抖模块组合入系统综合,不仿真。
6、硬件测试平台设计。
7、顶层模块完成后,双击ImplementDesign,进行布局布线,双击GenerateProgrammingFile生成下载文件,双击ConfigureTargetDevice,按照提示完成下载。
8、下载后,改变拨动开关和按键,观察结果。
9、使用chipscope片内逻辑分析仪对设计进行硬件调试,验证设计是否正确。
掌握该调试方法和调试步骤。
三、实验结果及分析
1、数码管驱动模块(led.v)
moduledecled7s(AB,Q);
input[3:
0]AB;
output[6:
0]Q;
reg[6:
0]Q=7'b1000000;
always@(AB)
begin
if(AB==4'b1010)Q<=7'b1110111;//输出A
elseQ<=7'b1111100;//输出B
end
endmodule
1.1数码管驱动综合
1.2数码管驱动仿真
2、并行数据转串行数据模块(xulie.v)
modulexulie(DIN8,CLK,CLR,DIN);
inputCLK,CLR;
input[7:
0]DIN8;
outputDIN;
reg[2:
0]cur_state,next_state;
regDIN;
parameter
s0=3'b000,
s1=3'b001,
s2=3'b010,
s3=3'b011,
s4=3'b100,
s5=3'b101,
s6=3'b110,
s7=3'b111;
always@(posedgeCLKorposedgeCLR)
begin
if(CLR)cur_state<=s0;
elsecur_state<=next_state;
end
always@(cur_stateorDIN8orDIN)
begin
case(cur_state)
s0:
begin
DIN<=DIN8[7];
next_state<=s1;
end
s1:
begin
DIN<=DIN8[6];
next_state<=s2;
end
s2:
begin
DIN<=DIN8[5];
next_state<=s3;
end
s3:
begin
DIN<=DIN8[4];
next_state<=s4;
end
s4:
begin
DIN<=DIN8[3];
next_state<=s5;
end
s5:
begin
DIN<=DIN8[2];
next_state<=s6;
end
s6:
begin
DIN<=DIN8[1];
next_state<=s7;
end
s7:
begin
DIN<=DIN8[0];
next_state<=s0;
end
default:
begin
DIN<=1'b0;
next_state<=s0;
end
endcase
end
endmodule
2.1并行数据转串行数据综合
2.2并行数据转串行数据仿真
3、串行检测模块(schk.v)
moduleschk(DIN,CLK,CLR,AB);
inputDIN,CLK,CLR;
output[3:
0]AB;
reg[3:
0]cur_state,next_state;
reg[3:
0]AB=4'b0000;
parameter
idle=4'b0000,
s1=4'b0001,
s2=4'b0010,
s3=4'b0011,
s4=4'b0100,
s5=4'b0101,
s6=4'b0110,
s7=4'b0111,
s8=4'b1000;
always@(posedgeCLKorposedgeCLR)
begin
if(CLR)cur_state<=idle;
elsecur_state<=next_state;
end
always@(cur_stateorDIN)
begin
case(cur_state)
idle:
begin
AB<=4'b1011;
if(DIN==1'b0)next_state<=s1;
elsenext_state<=s1;
end
s1:
begin
AB<=4'b1011;
if(DIN==1'b1)next_state<=s2;
elsenext_state<=s1;
end
s2:
begin
AB<=4'b1011;
if(DIN==1'b1)next_state<=s3;
elsenext_state<=s1;
end
s3:
begin
AB<=4'b1011;
if(DIN==1'b1)next_state<=s3;
elsenext_state<=s1;
end
s4:
begin
AB<=4'b1011;
if(DIN==1'b1)next_state<=s5;
elsenext_state<=s1;
end
s5:
begin
AB<=4'b1011;
if(DIN==1'b0)next_state<=s6;
elsenext_state<=idle;
end
s6:
begin
AB<=4'b1011;
if(DIN==1'b0)next_state<=s7;
elsenext_state<=s2;
end
s7:
begin
if(DIN==1'b0)
begin
AB<=4'b1010;
next_state<=s8;
end
elsebegin
next_state<=s2;
AB<=4'b1011;
end
end
s8:
begin
AB<=4'b1011;
if(DIN==1'b1)next_state<=s2;
elsenext_state<=s1;
end
default:
next_state<=idle;
endcase
end
endmodule
3.1串行检测模块综合仿真
4、xulieqi组合模块
modulexulieqi(DIN8,CLK,CLR,Q);
inputCLK,CLR;
input[7:
0]DIN8;
output[6:
0]Q;
wire[3:
0]AB;
xulieu1(.DIN8(DIN8),.CLK(CLK),.CLR(CLR),.DIN(DIN));
schku2(.CLR(CLR),.DIN(DIN),.AB(AB));
decled7su3(.AB(AB),.Q(Q));
endmodule
4.1xulieqi组合模块综合仿真
5、加入消抖模块
moduleStaMachine(CLK_50,CLK,CLR,DIN8,Q);
inputCLK_50,CLK,CLR;
input[7:
0]DIN8;
output[6:
0]Q;
wireCLK_OUT;
debounce_moduleu1(CLK_50,CLR,CLK,CLK_OUT);
xulieqiu2(DIN8,CLK_OUT,CLR,Q);
endmodule
5.1加入消抖模块后综合结果
四、实验思考题解答
1.说明代码表达的是什么类型的状态机,它的优点是什么?
详述其功能和对序列数检测的逻辑过程。
答:
由于状态机输出AB与输入DIN有关,有一定的延时,所以该状态机为Mealy状态机。
状态机在系统时钟的控制下,电路按照预先设定的状态运行,有良好的同步时序,较好的解决了竞争冒险和毛刺现象。
状态的的结构使其在一个时钟周期内可以完成许多并行的运算和控制操作。
五、体会
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 状态机 实现 序列 检测器 设计