利用有限状态机进行时序逻辑的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三利用有限状态机进行时序逻辑的设计
1.实验目的:
(1)掌握利用有限状态机实现一般时序逻辑分析的方法;
(2)掌握用Verilog编写可综合的有限状态机的标准模板;
(3)掌握用Verilog编写状态机模块的测试文件的一般方法。
(4)在数字电路中已经学习过通过建立有限状态机来进行数字逻辑的设计,而在VerilogHDL硬件描述语言中,这种设计方法得到进一步的发展。通过Verilog HDL提供的语句,可以直观的设计出更为复杂的时序逻辑的电路。关于有限状态机的设计方法在教材中已经作了较为详细的阐述。
2.实验环境
PC机一台,安装有quartusII13.0软件以及modulsim软件
3.实验内容
设计一个简单的状态机,功能是检测一个5位二进制序列“10010”。考虑到序列重叠的可能。有限状态机共提供8个状态(包括初始状态IDLE).
4.实验步骤
1)源程序:
module seqdet(x,z,clk,rst,state);
input x,clk ,rst ;
output z;
output [2:0] state ;
reg[2:0] state ;
wire z;
parameter IDLE='d0, A='d1, B='d2,
C='d3, D='d4,
E='d5, F='d6,
G='d7; assign z=(state == E && x==0)?1:0; always @(posedge clk)
if(!rst)
begin
state <= IDLE;
end
else
casex(state)
IDLE:if(x==1)
begin
state <= A;
end
A: if(x==0)
begin
state <= B;
end
B: if(x==0)
begin
state <= C;
end
else
begin
state <= F;
end
C: if(x==1)
begin
state <= D;
end
else
begin
state <= G;
end
D: if(x==0)
begin
state <= E;
end
else
begin
state <= A;
end
E: if(x==0)
begin
state <= C;
end
else
begin
state <= A;
end
F: if(x==1)
begin
state <=A;
end
else
begin
state <= B;
end
G: if(x==1)
begin
state <= F;
end
default : state = IDLE;
endcase
endmodule
测试程序:
`timescale 1ns/1ns
module seqdet_Top;
reg clk,rst;
reg[23:0] data;
wire[2:0] state;
wire z,x;
assign x=data[23];
always #10 clk = ~clk;
always @(posedge clk)
data={data[22:0],data[23]};
initial
begin
clk=0;
rst=1;
#2 rst =0;
#30 rst = 1;
data = 'b1100_1001_0000_1001_0100;
#500 $stop;
end
seqdet m(x,z,clk,rst,state);
endmodule
1)编译结果:
2)功能仿真原理图:
3)RTL原理图:
6、实验心得和体会:
通过本次简单的状态机和串行数据检测器的文本设计和仿真的实验,巩固了用软件完成Verilog语言的文本设计和仿真的基本流程。在状态机和数据检测器的设计实验中,应用和实践有限状态机的标准模板学会了用ifelse实现较大组合逻辑电路的方法,掌握了条件语句等编程语法在简单时序模块设计中的使用以及时序逻辑分析的方法。