dsp 0 30 января, 2006 Опубликовано 30 января, 2006 · Жалоба как правильно написать на verilog вот такой код вообщето я его переписал в verilog но при компиляции в active-hdl есть ошибка в тексте внизу она показана в verilog-2001 вроде есть операция возведения в степень но все равно ошибка остается always @(B_in or shift_B) begin : I1combo reg[5:0] stemp; reg[28:0] dtemp; reg[28:0] temp; temp = {29{1'bx}}; stemp = shift_B; temp = B_in; begin : xhdl_5 integer i; for(i = 5; i >= 0; i = i - 1) begin if (i < 5) begin if ((stemp) == 1'b1 | (stemp) == 1'b1) begin dtemp = {29{1'b0}}; dtemp[28 - 2 ** i:0] = temp[28:2 ** i]; вот здесь ошибка end else if ((stemp) == 1'b0 | (stemp) == 1'b0) begin dtemp = temp; end else begin dtemp = {29{1'bx}}; end end else begin if ((stemp) == 1'b1 | (stemp) == 1'b1) begin dtemp = {29{1'b0}}; end else if ((stemp) == 1'b0 | (stemp) == 1'b0) begin dtemp = temp; end else begin dtemp = {29{1'bx}}; end end temp = dtemp; end end B_shift <= dtemp ; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 30 января, 2006 Опубликовано 30 января, 2006 · Жалоба ну а если вот так dtemp[28 - (1<< i):0] = temp[28:(1<< i)]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsp 0 30 января, 2006 Опубликовано 30 января, 2006 · Жалоба так не получается Expected a constant as index: 28-(1<<i). Operand is not a constant. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gate 0 30 января, 2006 Опубликовано 30 января, 2006 · Жалоба Переменный индекс в верилоге допускается только для однобитового сигнала, типа a. Попробуйте сформировать сигнал примерно так: k=28 - 2 ** i; for(j = 0; j < 32; j = i + 1) if (j<=k) dtemp[j] = temp[лень считать выражение здесь :(]; else dtemp[j] =1'b1; Короче, формируйте шину побитово. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться