-
Dmitrii Radov
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 13
-
Спасибо получено: 1
-
-
|
Подскажите пожалуйста кто-нибудь.Прошу не судить строго, в Verilog не особо разбираюсь.
У меня есть два входных сигнала input wire [7:0] x,y как сделать так, чтобы эти сигналы записывались в выходной регистр output reg [15:0] z, причем биты из x идут на четные места z, а из y на нечетные.
Что не так в моей реализации?
always @*
begin
if (reset)
out_mod = 16'b0000000000000000;
else if (!reset)
begin
x_reg = x;
y_reg = y;
for (i = 0; i <= `DATA_WIDTH_in-1; i = i + 1) // "оператор for в синтезируемых конструкциях используется для создания множественных экземпляров схем"(с) Я полагаю, что от него надо избавиться, иначе большие аппаратные затраты
begin
if (((i%2) == 0) || (i == 0))
begin
out_mod = x_reg;
end
else if ((i%2) == 1)
begin
out_mod[i+1] = y_reg;
end
end
end
end
endmodule
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Kapsik
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 2
-
Спасибо получено: 2
-
-
|
Должно сработать begin
if (reset)
z <= 16'b0000000000000000;
else
z<= {x[7],y[7],x[6],y[6],x[5],y[5],x[4],y[4],x[3],y[3],x[2],y[2],x[1],y[1],x[0],y[0]} ; Думаю в таком написании "в лоб" ничего страшного, в случае огромных разновидностей можно было бы рассмотреть цикл.
P.S. На правах совета. Разберитесь с блокирующими и не блокирующими присвоениями, то есть в чем разница "=" и "<="
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от Kapsik.
|
Время создания страницы: 0.132 секунд