Vivado中阶乘(**)的问题
时间:10-02
整理:3721RD
点击:
表达式如下:
localparam BURST_LENGTH = 10;
reg[15:0] length_cnt_down;
always@(posedge sys_clk)begin
if(init_len_en)begin
length_cnt_down <= 2**BURST_LENGTH;
end else begin
if(length_cnt_down > 16'b0)begin
length_cnt_down <= length_cnt_down - 1'b1;
end
end
end
以此为例,在modelsim和ISE14.7下,每当init_len_en拉高时,length_cnt_down的值为16'h0400;而在vivado2014.4和vivado2016.2下,值变了,变成了16'h03FF,而最终length_cnt_down的值会停留在16'hFFFF;请问下有人遇到过这种问题吗?难道是阶乘符号(**)在不同的编译器下的结论不一致,在ISE下是移位操作,而在vivado下却变成了拼接操作吗?希望各路大神予以指导;另外,设置BURST_LENGTH主要是为了扩展位宽时用的,所以没有直接定义为所需要的值;
localparam BURST_LENGTH = 10;
reg[15:0] length_cnt_down;
always@(posedge sys_clk)begin
if(init_len_en)begin
length_cnt_down <= 2**BURST_LENGTH;
end else begin
if(length_cnt_down > 16'b0)begin
length_cnt_down <= length_cnt_down - 1'b1;
end
end
end
以此为例,在modelsim和ISE14.7下,每当init_len_en拉高时,length_cnt_down的值为16'h0400;而在vivado2014.4和vivado2016.2下,值变了,变成了16'h03FF,而最终length_cnt_down的值会停留在16'hFFFF;请问下有人遇到过这种问题吗?难道是阶乘符号(**)在不同的编译器下的结论不一致,在ISE下是移位操作,而在vivado下却变成了拼接操作吗?希望各路大神予以指导;另外,设置BURST_LENGTH主要是为了扩展位宽时用的,所以没有直接定义为所需要的值;
