2016-02-26 4 views
0

я получаю «ошибка синтаксиса, неожиданный„[“» в строке помечается как // 2 в следующем кодеСинтаксическая ошибка, неожиданный «[», Verilog

module reg_file 
    #(
    parameter DATA_WIDTH = 8, 
      ADDR_WIDTH = 2 
) 
    (
    input wire clk, 
    input wire wr_en, 
    input wire [ADDR_WIDTH-1:0] w_addr, r_addr, 
    input wire [(DATA_WIDTH*2)-1:0] w_data, 
    output wire [DATA_WIDTH-1:0] r_data 
); 

    reg [DATA_WIDTH-1:0] array_reg [2 ** ADDR_WIDTH - 1:0]; 

    always @ (posedge clk) 
    if (wr_en) 
     array_reg[w_addr] <= w_data[15:8]; // 1 
     array_reg[w_addr + 1] <= w_data[7:0]; // 2 
    assign r_data = array_reg[r_addr]; 

endmodule 

Я хочу написать 16 разрядное слово в 8-битный файл регистра. Когда я комментирую одну из строк, помеченных как // 1 или // 2, компиляция в порядке. Какое правило я нарушил? Спасибо

ответ

4

Из кода, похоже, вы пропустили правила определения языка. Вы пропустили определение области всегда блока в своем коде, пропуская «начало» и «конец». Кроме того, вам также необходимо определить «начало» и «конец», если блок тоже. Таким образом, ваш код должен выглядеть следующим образом:

module reg_file 
    #(
    parameter DATA_WIDTH = 8, 
      ADDR_WIDTH = 2 
) 
    (
    input wire clk, 
    input wire wr_en, 
    input wire [ADDR_WIDTH-1:0] w_addr, r_addr, 
    input wire [(DATA_WIDTH*2)-1:0] w_data, 
    output wire [DATA_WIDTH-1:0] r_data 
); 

    reg [DATA_WIDTH-1:0] array_reg [2 ** ADDR_WIDTH - 1:0]; 

    always @ (posedge clk) begin 
    if (wr_en) begin 
     array_reg[w_addr] <= w_data[15:8]; // 1 
     array_reg[w_addr + 1] <= w_data[7:0]; // 2 
    end 
    end 
    assign r_data = array_reg[r_addr]; 

endmodule 
+1

Благодарим за ответ. Я не заметил «слона». На самом деле нужно добавить только «если» begin-end, потому что в этом случае всегда блок имеет только одно утверждение - «if». По крайней мере, компиляция в порядке, без начала начала. –

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