[an error occurred while processing this directive]
|
Вопросы:
Описываю регистр с асинхронной установкой
module my_reg(
input clk,
input st,
input din,
output reg dout);
always @(posedge clk, posedge st) begin
if(st) dout <= 1'b1;
else dout <= din;
end
endmodule
Синтезатор ставит инвертор на входе и выходе регистра и использует его асинхронный сброс. Все вроде нормально но после включения выход получается в 1. Как сделать в 0?
Если пишу
always @(posedge clk, posedge st, posedge rst) begin
if(rst) dout <= 1'b0;
else if(st) dout <= 1'b1;
else dout <= din;
end
то синтезатор порождает монстроидальную конструкцию из 4-ех LUT-ов и регистра и пишет предупреждение
Warning: Node "dout~6" is a latch. Что это?
Спасает только синхронный сброс. Получается что нужно приводить внутреннее состояние регистров ALTERA после прогрузки дополнительным внешним сигналом сброса и прицеплять его ко всем необходимым регистрам?
Почему запись output reg dout = 1'b0 игнорируется синтезатором причем молча)?
E-mail: info@telesys.ru