Floating point Verilog代码错误:范围必须由常量表达式限定
我已经为52位乘法器编写了一个代码,我需要以标准形式给出它(IEEE 754浮点标准用于64位数字)。然后我检查,它从64位超过了多少位,这样我就可以把这个数字转换成指数Floating point Verilog代码错误:范围必须由常量表达式限定,floating-point,verilog,multiplication,Floating Point,Verilog,Multiplication,我已经为52位乘法器编写了一个代码,我需要以标准形式给出它(IEEE 754浮点标准用于64位数字)。然后我检查,它从64位超过了多少位,这样我就可以把这个数字转换成指数 module mul1(output reg [103:0] p, output reg [51:0] c, input [51:0] x, input [51:0] y); reg [103:0]a; integer i; always @(x , y)
module mul1(output reg [103:0] p,
output reg [51:0] c,
input [51:0] x,
input [51:0] y);
reg [103:0]a;
integer i;
always @(x , y)
begin
a=x;
p=0; // needs to zeroed
for(i=0;i<104;i=i+1)
begin
if(y[i])
p=p+a; // must be a blocking assignment
a=a<<1;
end
for(i=103;i>=0;i=i-1)
begin
if (p[i])
c=p[i:i-51];
break;
end
end
endmodule
模块mul1(输出寄存器[103:0]p,
输出调节器[51:0]c,
输入[51:0]x,
输入[51:0]y);
reg[103:0]a;
整数i;
始终@(x,y)
开始
a=x;
p=0;//需要归零
对于(i=0;i你不能有一个可变部分/切片选择(可变宽度)。从变量c的角度考虑赋值。c是52位宽,所以你需要给它分配52位p。循环只需要选择哪52位。这就是可变部分选择操作符的作用。这里有一个很好的解释:
它看起来像:
c=p[i+:52]
也就是说,从p开始从(低位)i向上选择i+52-1并分配给c
module mul1(output reg [103:0] p,
output reg [51:0] c,
input [51:0] x,
input [51:0] y);
reg [103:0]a;
integer i;
always @(x , y) begin
a=x;
p=0; // needs to zeroed
for(i=0;i<104;i=i+1) begin
if(y[i]) begin
p=p+a; // must be a blocking assignment
end
a=a<<1;
end
for(i=103;i>=0;i=i-1) begin
if (p[i]) begin
c=p[i+:52];
break;
end
end
end
endmodule
模块mul1(输出寄存器[103:0]p,
输出调节器[51:0]c,
输入[51:0]x,
输入[51:0]y);
reg[103:0]a;
整数i;
始终@(x,y)开始
a=x;
p=0;//需要归零
对于(i=0;i你不能有一个可变部分/切片选择(可变宽度)。从变量c的角度考虑赋值。c是52位宽,所以你需要给它分配52位p。循环只需要选择哪52位。这就是可变部分选择操作符的作用。这里有一个很好的解释:
它看起来像:
c=p[i+:52]
也就是说,从p开始从(低位)i向上选择i+52-1并分配给c
module mul1(output reg [103:0] p,
output reg [51:0] c,
input [51:0] x,
input [51:0] y);
reg [103:0]a;
integer i;
always @(x , y) begin
a=x;
p=0; // needs to zeroed
for(i=0;i<104;i=i+1) begin
if(y[i]) begin
p=p+a; // must be a blocking assignment
end
a=a<<1;
end
for(i=103;i>=0;i=i-1) begin
if (p[i]) begin
c=p[i+:52];
break;
end
end
end
endmodule
模块mul1(输出寄存器[103:0]p,
输出调节器[51:0]c,
输入[51:0]x,
输入[51:0]y);
reg[103:0]a;
整数i;
始终@(x,y)开始
a=x;
p=0;//需要归零
对于(i=0;i的可能副本