Ошибка компилятора Verilog - PullRequest
1 голос
/ 28 октября 2011
    module router (clock, ValidPacket0, ValidPacket1, ValidPacket2, ValidPacket3, PacketIn0, PacketIn1, PacketIn2, PacketIn3, PacketOut0, PacketOut1, PacketOut2, PacketOut3);

   input   clock;
   input   ValidPacket0, ValidPacket1, ValidPacket2, ValidPacket3;  
   input [7:0] PacketIn0, PacketIn1, PacketIn2, PacketIn3;
   output [7:0] PacketOut0,PacketOut1, PacketOut2, PacketOut3;

   reg [3:0]   bvp, vp;
   reg [1:0]   counter0, counter1, counter2, counter3;
   reg [2:0]   sel0, sel1, sel2, sel3;
   reg [3:0]   zero=0;
   reg [7:0]   addr0, addr1, addr2, addr3, out0, out1, out2, out3l;
   wire        np0, np1, np2, np3;
   wire [7:0]  PacketOut0, PacketOut1, Packetout2, Packetout3;

   always@(posedge clock)
     bvp[0]<=ValidPacket0;
   if (ValidPacket0 && !bvp[0]) vp[0]=1'b1;
   else vp[0]=0;

Приведенный выше код дает мне следующую ошибку:

** Error: proj1a.v(23): near "[": syntax error, unexpected '[', expecting "IDENTIFIER" or "TYPE_IDENTIFIER" or '#' or '('
Line 23 is at the if statement.

Любое понимание?

Ответы [ 2 ]

1 голос
/ 28 октября 2011
   always@(posedge clock)
     bvp[0]<=ValidPacket0;
   if (ValidPacket0 && !bvp[0]) vp[0]=1'b1;
   else vp[0]=0;

Этот блок 'if' указывает блок генерации, потому что он появляется на уровне модуля.Код vp[0]=1'b1; является процедурным утверждением, которое допускается только внутри процедурного блока.Компилятор жалуется, потому что ожидает модуль или экземпляр udp, который никогда не будет идентификатором, за которым следует '['.

1 голос
/ 28 октября 2011

В зависимости от того, что вы пытаетесь сделать, вам нужно либо добавить begin и end ключевые слова вокруг операторов после always @(posedge) (и исправить тип назначения, см. Как интерпретировать блокировку против неблокировать назначения в Verilog? ), или вам нужно добавить always @(*) перед if / else, чтобы ввести комбинационную логику.

...