在Verilog中实现JK触发器

在Verilog中实现JK触发器,verilog,Verilog,我试图在Verilog(Modelsim)中实现simpleJK触发器。但是我得到了以下错误 生成if条件必须是常量表达式 这是我正在使用的代码 module jkfflop(J,K,clk,Q); input J,K,clk; output Q; if(J==0 & K==1) begin assign Q = 0; end else if(J==1 & K==0) begin assign Q = 1; end else if(J==1 &a

我试图在Verilog(Modelsim)中实现simple
JK触发器。但是我得到了以下错误

生成if条件必须是常量表达式

这是我正在使用的代码

module jkfflop(J,K,clk,Q);
input J,K,clk;
output Q;
 if(J==0 & K==1)
  begin
   assign Q = 0;
  end
 else if(J==1 & K==0)
  begin
   assign Q = 1;
  end
 else if(J==1 & K==1)
  begin
   assign Q = ~Q;
  end
endmodule

有人能帮我一下吗?

在Verilog RTL中,有一个公式或模式用来暗示触发器。对于正边缘触发触发器,它总是@(posedge时钟)
对于负边缘触发触发器,它总是@(negedge时钟)

正边触发块的示例

 reg [7:0] a;
 always @(posedge clock) begin
   a <= b;
 end
reg[7:0]a;
始终@(posedge时钟)开始
模块flopJK(q,j,k,c)的可能副本;输入j,k,c;输出q;reg q;总是@(posedge c)开始格({j,k}){1'b0,1'b0}:开始q=q;结束{1'b0,1'b1}:开始q=1'b0;结束{1'b1,1'b0}:开始q=1'b1;结束{1'b1,1'b1}:开始q=~q;end-endcase end-endmodule
请修复最后一个模块(无法编辑)->2'b0_1:Q
 reg [7:0] a;
 always @(posedge clock) begin
   if ( reset == 1'b1 ) begin
     a <= 'b0; 
   end
   else begin
     a <= b;
   end
 end
 reg [7:0] a;
 always @(posedge clock, negedge reset_n) begin
   if ( reset_n == 1'b0 ) begin
     a <= 'b0; 
   end
   else begin
     a <= b;
   end
 end
module jkfflop(
  input  J,
  input  K,
  input  clk,
  output Q );
  always @(posedge clk) begin
    if(J==1'b0 && K==1'b1) begin
      Q <= 'b0;
    end
    else if(J==1'b1 && K==1'b0) begin
      Q <= 1'b1;
    end
    else if(J==1'b1 & K==1'b1) begin
      Q <= ~Q;
    end
  end
endmodule
  always @(posedge clk) begin
    case({J,K})
      2'b0_0 : Q <= Q   ;
      2'b0_1 : Q <= 1'b0;
      2'b1_0 : Q <= 1'b1;
      2'b1_1 : Q <= ~Q  ;
    endcase
  end