Ошибка (10734): ошибка Verilog HDL на SWSelector.v (13): селектор не является константой - PullRequest
0 голосов
/ 13 ноября 2018

Ссылаясь на мой предыдущий пост: Ошибка (10482): ошибка VHDL: объект "select_vector" используется, но не объявлен

Я преобразовал свой код из VHDL в verilog, но я 'Теперь я получаю эту ошибку:

(Ошибка (10734): ошибка HDL Verilog на SWSelector.v (13): селектор не является константой),

Любые предложениякак мне с этим бороться?Есть 8 возможностей для селекторного переключателя, которые приходят от декодера.Поэтому, когда значение селектора совпадает с 3'b000, я хочу, чтобы rq был назначен запросам.Вот мой код:

module SWSelector(
input [7:0] rq,
input [2:0] selector,
output [7:0] request
);
localparam NUM=3'b000;
generate
genvar i;
for(i=0;i<7;i=i+1)
    begin: label
    if(selector == NUM)
        begin
            assign request[i] = rq[i];
        end 
    else 
        begin
        assign request[i]=0;
        end
    end
endgenerate
endmodule

1 Ответ

0 голосов
/ 14 ноября 2018

Поскольку ваш оператор if находится в генерации, вы просите инструмент предварительно оценить значение, установленное для selector, чтобы выяснить, selecter == NUM оценивает, но ваш инструмент не знает, потому что он сигнал, а не параметр.

Вы хотите использовать функцию создания, чтобы всегда создавать блок, в котором вы можете проверить значение selector, например:

module SWSelector(
    input [7:0] rq,
    input [2:0] selector,
    output reg [7:0] request
);
    localparam NUM=3'b000;
    generate
        genvar i;
        for(i=0;i<7;i=i+1)
        begin: label
            always @* begin
                if(selector == NUM)
                    request[i] = rq[i];
                else
                    request[i]=0;
            end
        end
    endgenerate
endmodule

Или, как сказал инструмент, вы можете использовать троичную и assign.

Редактировать:

Без генерации:

module SWSelector(
    input [7:0] rq,
    input [2:0] selector,
    output reg [7:0] request
);
    localparam NUM=3'b000;

    integer i;
    always @* begin
        for(i=0;i<7;i=i+1) 
            if(selector == NUM)
                request[i] = rq[i];
            else
                request[i]=0;
     end
endmodule
...