MAZZI 1 6 июня, 2011 Опубликовано 6 июня, 2011 · Жалоба обнаружен баг сдвига влево Active-HDL 8.3 SP1 не работают такие конструкции: function f_ExtractDSPI; // Входы input [15: 0] DataSPI; input [3: 0] Shift; // Основное выражение begin // почему-то ALDEC не двигает влево, вправо работает f_ExtractDSPI = DataSPI << Shift; end endfunction `define t_DSPI(ARG1, ARG2) ARG1 << ARG2 ВЫЗОВ @(posedge SPI_CLK) // SPI_DI <= f_ExtractDSPI({1'b1, 15'h02F1}, 0); // SPI_DI <= `t_DSPI({1'b1, 15'h02F1}, 0); // тоже не работает SPI_DI <= {1'b1, 15'h02F1} << 0; // тоже не работает, сдвиг влево не работает во всех вариантах @(posedge SPI_CLK) SPI_nCS <= 0; // SPI_DI <= f_ExtractDSPI({1'b1, 15'h02F1}, 1); // SPI_DI <= `t_DSPI({1'b1, 15'h02F1}, 1); SPI_DI <= {1'b1, 15'h02F1} << 1; @(posedge SPI_CLK) SPI_nCS <= 0; // SPI_DI <= f_ExtractDSPI({1'b1, 15'h02F1}, 2); // SPI_DI <= `t_DSPI({1'b1, 15'h02F1}, 2); SPI_DI <= {1'b1, 15'h02F1} << 2; @(posedge SPI_CLK) // for (k=0; k<16; k=k+1)begin // SPI_nCS <= 0; // @(posedge SPI_CLK) // // DATA SHIFT // SPI_DI <= f_ExtractDSPI({1'b1, 15'h02F1}, k); // end только у меня такой прикол? сдвиг вправо (>>) работает нормально как и должен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 6 июня, 2011 Опубликовано 6 июня, 2011 · Жалоба обнаружен баг сдвига влево Active-HDL 8.3 SP1 телепатирую, всегда выдается один бит и почему то он постоянно равен 1'b0 ? подумайте, вот что реально вы тут делаете ? f_ExtractDSPI = DataSPI << Shift; ЗЫ. поведение этого кода заранее предопределено при любых Shift отличных от нуля Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MAZZI 1 8 июня, 2011 Опубликовано 8 июня, 2011 · Жалоба для особо непонятливых, телепатирую ещё раз (функция описана выше, тоже самое при использовании в не функции): @(posedge SPI_CLK) SPI_DI <= {1'b1, 15'h02F1} << 0; @(posedge SPI_CLK) SPI_DI <= {1'b1, 15'h02F1} << 1; @(posedge SPI_CLK) SPI_DI <= {1'b1, 15'h02F1} << 2; и ТАК ДАЛЕЕ,эквивалентная запись: for (k=0; k<16; k=k+1)begin @(posedge SPI_CLK) // DATA SHIFT SPI_DI <= f_ExtractDSPI({1'b1, 15'h02F1}, k); end повторю, что уже писал сдвиг вправо >> работает при тех же условиях Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 8 июня, 2011 Опубликовано 8 июня, 2011 · Жалоба для особо непонятливых, телепатирую ещё раз (функция описана выше, тоже самое при использовании в не функции): для особо ленивых, не желающих думать, или хотя бы смотреть стандарт повторяю еще раз подумайте, вот что реально вы тут делаете ? f_ExtractDSPI = DataSPI << Shift; Поведение этого кода заранее предопределено при любых Shift отличных от нуля. подумайте почему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MAZZI 1 8 июня, 2011 Опубликовано 8 июня, 2011 · Жалоба для особо ленивых, не желающих думать, или хотя бы смотреть стандарт повторяю еще раз подумайте, вот что реально вы тут делаете ? Поведение этого кода заранее предопределено при любых Shift отличных от нуля. подумайте почему. наверное твоя важность мешает тебе нормально объяснять в чем ошибка, ошибка: функция f_ExtractDSPI однобитовая, поэтому от входящих данных попадает нулевой бит, а не старший, нулевой бит, кроме сдвига на 0, заполняется нулями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 8 июня, 2011 Опубликовано 8 июня, 2011 · Жалоба ошибка: функция f_ExtractDSPI однобитовая, поэтому от входящих данных попадает нулевой бит, а не старший, нулевой бит, кроме сдвига на 0, заполняется нулями. Видите, это было не сложно, ответ то лежал на виду. ЗЫ. согласитесь, найти решение самому, намного интереснее чем получить готовый ответ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться