《FPGA数字系统设计》课程
考核大作业
学 院: 电气工程学院 专 业: 电子信息科学与技术 班 级: 电科 XXX 姓 名: XXX 学 号: 31XXXXXXXX 指导教师: XXX 日 期: XXXX年X月
一.实验内容
用FPGA状态机设计一个序列检测器。
二.实验要求
①输入为8bit信号,定义为DATA,串行输入,
DATA=8’b11010010。
②要有一个复位信号ResetN,连在一个按键(要求消抖)。 ③输出Out,4bit信号,如果检测到DATA=8b’11010010,
则Out=4’b1111,否则Out=4’b0000。
三.实验设备
硬件:PC机
软件:Quartus Ⅱ,Modelsim
四.实验分析
1.状态转换图
2. 复位电路消抖模块
always @(posedge clk or negedge rest)
if(!rest)
begin #100
//延迟100ns
if(!rest)
begin
state <= s0;z <= 4'b0000; end
end
五.实验内容
①新建一个工程File-->New Project Wizard,设置如下。
②选择元器件Cyclone IV E-->FBGA-->EP4CE115F29C7。 ③创建Verilog程序文件,命名为seqdet.v. ④对整个工程进行编译。
⑤新建Modelsim工程File-->New--> Project,设置如下。
⑥创建仿真源文件seqdet_tb.v,Add file as type选Verilog。
并向工程中添加seqdet.v文件。
⑦编译并进行仿真。
六.实验代码
seqdet.v源程序清单如下:
module seqdet(x,z,clk,rest); input x; input clk; input rest;
output reg [3:0] z;
parameter s0 = 9'b0_0000_0001, s1 = 9'b0_0000_0010, s2 = 9'b0_0000_0100, s3 = 9'b0_0000_1000, s4 = 9'b0_0001_0000, s5 = 9'b0_0010_0000, s6 = 9'b0_0100_0000, s7 = 9'b0_1000_0000,
s8 = 9'b1_0000_0000; reg [8:0] state;
always @(posedge clk or negedge rest) if(!rest)
begin
#100 //延迟100ns if(!rest)
begin
state <= s0;z <= 4'b0000; end
end else case(state) s0:begin if(x) begin state <= s1;z <= 4'b0000; end else begin state <= s0;z <= 4'b0000; end end s1:begin if(x) begin state <= s2;z <= 4'b0000; end else begin state <= s1;z <= 4'b0000; end end s2:begin if(x) begin state <= s2;z <= 4'b0000; end else