Я пытаюсь создать систему, которая принимает 8-байтовый ввод данных и 8-битный действительный ввод каждого такта, когда каждый бит на действительном входе либо проверяет, либо делает недействительным байт данных.Verilog: выравнивание допустимых и недопустимых байтов с динамического ввода
input wire [63:0] d_in;
input wire [7:0] v_in;
Программа должна обрабатывать d_in, выравнивая все допустимые байты следующим образом.
(где B является действительным байт и X является недействительным байт)
Instance 1:
d_in = B1 B2 X X B3 X B4 B5
d_out = B1 B2 B3 B4 B5 X X X
Instance 2:
d_in = X B1 B2 B3 X B4 B5 B6
d_out = B1 B2 B3 B4 B5 B6 X X
я в основном работал с алгоритмами, прежде где все манипуляции с битами были одинаковыми на каждой итерации, например assign d_out [7:0] = d_in [15:8];
, но тот факт, что количество и порядок действительных байтов может меняться при каждом вводе данных, означает, что эта стратегия не может быть использована.
Мой вопрос:
Есть ли способ, чтобы реализовать эту функцию в использовании Verilog или VHDL? Если это так, кто-то может указать мне на решение высокого уровня или какое-то соответствующее чтение, чтобы я мог лучше понять эту концепцию. Я думаю, что если бы я понял на высоком уровне, тогда я смог бы нанести ему кодировку, но в настоящее время я даже не уверен, что мне нужно кодировать.
Благодаря Zach
Ой! Если действительно нет установленного правила/шаблона, и это может быть любое количество байтов в любой позиции - тогда вы получите довольно глубокую логику. Зная это, вы должны использовать способность конвейерной обработки FPGA для предварительного расчета некоторых вложенных логик, разложения глубины и предоставления некоторого времени для инструментов. Предполагается, что вы не хотите буферизировать входные данные и смещать байты, но это в равной степени не будет тривиальным. –
@fpga_magik Если вы не возражаете, можете ли вы расширить то, что вы подразумеваете под буфером, входной сигнал и смещение байтов? Меня интересует это решение. Спасибо – Zach