为什么Quartus II综合错误地处理了有符号变量的位选择?-Altera-Intel社区-FPGA CPLD-ChipDebug

为什么Quartus II综合错误地处理了有符号变量的位选择?

由于已知的软件问题,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]没有根据;

reg [6:0]四舍五入;

总是@(posedge clk)开始

 圆形<=未接地[7:1] +未接地[0];

软件应将信号零扩展为未连接[0],以确保将一位值添加到unrounded[7:1]位片中。

Quartus II软件版本6.0和6.0 SP1对信号进行无符号扩展unrounded[0]而不是对信号进行零扩展。在该示例中,如果unrounded[0]信号是1值,则软件将1解释为数字的符号,并因此将其转换为-1的7位带符号表示而不是无符号值。因此,软件将-1添加到unrounded[7:1] ,而不是添加1。

要避免此问题(在版本6.0或6.0 SP1中),请执行以下操作之一:

  • 联系mySupport获取Quartus II软件6.0 SP1的补丁1.20。
  • 将括号括在其中一个变量周围,并使用Verilog-2001函数强制整个表达式求值为unsigned:
舍入<=(未接地[7:1])+未接地[0] 
  • 手动填充前导零,如下所示(即明确指出前导位应为0):
  • 圆形<=未接地[7:1] + {{6 {1'b 0}},未接地[0]}; 

    请登录后发表评论

      没有回复内容