2017-05-03 2 views
0

Dies ist mein Verilog-Code unten. Ich bekomme 2 Fehler in Modelsim, wenn ich versuche es zu kompilieren.Verliog Modelsim Fehler 2388. bereits in diesem Bereich angegeben

** Fehler (unterdrückbar): /home/ece4514/mul1.v(6): (vlog-2388) 'p' bereits in diesem Bereich (mul1) deklariert. ** Fehler (unterdrückbar): /home/ece4514/mul1.v(8): (vlog-2388) 'c' bereits in diesem Bereich (mul1) deklariert.

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 

Welche Änderung muss ich machen?

Antwort

0

Sie mischen Verilog-1995-Port-Deklarationen mit dem Verilog-2001/SystemVerilog-Stil. Mit dem neueren Stil gehen alle Informationen über einen Port in den Header.

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; 

Der ältere Stil hatte nur die Bezeichner in der Kopfzeile, und Sie später die Richtung und Typ deklariert.

+0

I geändert Code: Modul MUL1 (output reg [103: 0] p, Ausgang reg [51: 0] c, Eingang [51: 0] x, Eingang [51: 0] y) ; reg [103: 0] a; ganze Zahl i; immer @ (x, y) beginnen a = x; p = 0; // muss auf Null gesetzt werden für (i = 0; i <104; i = i + 1) beginnen if (y [i]) p = p + a; // muss eine Blockierungszuweisung sein a = a << 1; Ende for (i = 103; i> = 0; i = i-1) beginnen \t if (p [i]) \t \t c = p [i: i-51]; \t \t Bruch; \t Ende Ende endmodule die vorhergehenden Fehler gelöst, aber jetzt wird es einen neuen Fehler geben: c = p: Bereich muss durch konstante Ausdrücke für die Linie begrenzt werden [i: i-51]; –

+1

change 'to p [i-: 52]' –

Verwandte Themen