0
  primitive ffjk (Q, Clk, set, reset, J, K);
    output Q;
    input Clk, set, reset, J, K;
    reg Q;
    table
//      Clk  set  reset  J   K   :  Q  :  Qnew
        ?     1     0    ?   ?   :  ?  :    1;
        ?     0     1    ?   ?   :  ?  :    0;
        ?    10     0    ?   ?   :  ?  :    -;
        ?     0    10    ?   ?   :  ?  :    -;
       01     0     0    0   0   :  ?  :    -;
       01     0     0    0   1   :  ?  :    0;
       01     0     0    1   0   :  ?  :    1;
       01     0     0    1   1   :  0  :    1;
       01     0     0    1   1   :  1  :    0;
        ?     0     0    ??  ??  :  ?  :    -;
    endtable
endprimitive

module ff(Q, Clk, set, reset, J, K);
    input Clk, set, reset, J, K;
    output reg Q;

    ffjk M1(Q,Clk,set,reset,J,K);
endmodule

我制作了 JK FF 的原语。然后我制作了一个模块并在其中使用了原语。我还编写了一个测试台来执行此代码。我经常在第二行遇到语法错误。

jkff.v:2: syntax error

我放弃。

4

1 回答 1

1

这是iverilog的问题。它只接受非常古老的 Verilog 语法。将声明写在reg单独的行上。

primitive ffjk (Q, Clk, set, reset, J, K);
    output Q;
    input Clk, set, reset, J, K;
    reg Q;

在 Verilog-2001/SystemVerilog 中写这个的正确方法是

primitive ffjk (output reg Q,
                input Clk, set, reset, J, K );

然后你会遇到桌子的问题。如果您无法弄清楚,您将不得不问另一个问题。

于 2019-12-22T18:12:43.863 回答