2015-10-14 3 views
1

Я пишу модуль для вычисления коэффициента и остатка путем повторного вычитания с использованием поведенческого моделирования в verilog. Я получаю сообщение об ошибке «недопустимый элемента модуля» для следующего кода:Ошибка недействительной ошибки модуля Verilog

module divider (dividend, divisor, quotient, remainder) ; 
    input [7:0] dividend ; // eight input lines modeled as a bus 
    input [7:0] divisor ; // select lines bundled as a bus 
    output reg [7:0] quotient ; 
    output reg [7:0] remainder ; 
    reg [7:0] r; 
    reg [7:0] q; 
    assign q = 0; 
    for(r = dividend; r >= divisor; r = r - divisor) 
     assign q = q + 1; 
    assign remainder = r; 
    assign quotient = q; 
endmodule 

module main; 
    reg [7:0] dd; 
    assign dd = 12; 
    reg [7:0] dr; 
    assign dr = 5; 
    reg [7:0] q; 
    reg [7:0] r; 
    divider(dd, dr, q, r); 
    $display("quotient %d", q); 
    $display("remainder %d",r); 
endmodule 

Это, кажется, общая ошибка, не может понять, как это исправить. Точное сообщение об ошибке:

23: syntax error 
23: error: invalid module item. 
24: syntax error 
24: error: invalid module item. 

ответ

1

Эти сообщения об ошибках, потому что $display заявления должны быть в процедурном блоке, например, initial. В этом случае $monitor может быть более полезным:

module main; 
    reg [7:0] dd; 
    assign dd = 12; 
    reg [7:0] dr; 
    assign dr = 5; 
    reg [7:0] q; 
    reg [7:0] r; 
    divider(dd, dr, q, r); 
    initial begin 
     $monitor("quotient: %d; remainder: %d", q, r); 
    end 
endmodule 

Обратитесь к свободному IEEE Std 1800-2012.

+0

Это решило ошибку на дисплее, но я получаю эту новую ошибку: 9: ошибка: genvar отсутствует для генерации переменной «loop» «r». 1 ошибка (-а) при разработке. – codeln

+0

@codeln: Посмотрите «сгенерируйте» блоки в IEEE Std. – toolic

+1

@toolic В соответствии с LRM вы можете одновременно включать только один активный монитор. Таким образом, в вашем коде выше вы будете отслеживать остаток, поскольку он заменит первый вызов '$ monitor'. Если вы хотите использовать '$ monitor', вам нужно объединить их в один вызов:' $ monitor ("quotient:% d; остаток:% d", q, r); ' – Unn

Смежные вопросы