Цитата(Maverick @ Aug 23 2017, 20:59)
понимаю, что делаю медвежью помощь...
см. вложение - altera
Мне очень не нравится этот код.
Смеха ради посмотрел код приёмника и не увидел синхронизаторов там, где по моему мнению они обязаны быть.
Модуль uart_rx. Асинхронные данные приходят по проводу rxd. В этом процессе они защёлкиваются в триггер last_rxd:
Код
reg last_rxd;
always @(posedge clk) begin
last_rxd <= rxd;
end
Триггер last_rxd может находиться в метастабильном состоянии, т.к. по rxd пакеты приходят асинхронно.
Провод slew тоже метастабилен, т.к. комбинационно зависит от last_rxd:
Код
wire slew = rxd ^ last_rxd;
Далее по коду и slew, и last_rxd используются в различных процессах, if-ах и в автомате состояний.
Код
WAITING : begin
// wait for a start bit (0)
if (!slew & sample_now && !last_rxd) begin // тут ещё нравится использование & и && одновременно.
state <= READING;
held_bits <= 0;
end
end
Оно, может и работает, но по-моему это жесть. Да ещё и копирайт от альтеры)