FPGA仿真,无波形,求助!!
1.代码module FSM_Welcome(
clk,
rst_n,
data,
start,
num
);
input clk;
input rst_n;
input data;
input start; //使能信号
output reg num;//需要检测的序列出现的次数
reg state;
localparam
check_W = 4'd1, //检测W
check_e0 = 4'd2, //检测第一个e
check_l = 4'd3, //检测l
check_c = 4'd4, //检测c
check_o = 4'd5, //检测o
check_m = 4'd6, //检测m
check_e1 = 4'd7; //检测第二个e
always@(posedge clk or negedge rst_n)
if(!rst_n)
begin
state <= check_W;
num <= 3'd0;
end
else if(start)
begin
case(state)
check_W: begin
if(data == "W")
state <= check_e0;
else
state <= check_W;
end
check_e0: begin
if(data == "e")
state <= check_l;
else if(state == "W")
state <= check_e0;
else
state <= check_W;
end
check_l: begin
if(data == "l")
state <= check_c;
else if(state == "W")
state <= check_e0;
else
state <= check_W;
end
check_c: begin
if(data == "c")
state <= check_o;
else if(state == "W")
state <= check_e0;
else
state <= check_W;
end
check_o: begin
if(data == "o")
state <= check_m;
else if(state == "W")
state <= check_e0;
else
state <= check_W;
end
check_m: begin
if(data == "m")
state <= check_e1;
else if(state == "W")
state <= check_e0;
else
state <= check_W;
end
check_e1: begin
if(data == "e")
begin
state <= check_W;
num <= num + 1'd1;
end
else if(state == "W")
state <= check_e0;
else
state <= check_W;
end
default: state <= check_W;
endcase
end
endmodule
2.测试文件
`timescale 1ns/1ns
`define clk_period 20
module FSM_Welcome_tb;
reg clk;
reg rst_n;
wire data;
reg start;
wire num;
//wire flag;
wire data_tmp;
reg data_reg;
assign data_tmp = "abcdeWelcomehijkWelcomedcba";
always@(posedge clk or negedge rst_n)
if(!rst_n)
data_reg <= 0;
else if(start)
data_reg <= data_reg << 8;
else
data_reg <= data_tmp;
assign data = data_reg;
FSM_Welcome FSM_Welcome(.clk(clk),.rst_n(rst_n),.data(data),.start(start),.num(num));
initial clk = 1;
always#(`clk_period/2)clk = ~clk;
initial begin
rst_n = 0;
start = 0;
#(`clk_period*20)
rst_n = 1;
#(`clk_period*10)
start = 1;
#(`clk_period*64)
#200;
$stop;
end
endmodule
3.无波形输出 你那个状态机的跳转不对,有几个检测的是state
仿真成功!! 我已研究成功。出仿真波形了!
页:
[1]