hdl模拟

时间:2018-02-27 20:24:49

标签: verilog simulation fpga hdl vivado

我正在尝试使用Vivado模拟AXI4(Full)主控。它应该在从属端写入以下值(在我的情况下,这将是我的zedboard PS中的一些寄存器)

0x0000fe01 to 0xe000a204
0x0000fe01 to 0xe000a208
0x00000001 to 0xe000a040

我检查了AXI协议,这是我必须实施的FSM。fsm

这是块级设计。

block level design

当我运行行为综合时,它有效。

results of behavioural simulation

然而,当我尝试运行后综合功能模拟(据说更接近实际设计并包括门延迟)时,我得到一些不确定的值
result of post synthesis

如果您需要检查,这是完整的项目和主IP。

vivado project(using vivado 2015.2) axi_controller

以下是自上而下的单个verilog文件(仅为了便于访问):

axi_controller_testbench.v

design_1_wrapper.v

design_1.v

axi_controller_v1_1.v(这是我为FSM进行状态计算的地方,我将状态发送到接口单元,以便它可以为端口分配适当的值)

axi_controller_v1_1_M00_AXI.v(这是IP中的接口单元)

我已将问题缩小到我的代码中的这一部分。

//state updation
always @(posedge m00_axi_aclk) begin
    if(m00_axi_aresetn==1'b0) begin
        cur<=t_0;
        next<=t_0;
    end
    else begin
        cur<=next;
    end
end

//state calculation
always @(*) begin
    case(cur) 
        t_0: begin
            if(m00_axi_init_axi_txn) next=t_1;
            else next=t_0;
        end
        t_1: begin
            next=t_2;
        end
        t_2: begin
            if(m00_axi_awready) begin
                if(m00_axi_wready) next=t_4;
                else next=t_3;
            end
            else next=t_2;
        end
        t_3: begin
            if(m00_axi_wready) next=t_4;
            else next=t_3;
        end
        t_4: begin
            if(m00_axi_awready) begin
                if(m00_axi_wready) next=t_6;
                else next=t_5;
            end
            else next=t_4;
        end
        t_5:  begin
            if(m00_axi_wready) next=t_6;
            else next=t_5;
        end
        t_6: begin
            next=t_6;
        end
    default next=t_0;
    endcase
end

其中,

parameter t_0=3'b000, 
parameter t_1=3'b001, 
parameter t_2=3'b010,
parameter t_3=3'b011, 
parameter t_4=3'b100, 
parameter t_5=3'b101, 
parameter t_6=3'b110,

100nsINIT_AXI_TRANS更改为0 1变为next时,00x

zoomed in at the root of the issue

因为cur000(或t_0),所以应该实施第一个案例。当next变为00x时,我认为它无法确定INIT_AXI_TRANS0还是1。然后,这种效应会在电路的其余部分传播。

任何人都可以帮助我找出我如何解决这个问题 提前谢谢。

我做了第一条评论中建议的内容,并在此处和git存储库中更新了代码。可悲的是,似乎这不是问题,因为我仍然得到相同的结果。

1 个答案:

答案 0 :(得分:0)

您正在多个进程中为next分配值。在重置过程和状态变化过程中。