цикл for в System Verilog с использованием блокирующих операторов приводит к небезопасному поведению - PullRequest
0 голосов
/ 24 октября 2019

У меня есть следующий код:

module cla_rnm_controller (

        ANAVP,
        VS,
        VP
);


input real VS;
input real VP[7:0];
output real ANAVP[7:0];

reg int_ck;

initial begin

    int_ck=0;

end

initial forever #10 int_ck = ~int_ck;

always@(posedge int_ck) 
begin
    for(integer p_cnt=0;p_cnt<8;p_cnt++)
        ANAVP[p_cnt] =  0.1 + (VS-VP[p_cnt])/66.0;
end


endmodule

Когда я симулирую, хотя VP [0] = 50 изначально и VP [0] = 0 от 100 и далее и VS = 50 все время, ANAVP [0] остается 0,1 всего моделирования (300 мс). Шаг по времени составляет 1 нс.

Когда я использую

#(1step) ANAVP[p_cnt] =  0.1 + (VS-VP[p_cnt])/66.0;

ANAVP [0] переходит на 0,855, как и должно быть.

Когда я использую

#1 ANAVP[p_cnt] =  0.1 + (VS-VP[p_cnt])/66.0;

ANAVP [0] также является правильным.

Кто-нибудь может сказать мне, что происходит? Предполагается, что это блокирующее присваивание, и для корректной работы не требуется ни одного из операторов #.

...