Jump to content
    

Циклический сдвиг на Verilog

вот код

 

Скачайте с сайта xilinx документ xst.pdf (синтез, verilog-95) и начните с него.

Ибо у Вас сборная солянка из верилога 95, 2001, 2005.

Значит Вы не понимаете, что делаете.

Синтезированное Ваше будет что то типа этого.

(обратите внимание, Вы описали 2 по 8 регистров. А все это будет минимизировано до 8 регистров).

module a_v (
    inclk0,
    inclk1,
    shift_r
    );

    output[7:0] inclk0;
    input inclk1;
    output [7:0] shift_r;

    reg [7:0] inclk0_r = 8'b1000_0100;
    reg [7:0] shift_r_r = 8'b1000_0100;



    always @(posedge inclk1)
    begin
        inclk0_r[7:0] <= {inclk0_r[0], inclk0_r[7:1]};
        shift_r_r <= shift_r_r << 7 | shift_r_r >> 1;
    end

    assign inclk0 = inclk0_r;
    assign shift_r = shift_r_r;
endmodule

Share this post


Link to post
Share on other sites

to stu

А зачем вы используете два абсолютно, не считая названия, (хотя по смыслу названия регистры ого-как разные) одинаковых регистра?

И вот эти строки:

inclk0_r[7:0] <= {inclk0_r[0], inclk0_r[7:1]};
shift_r_r <= shift_r_r << 7 | shift_r_r >> 1;

они же, осмелюсь заметить, совершают одну и ту же операцию, но по разному записаны. Зачем так? Просто любопытно.

Edited by yume

Share this post


Link to post
Share on other sites

выше написано, должно работать! я, когда читаю из, представляю перестановку/сдвиг. но на симуляторе сдвига нет.

и если некоторым так будет легче, то

module a_v (
    inclk0,
    shift_r
    );

    input inclk0;
    output reg [7:0] shift_r;
    
    initial shift_r = 8'b1000_0100;
    
    always @ (posedge inclk0)
        shift_r <= shift_r << 7 | shift_r >> 1;    
endmodule

Share this post


Link to post
Share on other sites

У меня это работает. Симулятор ius8.2. Синтезированный код тож работает, только предустановку shift_r надо сделать.

Share this post


Link to post
Share on other sites

У меня это работает. Симулятор ius8.2. Синтезированный код тож работает, только предустановку shift_r надо сделать.

 

initial shift_r = 8'b1000_0100;

 

это разве не предустановка начальных значений / установка значения в начальный момент времени

Share this post


Link to post
Share on other sites

initial shift_r = 8'b1000_0100;

 

это разве не предустановка начальных значений / установка значения в начальный момент времени

Да это предустановка, причем синтезабельная.

У меня в ModelSim работает - регистр исправно сдвигается.

Share this post


Link to post
Share on other sites

после перезагрузки все ок стало. странно. такого квартус еще не выдавал

Share this post


Link to post
Share on other sites

А если мне нужно прекратить сдвиг в сторону старшего разряда до прихода логической единицы? То есть как только лог 1 появилась на старшем разряде работа регистра должна прекратиться. Как тогда необходимо записать код?

6 минут назад, Sanyochek21 сказал:

А если мне нужно прекратить сдвиг в сторону старшего разряда до прихода логической единицы? То есть как только лог 1 появилась на старшем разряде работа регистра должна прекратиться. Как тогда необходимо записать код?

В регистре должны быть входы Data, Set, Reset, Write, Clock, Q.

Share this post


Link to post
Share on other sites

1 час назад, Sanyochek21 сказал:

То есть как только лог 1 появилась на старшем разряде работа регистра должна прекратиться. Как тогда необходимо записать код?

Так и пишете: если в старшем разряде ноль, делаем сдвиг.

 

Для начала приведите свой вариант кода. А там уже будем исправлять.

Share this post


Link to post
Share on other sites

On 9/8/2011 at 3:57 PM, alexx188 said:

Кто-нибудь может мне объяснить для чего служат операторы <<< и >>>. И чем они отличаются от << и >>?

Первые работают со знаком (автоматически подставляют 1 или 0 в зависимости от msb. Использовать если у вас переменная объявлена как signed), вторые обыкновенный сдвиг.

Edited by lexx

Share this post


Link to post
Share on other sites

23.10.2021 в 15:06, andrew_b сказал:

Так и пишете: если в старшем разряде ноль, делаем сдвиг.

 

Для начала приведите свой вариант кода. А там уже будем исправлять.

image.png.f896fb206ecfb2d8d6a5d41a30955802.png

Share this post


Link to post
Share on other sites

23.10.2021 в 13:48, Sanyochek21 сказал:

нужно прекратить сдвиг в сторону старшего разряда до прихода логической единицы

Данной фразой описано разрешение записи по "0" в предпоследнем разряде.

Share this post


Link to post
Share on other sites

А нахрена, изивините, вставлять текст картинкой? Это альтернативное мышление какое-то?

Share this post


Link to post
Share on other sites

6 hours ago, Sanyochek21 said:

image.png.f896fb206ecfb2d8d6a5d41a30955802.png

Для начала: в строке 15 должно быть Q <= {Q[WIDTH-2:0], 1'b0};

 

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.

×
×
  • Create New...