我正在使用Xilinx ISim (ISE)。
我有以下分配声明:
assign dwToAlign = {first_aligned >> 3}[7:0] - {i_address >> 3}[7:0];当我尝试做一个行为模拟时,它会抛出一个内部编译器错误。如果我评论这个特定的行,它就会正确编译。我确信昨天编译的完全相同的代码(我把它背到我的git上了)。
如果我合成,然后做一个后pnr仿真,代码合成和正确地模拟。
这是有效的verilog?
编辑: EDAPlayground http://www.edaplayground.com/x/3wW上的代码
发布于 2014-07-08 09:25:49
不,这是无效的。您的示例使用{}连接操作符,我认为您应该使用括号()。
如果您需要使用部件选择,那么首先声明移位。这都是组合逻辑,并将产生相同的硬件。
assign temp1 = (first_aligned >> 3);
assign temp2 = (i_address >> 3);
assign dwToAlign = temp1[7:0] - temp2[7:0];值得注意的是,如果使用了部件选择,即使指定了全部范围,signed算法也将被忽略。
如果在访问温度17:0时,temp1和temp2被声明为wire signed [7:0] temp1,则忽略签名的属性。如果需要,可以使用$signed( temp1[7:0] )强制执行。如果您需要保留符号信息,可以使用有符号移位(>>>)作为有符号的数据类型。
“任择议定书”还在评论中指出,对于他们的情况,他们也可以使用:
assign dwToAlign = first_aligned[10:3] - i_address[10:3];https://stackoverflow.com/questions/24627365
复制相似问题