FPGA状态机学习笔记verilog

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Single =1'b0;
if(A&~B&C)
next_st =S2;
else if(A&B&~C)
next_st =S4;
else
next_st =S1;
end
S2:
begin
Multi =1'b1;
Contig =1'b0;
Single =1'b0;
if(!D)
next_st =S3;
else
next_st =S4;
begin
if(!Reset)
curr_st=S1;
else
curr_st= #U_DLY next_st;
end
always @(curr_st or A or B or C or D or E)
begin
case(curr_st)
S1:
begin
Multi =1'b0;
Contig =1'b0;
);
input Clock;
input Reset;
input A,B,C,D,E;
output Multi,Contig,Single;
reg Multi;
reg Contig;
reg Single;
parameter [6:0]
S1=7'b0000001,
S2=7'b0000010,
S3=7'b0000100,
// wires
wire Contig;
wire Multi;
wire Single;
// assign statements (if any)
fsm i1 (
// port map - connection between master ports and signals/registers
.A(A),
D=0;
#50
//{A,B,C,D,E}=5'b10111;
A=1;
D=1;
#50
//{A,B,C,D,E}=5'b11011;
A=1;
B=1;
C=0;
#100
//{A,B,C,D,E}=5'b11010;
E=0;
#50
//{A,B,C,D,E}=5'b11011;
E=1;
end
endmodule
注:initial块中语句是顺序执行的,因此在需要延时的时候,按相对时间延时。
module fsm_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg A;
reg B;
reg C;
reg Clock;
reg D;
reg E;
reg Reset;
end
S7:
begin
Multi =1'b0;
Contig =1'b1;
Single =1'b0;
if(E)
next_st =S1;
else
next_st =S7;
end
default:next_st =S1;
endcase
end
endmodule
Modelsim仿真激励文件程序如下:
`timescale 1 ns/ 1 ps
begin
Reset=0;
#100
Reset=1;
end
initial
begin
//{A,B,C,D,E}=5'b10101;
//# 10
// {A,B,C,D,E}=5'b11000;
{A,B,C,D,E}=5'b10111;
//A=1;
//B=0;
//C=1;
#100
//{A,B,C,D,E}=5'b10101;
end
S3:
begin
Multi =1'b0;
Contig =1'b1;
Single =1'b0;
if(A|D)
next_st =S4;
else
next_st =S3;
end
S4:
begin
Multi =1'b1;
Contig =1'b1;
Single =1'b0;
if(A&B&~C)
next_st =S5;
运行仿真图如下:
Gray码源程序如下:
module fsm(
Clock,
Reset,
A,B,C,D,E,Multi,Contig,Single
);
input Clock;
input Reset;
input A,B,C,D,E;
.B(B),
.C(C),
.Clock(Clock),
.Contig(Contig),
.D(D),
.E(E),
.Multi(Multi),
.Reset(Reset),
.Single(Single)
);
initial
begin
Clock=0;
forever #10
Clock=~Clock;
end
initial
FPGA之有限状态机学习笔记
有限状态机(FSM)是由寄存器组合组合逻辑构成的硬件时序电路。FSM的状态只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态。
Mealy型FSM的下一个状态不仅取决于当前所在状态,还取决于各个输入值。
Moore型FSM的下一个状态只取决于当前状态。
Verilog HDL可以用很多方法描述FSM,最常用的是用always语句和case语句。FSM常用模型有Gray和独热码两种,对于用FPGA实现的FSM建议采用独热码。因为采用独热码可省下许多组合电路的使用,提高电路的速度和可靠性,且总的单元数并无显著增加。用Verilog语言描述FSM,可以充分发挥硬件描述语言的抽象建模能力。
S4=7'b0001000,Fra Baidu bibliotek
S5=7'b0010000,
S6=7'b0100000,
S7=7'b1000000;
parameter U_DLY=1;
reg [6:0] curr_st;
reg [6:0] next_st;
always @(posedge Clock or posedge Reset)
else
next_st =S4;
end
S5:
begin
Multi =1'b1;
Contig =1'b0;
Single =1'b0;
next_st =S6;
end
S6:
begin
Multi =1'b0;
Contig =1'b1;
Single =1'b1;
if(!E)
next_st =S7;
else
next_st =S6;
有限状态机设计的一般步骤:
(1)、逻辑抽象,得出状态转换图
(2)、状态化简
(3)、状态分配
(4)、选定触发器的类型并求出状态方程、驱动方程和输出方程
(5)、按照方程得出逻辑图
以下就是分别用独热码和Gray码实现上述状态的源程序:
采用独热码源程序:
module fsm(
Clock,
Reset,
A,B,C,D,E,Multi,Contig,Single
相关文档
最新文档