综合后Mealy有限状态机仿真异常问题求助
非重叠序列检测器综合后仿真异常问题排查
问题背景
我正尝试根据状态机设计一个非重叠序列检测器,状态机示意图如下:
设计代码(SystemVerilog三段式实现)
typedef enum { S0, S1, S2, S3 } State; module ass26( input sysclk, rst, in, output out ); State state, stateNext; logic dout; always @(posedge sysclk) begin if (rst) state <= S0; else state <= stateNext; end // next-state logic always_comb begin stateNext = state; case (state) S0 : begin if (in == 1'b1) stateNext = S1; end S1: begin if (in == 1'b0) stateNext = S2; end S2: begin if (in == 1'b1) stateNext = S1; else stateNext = S3; end S3: begin stateNext = S0; end default: stateNext = S0; endcase end // output logic always_comb begin dout = (state == S3) & in; end assign out = dout; endmodule
注:采用三段式写法,我知道资深工程师一般不这么用,但应该不影响功能。
测试平台代码
`timescale 1ns / 1ps module ass26_tb(); reg sysclk, rst, in, out; ass26 dut (.sysclk(sysclk), .rst(rst), .in(in), .out(out)); initial begin sysclk = 0; forever #10 sysclk = ~sysclk; end initial begin rst = 1'b1; in = 1'b0; #15; rst = 0; in = 0; #10; in = 1; #20; in = 0; #20; in = 1; #20; in = 0; #20; in = 0; #20; in = 1; #20; $finish(); end
行为仿真结果
行为仿真符合预期,输出能根据当前状态和输入异步响应,符合Mealy机的特性,波形如下:
Vivado生成的行为级原理图:
异常现象:综合后仿真失效
综合设计后,仿真无法正常工作,波形如下:
综合后原理图:
我无法定位问题根源。10年前在大学学过VHDL,此后未接触FPGA,现在重新学习Verilog/SystemVerilog,从基础做起。我用纯Verilog重写过代码,甚至参考了网上的其他示例,但结果一致。我忽略了什么?
感谢您的帮助!
内容的提问来源于stack exchange,提问作者Noxet
相关产品推荐
相关产品推荐

