Есть ли способ дать конкретное значение экземпляра переменной в verilog помимо параметра / defparam и `define подходы? - PullRequest
0 голосов
/ 29 ноября 2018
module top;
    m m1();
    m m2();
endmodule

module m;
    reg r;
    initial begin
        $display("%b", r);
    end
endmodule

Я хочу разные значения для top.m1.r и top.m2.r.Мы можем добиться этого, используя параметр, а затем добавив в него defparams.Но есть ли другой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Я думаю, что использование параметра как @ dave_59 , описанного является предпочтительным методом.Тем не менее, также возможно использовать операторы присваивания с иерархическими ссылками во время выполнения:

module top;
    m m1();
    m m2();

    initial
      begin
        m1.r = 0;
        m2.r = 1;
      end
endmodule

module m;
    reg r;
    initial begin
        #0;
        $display("%b", r);
    end
endmodule

Существует условие гонки, поскольку операторы инициализации и печати происходят в момент времени 0 из-за операторов initial.Вот почему мне пришлось красться с задержкой #0 перед печатью.

0 голосов
/ 29 ноября 2018

Вы не можете использовать `define s, чтобы сделать это, и defparam не рекомендуется.Вы можете сделать

module top;
    m #(0) m1();
    m #(1) m2();
endmodule

module m #(bit P);
    reg r = P;
    initial begin
        $display("%b", r);
    end
endmodule
...