0

我正在使用计数 0-3 并返回 0 的 JK 触发器编写 2 位计数器的 verilog 代码。我正在使用 Xilinx EDA。但是我不断收到一个错误,我不知道这意味着什么?行号未显示在此处,但错误位于“ always @(posedge clk)”处。

ERROR:HDLCompiler:1401 - "C:\Users\Eduardo\Documents\SFSU\Fall 2014\Engr 378\Lab 3\TwoBitCounter\twobitcounter.v" 第 30 行:单元 jkff 中的信号 q 连接到以下多个驱动程序:

`timescale 1ns / 1ps
module twobitcounter( q_out, qbar_out, j,k, clk, reset);
    input [1:0] j; input [1:0] k; input clk; input reset;
    output [1:0] q_out;
    output [1:0] qbar_out;
    wire [1:0] q_out;
    wire [1:0] qbar_out;
    wire clk;

    assign qbar_out[0] = ~q_out[0];
    assign j[0] = 1;
    assign k[0] = 1;
    assign j[1] = q_out[0];
    assign k[1] = q_out[0]; 

    jkff M1(q_out[0], qbar_out[0], j[0], k[0], clk, reset);
    jkff M2(q_out[1], qbar_out[1], j[1], k[1], qbar_out[0]);

endmodule

module jkff(output q_out, output qbar_out,
  input j, input k, input clk, input reset);

    reg q;
    assign q_out = q;
    assign qbar_out = ~q;

    initial begin 
        q = 1'b0;
        end
    always @(posedge clk)
        begin
        case({j,k})
        {1'b0, 1'b0}: begin
            q = q;
            end
        {1'b0, 1'b1}: begin
            q = 1'b0;
            end
        {1'b1, 1'b0}: begin
            q = 1'b1;
            end
        {1'b1, 1'b1}: begin
            q = ~q;
            end
        endcase
        end

    always @(posedge reset)
        begin
        q = 1'b0;
        end
endmodule
4

2 回答 2

2

问题q被设置在两个always块中,这在综合中是不允许的。合并两个 always 块。此外,q是一个翻牌,所以它应该使用非阻塞赋值(<=)来赋值,而不是阻塞赋值(=)。

always @(posedge clk or posedge reset)
begin
  if (reset == 1'b1) begin
    q <= 1'b0;
  end
  else begin
    case({j,k})
    {1'b0, 1'b0}: begin
        q <= q;
        end
    {1'b0, 1'b1}: begin
        q <= 1'b0;
        end
    {1'b1, 1'b0}: begin
        q <= 1'b1;
        end
    {1'b1, 1'b1}: begin
        q <= ~q;
        end
    endcase
  end
end

您几乎不应该initial在可综合代码中使用块。大多数 FPGA 允许它进行初始化。然而,ASIC 设计不支持它。对于这两种情况,如果存在异步重置/设置,则不应使用它的初始块。

于 2014-10-02T19:59:55.657 回答
1

该错误告诉您您在不同的块中分配 q 。这会产生错误。您在initial块和always块中都分配了 q 。

您永远不应该initial在可综合代码中使用块。

于 2014-10-02T19:22:43.130 回答