由于已知的软件问题,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]
圆形<=未接地[7:1] + {{6 {1'b 0}},未接地[0]};
没有回复内容