2017-02-05 1 views
0

Я пытаюсь понять код арбитров NoC. когда я пытаюсь выполнить синтаксическую проверку с использованием программного обеспечения Xilinx, я получаю сообщение об ошибке «Функциональные вызовы, такие как« log2 », не поддерживаются в постоянных выражениях» для строки «localparam ARBITER_BIN_WIDTH = log2 (ARBITER_WIDTH);». Какие изменения будут сделаны в этой строке? Часть кода, где я столкнулся с проблемой:Помощь при вызове функции в verilog

parameter ARBITER_WIDTH =4 
     input integer number; begin 
     log2=0; 
     while(2**log2<number) begin 
     log2=log2+1;  
    end  
    end 
endfunction // log2 

localparam ARBITER_BIN_WIDTH= log2(ARBITER_WIDTH); 
+0

Можете ли вы описать эту функцию log2? –

+0

Без дополнительной информации о коде, его трудно сказать наверняка, но инструмент усложняет, что он не поддерживает вызовы функций для получения констант времени компиляции, таких как параметры; т.е. он не может запустить функцию 'log2', чтобы получить значение времени компиляции для' ARBITER_BIN_WIDTH'. Если его Vivado, вы должны иметь поддержку SystemVerilog, которая должна позволить вам использовать '$ clog2()' вместо этого, чтобы получить примерно такую ​​же функциональность. – Unn

+0

@ Zuzu: Можете ли вы уточнить вопрос? –

ответ

0

См Стандарт IEEE Verilog® Hardware Description Language LRM, в 10.2.5, они описали функцию Вход

function integer clogb2; 
input depth; 
integer i,result; 
begin 
for (i = 0; 2 ** i < depth; i = i + 1) 
    result = i + 1; 
    clogb2 = result; 
end 
endfunction 

Может вы подтверждаете, что он работает на вас?

+0

выполняет ошибку «Функциональные вызовы, такие как« log2 », не поддерживаются в постоянных выражениях« средняя левая сторона и правая сторона выражения не соответствуют типу? – Zuzu

+0

Да! Настоятельно рекомендуется, чтобы ширина бита была одинаковой. –

+0

Какой размер поддерживается localparm? – Zuzu

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