Jump to content

    
Sign in to follow this  
MAZZI

Active-HDL 8.3 SP1 баги

Recommended Posts

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

 

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

Share this post


Link to post
Share on other sites
обнаружен баг сдвига влево Active-HDL 8.3 SP1

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

 

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

f_ExtractDSPI = DataSPI << Shift;

 

 

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

 

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


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

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

 

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

f_ExtractDSPI = DataSPI << Shift;

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

Share this post


Link to post
Share on other sites
для особо ленивых, не желающих думать, или хотя бы смотреть стандарт повторяю еще раз

 

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

 

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

 

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

 

ошибка:

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

Share this post


Link to post
Share on other sites
ошибка:

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

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

 

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this