lihuailiang 发表于 2020-5-23 17:15:56

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.无波形输出

竹林风234 发表于 2020-5-23 22:51:34

你那个状态机的跳转不对,有几个检测的是state

lihuailiang 发表于 2020-5-27 19:11:28

仿真成功!!

lihuailiang 发表于 2020-5-27 19:12:22

我已研究成功。出仿真波形了!
页: [1]
查看完整版本: FPGA仿真,无波形,求助!!