2014-12-08 5 views
-1

Я получаю ошибку синтаксического анализа из строки 15 этого кода.Получение ошибки синтаксического анализа в регистровой декларации

12: module DoShellSort(
13: input [10*20-1:0] toSort, 
14: output [10*20-1:0] sorted 
15: reg arrBitSize 
16:); 

Вот часть моего стенда, где я инициализирую входные и регрессивные переменные.

module ShellSort_tb; 
    reg [10*19:0] toSort, arrBitSize; 
    wire [10*19:0] sorted; 
    integer i; 

    DoShellSort ss_tb ([10*19:0] toSort, [10*19:0] sorted, arrBitSize); 

    // Input values you want to sort here 
    // Note: Should be 20 bits in size 
    initial $readmemh ("memory_hex.txt", toSort); 

    initial begin 
     #1 $display("\nThis program implements SHELL SORT to arrange values.\n"); 

     // Display initial array 
     #10 $display("Array to sort: "); 
     #10 for (i = 0; i < arrBitSize + 1; i = i + 1) 
      $write("%h", toSort[i]); 

     #10 arrBitSize = 4'd9; 

     // ................ 
endmodule 

Я синтезирую с помощью iVerilog. Вот сообщение об ошибке:

enter image description here

Может кто-нибудь помочь мне, почему я получаю синтаксическую ошибку? Благодаря!

+0

В определении модуля вы можете иметь только сигналы ввода, вывода или 'inout'. 'reg' неприемлем. Я предлагаю вам узнать о 'параметрах' в Verilog, потому что мне кажется, что это должно быть именно то, что вам нужно. – Qiu

ответ

2

Ошибка, связанная с тем, как вы определили свои порты, вам не хватает запятой и направлением порта, или вы поставили rweg в неправильном месте и не получили запятую. У вас есть:

module DoShellSort(
    input [10*20-1:0] toSort, 
    output [10*20-1:0] sorted //missing comma? 
    reg arrBitSize   //missing port direction? 
); 

Я думаю, что вы имели в виду это:

module DoShellSort(
    input  [10*20-1:0] toSort, 
    output reg [10*20-1:0] sorted, arrBitSize 
); 

Я считаю, что лучше практика перечислять каждый порт раздельно, так как это делает его легче обновлять код и интерфейс понятен даже тем, не так знакомы с языком.

module DoShellSort(
    input  [10*20-1:0] toSort, 
    output reg [10*20-1:0] sorted, 
    output reg [10*20-1:0] arrBitSize 
); 
0

Соединения с портами не очень хорошие. У вас не может быть неспакованного измерения, кроме объявления вашего типа. DoShellSort ss_tb (toSort [10 * 19: 0], отсортировано [10 * 19: 0], arrBitSize);

И ваше объявление порта модуля отсутствует "," после вывода [10 * 20-1: 0] отсортировано.

+0

Порт модуля объявлен в стиле ANSI, который не является допустимым синтаксисом в verilog. Этот тип объявления порта действителен с системным верилогом. –

+2

Объявления портов в стиле ANSI были частью verilog с 2001 года, они не являются частью verilog 1995. – Morgan

+0

Спасибо Morgan, я этого раньше не знал. –