由于已知的软件问题,Quartus® II 软件版本 6.0 和 6.0 SP1 从签名变量中选择错误处理位。涉及从已签名变量中选择的 Verilog 代码应返回 Verilog LRM(Std 1364-2001 Version C,Sec 4.5.1)中指定的无签名值。
此问题在 5.1 或更早版本中不存在。问题从 Quartus II 软件版本 6.1 开始修复。
作为出现此问题的一个示例,Quartus® II 软件版本 6.0 错误地处理了以下代码示例:
reg [7:0] unrounded; reg [6:0] rounded; always @ (posedge clk) begin rounded
软件应将信号未执行[0] 零扩展,以确保在比特切片中增加一个比特值 unrounded[7:1]
。
Quartus® II 软件版本 6.0 和 6.0 SP1 标牌延长了信号, unrounded[0]
而不是零扩展信号。在示例中,如果 unrounded[0]
信号是 1 值,软件会将 1 解释为数字的标志,因此将其转换为 7 位签名的表示 -1,而不是无签名的值。因此,软件会添加 -1 到 unrounded[7:1]
,而不是添加 1。
为了避免此问题(在版本 6.0 或 6.0 SP1 中),执行以下操作之一:
- 请联系mySupport,为 Quartus® II 软件版本 6.0 SP1 请求补丁 1.20。
- 使用 Verilog-2001 函数,围绕其中一个变量进行括号,并强制整个表情评估未分配:
rounded
- 手动填充前端零,如下所示(即明确指出领先位应为 0):
rounded