【问题标题】:JK Flip Flop verilog code error on design设计上的 JK 触发器 verilog 代码错误
【发布时间】:2021-06-12 08:26:22
【问题描述】:

我正在尝试构建具有异步低电平有效清除和预设的 JK FF。然而,verilog 给了我“design.sv:24:我放弃的语法错误”。看起来我在某个地方有错误,但我找不到它。 我会感激每一个帮助

这是我的设计代码

    module JKFF(clk,J,K,Q,Qbar,Clear,Preset);
      input J,K,clk,Clear;
      output Q, Qbar;
      reg Q;
      assign Qbar= ~Q;
      
      always@(negedge clk or negedge Clear or negedge Preset )
        begin
          if(!Clear)
            Q<=1'b0;
          else if(!Preset)
            Q<=1'b1;
          else if(Clear==1&&Preset==1)
            if (K==0 && J==0)
            Q <= Q;
            if (K==1 && J==0)
            Q <= 0;
            if (K==0 && J==1)
            Q <= 1;
            else
            Q <= ~Q;
            
        end
    endmodule;

这是我的 TB 代码

    module JKFF_tb;
    
     // Inputs
    
     reg J;
     reg K;
    
     reg clk;
    
     reg Clear;
    
     // Outputs
    
     wire Q;
    
     wire Qbar;
    
     // Instantiate the Unit Under Test (UUT)
    
    JKFF uut (
    
      .Q(Q), 
    
      .Qbar(Qbar), 
    
      .J(J),
      .K(K),
    
       .clk(clk), 
    
      .Clear(Clear)
    
      );
      initial begin
      clk=0;
      Clear=1;
      Preset=1;
         forever #10 clk = ~clk; 
      end
    
     initial begin 
     J= 1; K= 0;
     #100; J= 0; K= 1; 
     #100; J= 0; K= 0; 
     #100; J= 1; K=1; 
    end 
      // Add stimulus here

    endmodule

【问题讨论】:

    标签: verilog


    【解决方案1】:
    1. 您没有在模块JKFF 输入列表中声明Preset
    2. 你在 endmodule 关键字后面打错分号 ;
    3. else if(Clear==1&amp;&amp;Preset==1) 之后的开头和结尾没有代码
    4. JK 条件中没有 else if
    5. 在模块 JKFF_tb 中,您没有声明 Preset reg,而是为其赋值。
    6. 您不会将Preset 传递给名为JKFF 的模块实例uut
    module JKFF(clk,J,K,Q,Qbar,Clear,Preset);
        input J,K,clk,Clear, Preset;
        output Q, Qbar;
        reg Q;
        assign Qbar= ~Q;
    
        always@(negedge clk or negedge Clear or negedge Preset )
        begin
            if(!Clear)
                Q<=1'b0;
            else if(!Preset)
                Q<=1'b1;
            else if(Clear==1&&Preset==1) begin
                if (K==0 && J==0)
                    Q <= Q;
                else if (K==1 && J==0)
                    Q <= 0;
                else if (K==0 && J==1)
                    Q <= 1;
                else
                    Q <= ~Q;
            end
        end
    
    endmodule
    
    module JKFF_tb;
    
     // Inputs
    
     reg J;
     reg K;
     reg Preset;
    
     reg clk;
    
     reg Clear;
    
     // Outputs
    
     wire Q;
    
     wire Qbar;
    
     // Instantiate the Unit Under Test (UUT)
    
    JKFF uut (
    
      .Q(Q), 
    
      .Qbar(Qbar), 
    
      .J(J),
      .K(K),
    
       .clk(clk), 
    
      .Clear(Clear),
      .Preset(Preset)
    
      );
      initial begin
      clk=0;
      Clear=1;
      Preset=1;
         forever #10 clk = ~clk; 
      end
    
     initial begin 
     J= 1; K= 0;
     #100; J= 0; K= 1; 
     #100; J= 0; K= 0; 
     #100; J= 1; K=1; 
    end 
      // Add stimulus here
    
    endmodule
    

    【讨论】:

    • 谢谢你我已经修复了所有的错误但是它没有运行它看起来像是在一个循环中
    • 我错过了部分 JKFF_tb durig 复制...我进行了编辑。
    • 我在模拟器上检查了这段代码。 i.imgur.com/UhzeMeC.png怎么了?
    • 我觉得我的模拟器出了问题,你用的是什么模拟器??
    • 我正在使用 vivado
    猜你喜欢
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多