Jump to content

    
Sign in to follow this  
Vehfl

Запись в сдвиговый регистр

Recommended Posts

Пишу описание декодера, работающего в нескольких режимах: 0 - начальная установка, 1 - запись в регистр, 2 - считывание. Режим записи длится ровно столько тактов сколько бит должно войти в регистр.

В режиме записи в сдвиговый регистр не берется первый пришедший бит, все что идет дальше заходит в регистр. Есть ли способ это исправить или можно только внести дополнительную задержку чтобы первый бит приходил во второй такт режима считывания? Ниже код и временная диаграмма.

always @(posedge clk) begin

if (reset)
    begin
        mode <= 0;
        cnt <= 0;
        shiftreg <= 0;
    end
else
    case (mode)
    0:        begin  
                mode <= 1;
                shiftreg[0:14] <= 0;
            end
    1:     begin     
                cnt <= cnt + 1;
                shiftreg <= {In, shiftreg[0:271]};
            if (cnt==257) begin
                mode <= 2;
                cnt <= 0; end
            else 
                mode <= 1;
            end

5299875.png

Share this post


Link to post
Share on other sites

0:        begin  
                mode <= 1;
                shiftreg[0:14] <= {In, {272{1'b0}}};
            end

 

может так?

 

Правда тут надо понять в какой момент появляются данные на входе, если только ко 2 такту, то надо увеличить на 1 счетчик второй фазы. Если они есть в первую фазу, то так как выше

Share this post


Link to post
Share on other sites
0:        begin  
                mode <= 1;
                shiftreg[0:14] <= {In, {272{1'b0}}};
            end

 

может так?

 

Правда тут надо понять в какой момент появляются данные на входе, если только ко 2 такту, то надо увеличить на 1 счетчик второй фазы. Если они есть в первую фазу, то так как выше

Не понял этот кусок кода. Мне для работы алгоритма надо ставить в нуль первые пятнадцать разрядов регистра. Пришедшие данные на диаграмме в переменой In. Самый первый бит пришедших данных не входит в регистр, начинает входить со второго.

Share this post


Link to post
Share on other sites
В режиме записи в сдвиговый регистр не берется первый пришедший бит, все что идет дальше заходит в регистр. Есть ли способ это исправить или можно только внести дополнительную задержку чтобы первый бит приходил во второй такт режима считывания?

 

работает так, если нулевой разряд обнулять только по ресету

if (reset)
    begin
        mode <= 0;
        cnt <= 0;
        shiftReg <= 0;
    end
else begin
    case (mode)
    0:        begin  
                mode <= 1;
                shiftReg[0] <= In;
                 shiftReg[1:14] <= 0;
            end
    1:     begin     
                cnt <= cnt + 1;
                shiftReg <= {In, shiftReg[0:271]};
           if (cnt==257) begin
                mode <= 2;
                cnt <= 0; end
            else begin
                mode <= 1;
              end
            end

post-77312-1405337423_thumb.png

 

Share this post


Link to post
Share on other sites

А блин, у вас регистр 271 бит, первые 15 надо занулить, тогда

shiftreg[0:14] <= 0;

 

замените на 2 строчки

shiftreg[0:270] <=0;

shiftreg[271] <= in;

занулить все начало регистра, пусть в начале он весь нулиться, и в последний бит сразу сохранить пришедший сигнал,

на или если важно хранить старое значение то

shiftreg[0:14] <= 0;

shiftreg[271] <= in;

смысл что кроме нуления начала, надо сразу еще и сохранить вход...

 

Блин как неудобно когда индекс от нуля в плюс:)....

 

 

 

Share this post


Link to post
Share on other sites

Частоту следует увеличить как минимум в 8 раз и сделать строб, который будет долбить данные в регистр, если идеально, то по середине, иначе прием будет непредсказуем. Почитать можно тут http://www.fpga4fun.com/SerialInterface.html. Если надо пропустить первый бит, предположу что он для синхронизации, лучше сделать автомат (state машину). 1 состояние(state) ожидание и обработка 1-го бита, со 2 state начинаем делать дела с записью и сдвигами.

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