Перейти к содержанию
    

Active-HDL 8.3 SP1 баги

обнаружен баг сдвига влево 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

 

только у меня такой прикол? сдвиг вправо (>>) работает нормально как и должен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

обнаружен баг сдвига влево Active-HDL 8.3 SP1

телепатирую, всегда выдается один бит и почему то он постоянно равен 1'b0 ?

 

подумайте, вот что реально вы тут делаете ?

f_ExtractDSPI = DataSPI << Shift;

 

 

ЗЫ. поведение этого кода заранее предопределено при любых Shift отличных от нуля

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для особо непонятливых, телепатирую ещё раз (функция описана выше, тоже самое при использовании в не функции):

    @(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

 

повторю, что уже писал сдвиг вправо >> работает при тех же условиях

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для особо непонятливых, телепатирую ещё раз (функция описана выше, тоже самое при использовании в не функции):

для особо ленивых, не желающих думать, или хотя бы смотреть стандарт повторяю еще раз

 

подумайте, вот что реально вы тут делаете ?

f_ExtractDSPI = DataSPI << Shift;

Поведение этого кода заранее предопределено при любых Shift отличных от нуля. подумайте почему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для особо ленивых, не желающих думать, или хотя бы смотреть стандарт повторяю еще раз

 

подумайте, вот что реально вы тут делаете ?

 

Поведение этого кода заранее предопределено при любых Shift отличных от нуля. подумайте почему.

 

наверное твоя важность мешает тебе нормально объяснять в чем ошибка,

 

ошибка:

функция f_ExtractDSPI однобитовая, поэтому от входящих данных попадает нулевой бит, а не старший, нулевой бит, кроме сдвига на 0, заполняется нулями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ошибка:

функция f_ExtractDSPI однобитовая, поэтому от входящих данных попадает нулевой бит, а не старший, нулевой бит, кроме сдвига на 0, заполняется нулями.

Видите, это было не сложно, ответ то лежал на виду.

 

ЗЫ. согласитесь, найти решение самому, намного интереснее чем получить готовый ответ :biggrin:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...