2017-05-03 166 views
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 

我需要做些什么改变?

回答

0

你混合的Verilog,1995年风格端口说明,使用Verilog-2001/SystemVerilog的风格。使用更新的样式,有关端口的所有信息都会显示在标题中。

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; 

旧样式只有标题中的标识符,并且您稍后声明了方向和类型。

+0

我改变代码: 模块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]; –

+1

改变'p [i-:52]' –

相关问题