0
这是我的Verilog代码如下。当我尝试编译它时,我在Modelsim中遇到了2个错误。Verliog Modelsim错误2388.已经在此范围内声明
**错误(可抑制):/home/ece4514/mul1.v(6):(vlog-2388)'p'已在此范围内声明(mul1)。 **错误(可抑制):/home/ece4514/mul1.v(8):(vlog-2388)'c'已在此范围内声明(mul1)。
module mul1(output [103:0] p,
output [51:0] c,
input [51:0] x,
input [51:0] y);
reg [103:0]p;
reg [103:0]a;
reg c;
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(输出REG [103:0] P, 输出REG [51:0] C, 输入[51:0]的x, 输入[51:0] y)的; reg [103:0] a; 整数i; 总是@(X,Y) 开始 A = X; p = 0; //需要归零 为(I = 0;我<104; I = I + 1) 开始 如果(值Y [i]) P = P + A; //必须是阻止分配 a = a << 1; 端 为(I = 103; I> = 0; I = I-1) 开始 \t如果(P [I]) \t \t C = P [I:I-51]; \t \t break; \t端 端 endmodule 它解决了以前的错误,但现在它是给一个新的错误: 范围必须由常量表达式 为线来界定:C = P [I:I-51]; –
改变'p [i-:52]' –