МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА: язык Verilog

язык Verilog 3 года 10 мес. назад #2900

Подскажите пожалуйста кто-нибудь.Прошу не судить строго, в 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
Спасибо сказали: Mastar24

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: язык Verilog 3 года 10 мес. назад #2907

Должно сработать
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. На правах совета. Разберитесь с блокирующими и не блокирующими присвоениями, то есть в чем разница "=" и "<="
Спасибо сказали: Mastar24

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Kapsik.
  • Страница:
  • 1
Время создания страницы: 0.120 секунд

facebook  GitHub  YouTube  Twitter