Verilog 8 бит до X и снова от X до 8
Я недавно купил Mojo v3, в котором уже есть модуль UART для связи с AVR и с AVR на компьютер.
Моя проблема: как я могу связать это с другими модулями?
Допустим, у меня есть ядро MD5, которое принимает X байтов, каков наилучший подход для чтения последовательных символов X, пока не будет нажата Enter, а затем отправить его обратно в ядро MD5?
Хорошо, я новичок, не говоря уже о MD5, скажем, я просто хочу сделать простое эхо.
С чего мне начать? используя FIFO? сдвиговые регистры? простые массивы? BRAM?
Это интерфейс AVR (UART):
module avr_interface(
input clk,
input rst,
input cclk,
output spi_miso,
input spi_mosi,
input spi_sck,
input spi_ss,
output [3:0] spi_channel,
output tx,
input rx,
input [3:0] channel,
output new_sample,
output [9:0] sample,
output [3:0] sample_channel,
input [7:0] tx_data,
input new_tx_data,
output tx_busy,
input tx_block,
output [7:0] rx_data,
output new_rx_data
);
Я использую этот учебник в качестве основы, чтобы узнать больше: http://embeddedmicro.com/tutorials/mojo/hello-world/
Я уже сделал простое байтовое эхо, но это не главное. Я просто хочу, чтобы строка возвращалась при нажатии Enter. Благодарю.
ОБНОВИТЬ:
Разработчик Mojo сделал отличный пример здесь:
http://embeddedmicro.com/forum/viewtopic.php?f=2&t=697&start=10
Спасибо.
1 ответ
Чтобы отобразить блок произвольной длины, вам понадобится FIFO и какой-то конечный автомат для управления им. Вход FIFO будет подключен к шине, идущей от модуля UART RX. Выход FIFO будет подключен к шине, идущей к модулю UART TX. Также должен быть способ "заблокировать" выходной выход FIFO, чтобы он не отправлял байт. Самый простой способ сделать это - просто получить И управляющий сигнал с сигналом "готов", идущим на FIFO, и "действительный" сигнал, идущий с FIFO на модуль UART TX.
Тогда все, что нужно сделать конечному автомату, - это посмотреть данные на обоих концах FIFO. Всякий раз, когда получено нажатие клавиши ввода, увеличьте счетчик. Всякий раз, когда клавиша ввода выходит из FIFO, уменьшайте счетчик. Когда счетчик больше нуля, разблокируйте выход FIFO. В противном случае заблокируйте его, чтобы данные не появлялись.
Если вы хотите отправить определенные данные определенному модулю, то вам нужно определить какой-нибудь двоичный формат пакета. По сути, вам понадобится какой-то начальный идентификатор для кадрирования и, возможно, какой-то идентификатор типа, за которым следуют данные. Затем на FPGA вы можете подождать начальный разделитель, проверить тип, затем загрузить байты в регистры по порядку их поступления. Как только вы получите весь пакет, вы можете отправить любой модуль, с которым вы общаетесь, с помощью сигнал, что все данные готовы.