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

Циклический сдвиг на 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

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


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

to stu

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

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

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

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

Изменено пользователем yume

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


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

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

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

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

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


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

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

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


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

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

 

initial shift_r = 8'b1000_0100;

 

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

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


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

initial shift_r = 8'b1000_0100;

 

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

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

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

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


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

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

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

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

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

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


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

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

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

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

 

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

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


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

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

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

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

Изменено пользователем lexx

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


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

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

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

 

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

image.png.f896fb206ecfb2d8d6a5d41a30955802.png

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


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

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

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

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

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


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

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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