ошибка verilog: синтаксическая ошибка-пропущен '::'? - PullRequest
1 голос
/ 20 апреля 2020

** Ошибка: строка (27): рядом с "=": синтаксическая ошибка, неожиданная '='.

** Ошибка: строка (27): (vlog-13205) Синтаксическая ошибка находится в области видимости после 'Q'. Есть пропущенный '::'?

module LS161a(
    input [3:0] D,        // Parallel Input
    input CLK,            // Clock
    input CLR_n,          // Active Low Asynchronous Reset
    input LOAD_n,         // Enable Parallel Input
    input ENP,            // Count Enable Parallel
    input ENT,            // Count Enable Trickle
    output [3:0]Q,        // Parallel Output    
    output RCO            // Ripple Carry Output (Terminal Count)
); 
wire [3:0]temp;

always @(posedge CLK)
begin
    if (CLR_n==0)
        temp<=0000;
    else if (CLR_n==1)
    begin
        if (LOAD_n == 0)

            temp<=D;
        else if (ENP==1 & ENT==1)
            temp<=temp+1;
    end 
end
Q=temp;                                 //line 27
RCO = temp[3]& temp[2]& temp[1]& temp[0]& ENT;
//end 
endmodule 

1 Ответ

1 голос
/ 20 апреля 2020

Ошибка указывает на строку:

Q=temp;

Вам необходимо использовать ключевое слово assign для непрерывных присвоений wire. Вы, вероятно, также получили похожую ошибку для RCO. Я также получил третью ошибку компиляции для задания temp. Поскольку он назначен в блоке Always, он должен быть объявлен как reg вместо wire. Я изменил 3 строки в вашем коде, чтобы исправить все эти ошибки (помеченные ////).

module LS161a(
    input [3:0] D,        // Parallel Input
    input CLK,            // Clock
    input CLR_n,          // Active Low Asynchronous Reset
    input LOAD_n,         // Enable Parallel Input
    input ENP,            // Count Enable Parallel
    input ENT,            // Count Enable Trickle
    output [3:0]Q,        // Parallel Output    
    output RCO            // Ripple Carry Output (Terminal Count)
); 
reg [3:0]temp; ////

always @(posedge CLK)
begin
    if (CLR_n==0)
        temp<=0000;
    else if (CLR_n==1)
    begin
        if (LOAD_n == 0)

            temp<=D;
        else if (ENP==1 & ENT==1)
            temp<=temp+1;
    end 
end

assign Q=temp; ////
assign RCO = temp[3]& temp[2]& temp[1]& temp[0]& ENT; ////
endmodule 
...