1

据我了解,Xilinx ISE Web Pack 不支持实现以下代码所需的硬件。我正在尝试使用 always 块仅实现 8 位加法器的功能。这是代码:

module Addr_8bit(Clk, Rst, En, LEDOut  
    );

     input Clk;
     input Rst;
     input En;
     output reg [7:0] LEDOut;

    always @(posedge Clk or posedge Rst) begin
            if(Rst)
                LEDOut <= 8'b00000000;
            if(En)
                LEDOut <= LEDOut + 8'b00000001;
    end
endmodule

错误出现在非阻塞赋值:所在的行上LEDOut <= LEDOut + 8'b00000001;

特别是它说:

ERROR:Xst:899 - "Addr_8bit.v" line 33: The logic for <LEDOut> does not match a known FF or Latch template. The description style you are using to describe a register or latch is not supported in the current software release.

我正在尝试使 LEDOut 的 8 位输出对应于 BASYS2 FPGA 板(Spartan-3E)上 8 个 LED 中的每一个。

谢谢你。

4

1 回答 1

1

更改您的行为描述(always 块内的代码),如下所示:

always@(posedge CLK or negedge RST) begin
    if(!RST) begin // Reset condition goes here
        LEDOut <= 0;
    end
    else begin // Everything else goes here
        if(En)
            LEDOut <= LEDOut + 1'b1;
    end
end

您的代码无法合成的原因是您通常无法在两个不同信号的同一边缘下分配给同一个寄存器。(如果在这两种情况下都分配给变量,则不能在 CLK和RST的低到高转换时始终阻止触发。)因此,您不能在 RST 的上升沿触发复位条件,但是你可以在消极的边缘做到这一点。这是由于物理寄存器元素(称为触发器)的设计方式所致。

于 2018-02-27T07:14:40.723 回答