2017-03-22 7 views
1

필자는 본질적으로 아래 예제로 보일 수있는 테스트 벤치를 만났습니다. 클럭 및 신호는 차단 할당으로 동일한 타임 스텝에서 변경됩니다. 나는 이것이 시계와 두 개의 ctrlX 신호 사이의 경쟁 조건을 야기한다고 믿지만 EDA 놀이터에서 증명할 수 없었다. 경쟁 조건이 있다고 수정합니까? (EDA 놀이터 링크 : https://www.edaplayground.com/x/5yDX#&togetherjs=gkG5xewfNN)는 ctrlx에 대한 차단 할당을 사용하고 그들이 posedge clk과 동시에 변화되기 때문에신호 간의 경쟁 조건

module tb_example; 


    reg clk = 1; 
    reg [3:0] dff1,dff2; 
    reg [3:0] ctrl1 = 'd0; 
    reg [3:0] ctrl2 = 'd0; 

    initial begin 
    #10 ctrl1 = 'd1; 
    #20 ctrl1 = 'd2; 
    #10 ctrl1 = 'd3; 
    #100 $finish; 
    end 

    always begin 
    #5 clk = !clk; 
    end 

    initial begin 
    $dumpfile("dump.vcd"); 
    $dumpvars(0,tb_example); 
    end 

    initial begin 
    #10 ctrl2 = 'd1; 
    #20 ctrl2 = 'd2; 
    #10 ctrl2 = 'd3; 
    #100 $finish; 
    end 

    always @ (posedge(clk)) begin 
    dff1 <= ctrl1; 
    end 

    always @ (posedge(clk)) begin 
    dff2 <= ctrl2; 
    end 

endmodule 

답변

1

예, 이것은 경쟁 조건이다. 따라서 dffx에 할당 된 값은 불확실하며 시뮬레이터마다 다를 수 있습니다.

reg clk = 0; 
이를 방지하기

한 가지 방법은 CLK의 negedge에 ctrlx을 변경하는 것입니다