У меня странная проблема, когда Quartus не генерирует файл символов для следующего кода:
module bin_to_bcd #(parameter N_DIGITS = 4) (count, bcd_output);
input wire [$clog2(9999)-1:0] count;
output reg [(N_DIGITS<<2)-1:0] bcd_output;
integer i;
integer decade;
always @ (count) begin
bcd_output = 'b0;
for(i = $clog2(9999) - 1; i >= 0; i = i - 1) begin
for(decade = 1; decade < N_DIGITS + 1; decade = decade + 1) begin
if(bcd_output[(decade<<2) - 1 -: 4] >= 5) begin
bcd_output[(decade<<2) - 1 -: 4] = bcd_output[(decade<<2) - 1 -: 4] + 3;
end
end
bcd_output = bcd_output << 1;
bcd_output[0] = count[i];
end
end
endmodule
Выдается ошибка:
10016 Can't create symbol/include/instantiation/component file for module "bin_to_bcd" because port "count" has an unsupported type
Но " count "является" входным проводом ", как и должно быть, и у меня есть другой подобный код, который работает просто отлично. Может быть, я упускаю что-то очевидное, но я был бы очень признателен за любую помощь, которую я могу получить.
Я должен также упомянуть, что этот код прекрасно работает при моделировании в ModelSim-Altera.
Спасибо.
РЕДАКТИРОВАТЬ: Я также хотел бы иметь возможность указать число ди git для вывода в качестве параметра, если кто-либо, как идеи, как это реализовать. Примечание: $ clog2 ({N_DIGITS {9}}) не работает ...
РЕДАКТИРОВАТЬ # 2: Извините, если я медленно отвечаю, я работал над чем-то еще. Таким образом, проблема все еще представляет собой, и я не понимаю, почему ... Вот некоторые идеи, которые могут быть полезны. Следующий код прекрасно работает и использует тот же тип размеров регистров с $ clog2. Если кто-то видит какие-либо различия между кодом, который я разместил, и этим, пожалуйста, сделайте шаг вперед и закричите «Я НАШЕЛ ЭТО!», Потому что это сводит меня с ума: P
module multiplexer #(parameter N_INPUTS = 2, parameter N_OUTPUTS = 1) (in, out, select);
generate
if (N_INPUTS % N_OUTPUTS != 0) begin
illegal_parameter_cant_divide_inputs_by_outputs non_existing_module();
end
endgenerate
input wire [N_INPUTS-1:0] in;
input wire [$clog2(N_INPUTS/N_OUTPUTS) - 1:0] select; //THIS LINE WORKS FINE
output wire [N_OUTPUTS-1:0] out;
assign out = in[(select + 1) * N_OUTPUTS - 1 -: N_OUTPUTS];
endmodule
Правка № 3: Я на самом деле просто заметил, что код мультиплексора не был правильно синтезирован как символ (выбранный порт отсутствует ... Я применил то же исправление, и теперь все нормально).
Опять же, любая помощь будет принята с благодарностью.