【问题标题】:wire output shows nothing in verilog simulation code线输出在verilog仿真代码中什么也不显示
【发布时间】:2020-11-26 21:41:49
【问题描述】:

这是一个简单的异步2位计数器,正在使用两种JK触发器。 P>

下面是我的TwoBitCounter.v脚本。 P>

`timescale 1ns / 1ps
    
    module TwoBitCounter(
        input wire clk,
        output wire q0,
        output wire q1
        );
    JK jk1(1, 1, clk, q0);
    JK jk2(1, 1, q0, q1);
    
    endmodule
    
    module JK(
        input wire J,
        input wire K,
        input wire clk,
        output reg out
        );
        
    always @(posedge clk) begin
        if(J==0&&K==0)
            begin end
        else if(J==0&&K==1) begin
            out <= 1'b0; 
        end else if(J==1&&K==0) begin
            out <= 1'b1;
        end else if(J==1&&K==1) begin
            out <= ~out;
        end
    end
    endmodule

,这是我的仿真代码:


    `timescale 1ns / 1ps
    
    module TwoBitCounter_sim();
    reg clk;
    wire q0;
    wire q1;
    
    TwoBitCounter twoBitCounter(.clk(clk), .q0(q0));
    
    initial clk = 1'b0;
    always clk = #100 ~clk;
    
    initial begin
        #1000;
        $finish;
    end
    
    endmodule

我已经检查了JK模块单独工作正常。我尝试禁用一个JK触发器,看它是否有没有错误,而在TwoBitCounter模块来实现,也没有工作。虽然我已经多次检查,看是否该算法本身是错误的,但毫无头绪的根本问题是什么。 P>

【问题讨论】:

    标签: verilog counter vivado


    【解决方案1】:

    在您的代码中,您只使用了一个 J/K 组合:1/1。在这种状态下,您只需反转 out (out out 最初具有 x 值。 x 的反转也是x。所以,它永远不会改变。

    你需要想办法通过操纵 J/K 值或其他方式来初始化触发器。

    例如,在JK模块中添加initial out = 0;会改变图片,但不能很好地配合合成。所以,你需要自己想办法。

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多