【发布时间】:2015-09-16 18:03:11
【问题描述】:
据我所知,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 中的每一个。
谢谢。
【问题讨论】:
-
尝试在
if(En)之前添加else -
@Greg 无法添加。因为它是一个启用信号,必须与复位信号分开。它使添加的 LED 能够打开。
-
else应该在那里。复位(同步或异步)必须具有优先权。如目前所写,如果Rst在时钟的上升沿变高,En为高,那么if(En)优先,这是错误的,不会映射到库中的任何触发器。颠倒 if 语句的顺序可能会给出正确的函数行为,但会违反常见的最佳实践,并且可能无法正确合成。 -
+1 for @Greg,如果你有一个重置,你真的只想处理它,用你的代码,两个“if”条件可能同时发生......
-
您在 Verilog 的维基百科页面上有一个反例:wikiwand.com/en/Verilog#/Example
标签: verilog xilinx hdl xilinx-ise