Я довольно новичок в программировании Verilog/FPGA, и я пытаюсь реализовать UART. Мой источник основан на учебнике fpga4fun.com. Мой код выглядит следующим образом:Утверждение при запуске синтеза для Verilog UART
module async_transmitter(
input clk,
input TxD_start,
input [7:0] TxD_data,
output TxD,
output TxD_busy
);
parameter ClkFrequency = 25000000; // 25MHz
parameter Baud = 115200;
generate
if(ClkFrequency<Baud*8 && (ClkFrequency % Baud!=0)) ASSERTION_ERROR PARAMETER_OUT_OF_RANGE("Frequency incompatible with requested Baud rate");
endgenerate
// ... do something more
endmodule
Данные значения являются значениями по умолчанию, которые включены в учебник. Но когда я пытаюсь синтезировать код, он всегда терпит неудачу при условии if.
Для async_receiver я получаю тот же результат:
module async_receiver(
input clk,
input RxD,
output reg RxD_data_ready = 0,
output reg [7:0] RxD_data = 0,
output RxD_idle, // asserted when no data has been received for a while
output reg RxD_endofpacket = 0 // asserted for one clock cycle when a packet has been detected (i.e. RxD_idle is going high)
);
parameter ClkFrequency = 25000000; // 25MHz
parameter Baud = 115200;
parameter Oversampling = 8;
generate
if(ClkFrequency<Baud*Oversampling) ASSERTION_ERROR PARAMETER_OUT_OF_RANGE("Frequency too low for current Baud rate and oversampling");
if(Oversampling<8 || ((Oversampling & (Oversampling-1))!=0)) ASSERTION_ERROR PARAMETER_OUT_OF_RANGE("Invalid oversampling value");
endgenerate
// ... do something more
endmodule
PlanAhead говорит мне, что оба, если условия были выполнены на стороне приемника. Но, например, когда я вычисляю Oversampling * Baud (8 * 115200) = 921600, который на самом деле меньше 25000000. Любая идея, что я делаю неправильно здесь?
Какая ошибка вы получаете во время синтеза? – wilcroft
Он говорит мне: «[HDLCompiler 24] ASSERTION_ERROR ожидает 0 аргументов», потому что МОДУЛЬ ASSERTION был определен без каких-либо аргументов, чтобы в случае необходимости мог вынести ошибку утверждения. Модуль ASSERTION_ERROR определяется как «module ASSERTION_ERROR(); endmodule« Он включен в пример с сайта fpga4fun.com ... – Nrgyzer