Мне нужно последовательно выполнить набор кодов в Verilog. Проблема в том, что я пытался создать цикл, используя цикл for / generate for loop. В цикле for я твердо верю, что развертывание цикла происходит и все происходит параллельно. Не могли бы вы подсказать мне, как реализовать последовательное выполнение цикла for, чтобы я мог применить ту же концепцию для выполнения повторяющегося процесса? Или есть какой-либо другой метод, который можно использовать для реализации последовательной процедуры? Я использую процесс передачи нескольких байтов данных с помощью UART.
Избегайте разворачивания цикла для выполнения последовательной передачи данных в Verilog
Ответы (1)
Обычным методом аппаратной реализации последовательной процедуры является построение конечного автомата с оператором case.
integer state, next_state;
parameter S0 = 0, S1 = 1, S2 = 2;
always @(posedge clock) state <= next_state;
always @(*)
case(state)
S0: begin
// ... code for sequence 0
next_state = S1;
end
S1: begin
// ... code for sequence 1
next_state = S2;
end
S2: begin
// ... code for sequence 2
next_state = S0;
end
endcase
Но для передачи данных это очень неэффективное использование оборудования. Думайте о своих данных как об автомобиле на заводском конвейере. Несмотря на то, что автомобиль проходит последовательные этапы производства, каждый этап завода проходит повторяющуюся серию одних и тех же этапов на разных автомобилях, причем каждый этап работает параллельно. Вот как вы должны описывать свое оборудование для инструмента синтеза. Сейчас начинают появляться некоторые инструменты, которые берут последовательное описание и распараллеливают его, но сейчас они далеко не общедоступны.
person
dave_59
schedule
23.11.2017
always
. Сами блокиalways
выполняются по желанию. То же самое для внутренней части генерируемого блока. Вы выбрали неправильный язык. В Verilog вам нужно все синхронизировать с флопами, чтобы выполнять последовательные действия. - person Serge   schedule 23.11.2017