1 of 35

Последовательностная логика

Введение в проектирование на языке Verilog

Прутьянов В. В.

2 of 35

Последовательностная логика

  • Виды цифровых схем
  • Последовательностная логика
  • Защелки и триггеры
  • Синхронная логика
  • Описание триггеров на языке Verilog
  • Счетчики
  • Массивы в Verilog
  • Регистровые файлы
  • Сдвиговый регистр
  • Синхронное FIFO
  • Домашнее задание

3 of 35

Цифровые схемы

Комбинационные

Последовательностные

Синхронные

4 of 35

Цифровые схемы

Комбинационные

Последовательностные

Синхронные

5 of 35

  • Последовательностные схемы, в отличие от комбинационных, обладают возможностью запоминать значения с предыдущих моментов времени
  • Предыдущие значения входов схемы определяют состояние системы
  • Бистабильный элемент – элемент с двумя устойчивыми состояниями, способный хранить 1 бит информации

Последовательностная логика

6 of 35

SR-защелка (SR-latch)

  • SR-защелка – двухвходовый элемент, способный хранить 1 бит информации
  • В основе устройства SR-защелки лежит бистабильный элемент
  • Вход S (set) ставит выход Q в 1
  • Вход R (reset) сбрасывает выход Q в 0
  • Подача 1 одновременно на S и R входы приводит к неопределенному поведению

R(t)

S(t)

Q(t+dt)

0

0

Q(t)

0

1

1

1

0

0

1

1

X

7 of 35

D-защелка (D-latch, latch)

  • D-защелка – двухвходовый элемент, способный хранить 1 бит информации
  • В основе устройства D-защелки лежит SR-защелка
  • Синхронизация происходит по уровню входа C
  • При подаче 1 на вход C, защелка пропускает сигнал насквозь
  • При подаче 0 на вход C, защелка выдает сохраненное значение

C(t)

D(t)

Q(t+dt)

0

X

Q(t)

1

0

0

1

1

1

8 of 35

D-триггер (flip-flop)

  • D-триггер – цифровой элемент, способный хранить 1 бит информации
  • Устройство D-триггера может быть

представлено двумя D-защелками

  • Синхронизация происходит по положительному фронту (positive edge) тактового сигнала CLK
  • D-триггер копирует значение с D на Q по фронту тактового сигнала и запоминает это состояние

CLK(t)

D(t)

Q(t+dt)

0→1

0

0

0→1

1

1

0

X

Q(t)

1

X

Q(t)

9 of 35

GDS: D-flip-flop, D-latch, инвертор и NAND из PDK SKY130 High Density

  • Инвертор
    • 2 МОП-транзистора
  • NAND
    • 4 МОП-транзистора
  • D-latch
    • 18 МОП-транзисторов
  • D-flip-flop
    • 24 МОП-транзистора

10 of 35

Цифровые схемы

Комбинационные

Последовательностные

Синхронные

11 of 35

Синхронная логика

  • В реальности комбинационная логика не может работать мгновенно
  • Триггеры позволяют сохранять и синхронизировать результаты вычислений, произведенных комбинационной логикой
  • Тактовый сигнал (clock) может генерироваться кварцевым генератором
  • Тактовый сигнал имеет фронты (positive edge) и спады (negative edge)
  • Несколько триггеров, работающих от одного clock, называются регистром (register)

12 of 35

Синхронная логика

  • Каждый элемент синхронной цифровой схемы является либо регистром, либо комбинационной схемой
  • Как минимум один элемент схемы является регистром
  • На каждом циклическом пути присутствует как минимум один регистр
  • Все участки комбинационной логики должны успеть закончить вычисления за период тактового сигнала

13 of 35

D-триггер в Verilog

reg q;

always @(posedge clk) begin

q <= d; // Non-blocking assignment

end

  • В симуляторе переменная q в момент времени 0 имеет неопределенное значение
  • Для описания регистров в Verilog используется сигнал типа reg, блок always и неблокирующее присваивание
  • В списке чувствительности блока always указано событие posedge clk, по которому срабатывают неблокирующие присваивания

14 of 35

Неблокирующее присваивание в Verilog

  • Nonblocking assignment обозначается <=
  • Возможно только* внутри always и initial блока
  • Слева – сигнал типа reg, справа – любой тип
  • В синтезируемом коде описывает синхронную последовательностную логику
  • В симуляции по событию из списка чувствительности обновляет LHS значения из RHS после выполнения всех непрерывных и блокирующих (но не <=) обновлений
  • Порядок неблокирующих присваиваний не важен, они одновременно происходят во всех always-блоках чувствительных к событию
  • Не рекомендуется в синтезируемом RTL-коде в одном always смешивать blocking и non-blocking присваивания

reg a, b;�

always @(posedge clk) begin

a <= d;

b <= a;

end

15 of 35

D-триггер с асинхронным сбросом в Verilog

reg q;

always @(posedge clk or negedge rst_n)

begin

if (!rst_n)

q <= 0;

else

q <= d;

end

  • Сигнал сброса (reset) позволяет установить значение регистра q в 0
  • Изображен асинхронный вход в сброс и синхронный выход из сброса
  • Такой always-блок срабатывает по 2 видам событий – фронт клока и сброс
  • Сигнал сброса часто делают на отрицательной логике (т. е. схема в состоянии сброса, когда rst_n = 0)

16 of 35

Счетчик

  • Синхронная цифровая схема
  • Счетчик от 0 до m-1 имеет m состояний
  • Счетчик от 0 до 2ⁿ-1 требует n-битный регистр и называется двоичным n-разрядным счетчиком

m-1

1

2

0

...

Диаграмма состояний счетчика прямого счета

17 of 35

Пример: счетчик от 0 до 9

module counter10 (

input clk,

output [3:0] o_cnt

);

reg [3:0] cnt;

assign o_cnt = cnt;

always @(posedge clk or negedge rst_n) begin

if (!rst_n)

cnt <= 4'd0;

else

if (cnt == 4'd9)

cnt <= 4'd0;

else

cnt <= cnt + 4'd1;

end

endmodule

18 of 35

Пример: деление частоты

module clkdiv #(

parameter F0 = 50_000_000,

parameter F1 = 12_500_000

)(

input clk,

input rst_n,

output out

);

localparam CNT_WIDTH = $clog2(F0/F1);

reg [CNT_WIDTH-1:0] cnt;

assign out = &cnt;

always @(posedge clk or negedge rst_n) begin

if (!rst_n)

cnt <= {CNT_WIDTH{1'b0}};

else

cnt <= cnt + 1'b1;

end

endmodule

19 of 35

Регистровый файл

  • Регистровый файл – массив регистров одинаковой разрядности с возможностью записи и чтения
  • Регистровый файл может иметь несколько шин адресов и шин данных:
    • 1RW (Single-Port) – 1 шина адреса, 1 чтения, 1 записи
    • 1R1W (Two-Port) – 2 шины адреса, 1 чтения, 1 записи
    • 2R1W – 3 шины адреса, 2 чтения, 1 записи
    • 2RW (Dual-Port) – 2 шины адреса, 2 чтения, 2 записи
    • etc.
  • Изменение количества портов (определяется по количеству шин адреса) при одинаковом объеме данных сильно влияет на PPA-характеристики регистрового файла

1RW регистровый файл 4x8

20 of 35

Массивы в Verilog/SystemVerilog

  • Unpacked Array
    • Каждый элемент массива рассматривается отдельно
    • Не могут быть присвоены целиком, только поэлементно
    • Пример: reg [7:0] r[15:0];
    • Пример: r[3] <= 8'hFF;
    • В SystemVerilog могут иметь любое количество измерений
    • Пример: wire [7:0] r4[16][4];
  • Packed Array
    • Рассматриваются как единый битовый вектор
    • Упакованные массивы можно присваивать целиком, по частям или поэлементно
    • Могут быть любой размерности
    • Пример: reg [15:0][7:0] mem;
    • Пример: wire [11:0][3:0][1:0] bus12;
    • Пример: assign bus12[1] = 8'b0;
    • Пример: assign bus12 = 96'b0;

21 of 35

Пример: регистровый файл

module reg_file(

input wire clk,

input wire [3:0] i_rd_addr,

output wire [7:0] o_rd_data,

input wire [3:0] i_wr_addr,

input wire [7:0] i_wr_data,

input wire i_wr_en

);

reg [7:0] r[15:0]; // Unpacked array

assign o_rd_data = r[i_rd_addr];

always @(posedge clk) begin

if (i_wr_en) begin

r[i_wr_addr] <= i_wr_data;

end

end

endmodule

22 of 35

Сдвиговый регистр

  • Сдвиговый регистр – синхронное цифровое устройство, хранящее последовательность бит и способное выполнять следующие операции за 1 такт:
    • Сдвиг – регистр сдвигает свое содержимое на 1 позицию, выдавая MSB бит на выход и принимая новый LSB бит со входа
    • Параллельный ввод – регистр полностью обновляет свое содержимое, загружая данные со входа
  • Сдвиговый регистр позволяет конвертировать параллельные потоки данных в последовательные или наоборот

Сдвиговый регистр на 4 бита

X₃

X₂

X₁

X₀

Последовательный

вывод 1 бита

Параллельный ввод 4 бит

0

23 of 35

Генерация псевдослучайных чисел: LFSR

23

XOR

  • Регистр сдвига с линейной обратной связью (РСЛОС, linear feedback shift register, LFSR)
  • Генерирует (2ⁿ-1)-периодическую последовательность, если характеристический многочлен p(x) примитивный над полем GF(2)
  • Можно использовать как генератор псевдослучайных чисел

24 of 35

LFSR: конфигурация Фибоначчи

24

#

1

2

3

ОС

0

0

0

1

1

1

1

0

0

1

2

1

1

0

1

3

1

1

1

0

4

0

1

1

1

5

1

0

1

0

6

0

1

0

0

7

0

0

1

1

0

0

1

+

1

2

3

1

25 of 35

LFSR: конфигурация Галуа

25

#

3

2

1

ОС

0

0

0

1

1

1

1

0

1

1

2

1

1

1

1

3

1

1

0

0

4

0

1

1

1

5

1

0

0

0

6

0

1

0

0

7

0

0

1

1

0

0

1

3

2

1

+

1

26 of 35

Синхронное FIFO

  • FIFO (First In – First Out) буфер – цифровое устройство c 2 портами (чтение и запись), которое хранит данные и предоставляет к ним доступ как к очереди
  • Обязательно имеет сигналы, указывающие на пустоту/полноту буфера
  • Иногда имеет сигналы, показывающие, что буфер почти пуст/полон
  • Позволяет сглаживать скачки скорости поступления и скорости приема при управлении потоком данных (flow control)
  • В синхронном FIFO порты синхронизированы с одним и тем же тактовым сигналом
  • Простая аппаратная реализация FIFO – кольцевой буфер (ring buffer) в 1R1W памяти

27 of 35

Синхронное FIFO

  • Простая аппаратная реализация FIFO – кольцевой буфер (ring buffer) в 1R1W памяти
  • Когда RD и WR “указатели” равны, очередь либо полная, либо пустая, в зависимости от старшего бита
  • В таком FIFO чтение из пустого буфера и запись в полный приводит к неопределенному поведению

28 of 35

Бистабильный элемент: аналоговый подход

28

  • На диаграмме состояний бистабильного элемента передаточные характеристики CMOS-инверторов в петле положительной обратной связи образуют 2 устойчивых состояния равновесия:
    • UA = 0, UB = U+
    • UA = U+, UB = 0

29 of 35

Бистабильный элемент: метастабильность

29

  • На диаграмме состояний бистабильного элемента передаточные характеристики CMOS-инверторов в петле положительной обратной связи образуют 2 устойчивых состояния равновесия:
    • UA = 0, UB = U+
    • UA = U+, UB = 0
  • В системе также существует третье состояние равновесия – неустойчивое (метастабильное)

sky130_fd_sc_hd__inv_1.spice

30 of 35

D-latch: метастабильность

30

GATE DATA Q BUF(Q)

sky130_fd_sc_hd__dlxtp_1.spice

31 of 35

D-flip-flop: метастабильность

31

sky130_fd_sc_hd__dfxtp_2.spice

CLK DATA Q BUF(Q)

sky130_fd_sc_hd__dfxtp_2.spice

32 of 35

Метастабильность: причины возникновения

  1. Внешние входные сигналы
  2. Входные сигналы из другого тактового домена (clock-domain crossing, CDC)
  3. Нарушение таймингов

33 of 35

Метастабильность: цепи синхронизации

  • Если на вход D-триггера подается асинхронный (относительно тактового сигнала) сигнал, триггер может перейти в метастабильное состояние, а затем в стабильное, т.к. вероятность этого события экспоненциально растет с течением времени
  • На этот процесс влияют внешние условия, задержка сигнала и характеристики триггера
  • Чтобы D-триггеры синхронной логики не попадали в метастабильное состояние, асинхронные сигналы можно синхронизировать с тактовым сигналом через цепь синхронизации (synchronizer chain) из 2-3 триггеров
  • Цепь синхронизации подходит не всегда, поскольку может потерять короткий импульс

33

34 of 35

D-триггер со входом разрешения

reg q;

always @(posedge clk or negedge rst_n) begin

if (!rst_n)

q <= 0;

else if (en)

q <= d;

end

  • Чтобы модуль работал с кратно меньшей скоростью, дополнительный тактовый сигнал и тактовый домен не требуются
  • Подавая 1 на вход разрешения раз в N тактов, можно достичь замедления в N раз
  • Такой способ подходит для работы с низкоскоростными интерфейсами

35 of 35

Задание

  1. Делитель из 50 МГц в 9600/38400/115200 Гц
  2. Регистровый файл на 32 регистра по 32 бит каждый с 2 портами чтения и 1 портом записи (2R1W)
  3. Сдвиговый регистр на 8 бит с 1-битным выходом, входом параллельной загрузки и входом разрешения
  4. Генератор 8-битных псевдослучайных чисел по схеме LFSR
  5. Синхронное FIFO с параметризуемой (по степеням 2) глубиной и произвольно параметризуемой шириной