1 of 51

Статическая память в ASIC и FPGA

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

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

2 of 51

Память: бистабильный элемент

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

4 транзистора

3 of 51

Память: D-защёлка

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

4 транзистора

D-защелка

18 транзисторов

4 of 51

Память: D-триггер

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

4 транзистора

D-защелка

18 транзисторов

D-триггер

24 транзистора

5 of 51

Память: бистабильный элемент

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

4 транзистора

6 of 51

Память: ячейка 6T SRAM

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

4 транзистора

6T SRAM ячейка

6 транзисторов

7 of 51

SRAM: массив битовых ячеек

  • 6T SRAM ячейки можно группировать по строкам и столбцам для получения 1RW 2-мерных битовых массивов (bitcell array) статической памяти с произвольным доступом (static random access memory, SRAM)
  • При доступе на чтение/запись к слову WL соответствующей строки выставляется в 1, остальные в 0
  • При записи слова BL и ~BL всех столбцов выставляются в требуемые значения
  • При чтении слова сигнал считывается через усилитель с BL и ~BL всех столбцов в буфер
  • При отсутствии записи/чтения WL всех строк выставляется в 0

4x2 1RW bitcell array

8 of 51

SRAM: многопортовая битовая ячейка

Источник изображения: https://github.com/VLSIDA/OpenRAM/blob/stable/docs/source/bitcells.md

Многопортовая (1RW1R1W) ячейка SRAM

9 of 51

Skywater 130nm: SP SRAM cell vs. DP SRAM cell vs. D flip-flop

  • OpenRAM Single-Port SRAM cell (1RW)
    • 6 МОП-транзисторов
  • OpenRAM Dual-Port SRAM cell (2RW)
    • 8 МОП-транзисторов
  • SKY130 High Density D-flip-flop
    • 24 МОП-транзистора

10 of 51

OpenRAM

OpenRAM SKY130 1Kbyte 1RW1R 8bit word

11 of 51

OpenRAM: конфигурация

tech_name = "sky130" # Tech Library

nominal_corner_only = True # TT 1.8V 25°C

word_size = 32 # Bits

num_words = 256

write_size = 32 # Bits

# Dual port

num_rw_ports = 1

num_r_ports = 1

num_w_ports = 0

ports_human = '1rw1r'

check_lvsdrc = True

12 of 51

OpenRAM: datasheet

13 of 51

OpenRAM: временные характеристики

Чтение

Запись

14 of 51

OpenRAM: Verilog модель 1RW1R SRAM (fast functional)

module sky130_sram_1kbyte_1rw1r_32x256_8(

// Port 0: RW

clk0, csb0, web0, addr0, din0, dout0,

// Port 1: R

clk1, csb1, addr1, dout1

); // OpenRAM SRAM model

reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1];

reg csb0_reg, csb1_reg, web0_reg;

reg [ADDR_WIDTH-1:0] addr0_reg, addr1_reg;

reg [DATA_WIDTH-1:0] din0_reg;

reg [DATA_WIDTH-1:0] dout0, dout1;

always @(posedge clk0) begin

csb0_reg = csb0;

web0_reg = web0;

addr0_reg = addr0;

din0_reg = din0;

end

always @(posedge clk1) begin

csb1_reg = csb1;

addr1_reg = addr1;

end

// Memory Write Block Port 0

always @ (negedge clk0) begin : MEM_WRITE0

if ( !csb0_reg && !web0_reg )

mem[addr0_reg][31:0] = din0_reg[31:0];

end

// Memory Read Block Port 0

always @ (negedge clk0) begin : MEM_READ0

if (!csb0_reg && web0_reg)

dout0 <= #(DELAY) mem[addr0_reg];

end

// Memory Read Block Port 1

always @ (negedge clk1) begin : MEM_READ1

if (!csb1_reg)

dout1 <= #(DELAY) mem[addr1_reg];

end

Это несинтезируемая функциональная модель!

15 of 51

Verilog: тестбенч

Testbench

Synthesizable Design

IN

OUT

Non-RTL�IP #1

Non-RTL�IP #2

16 of 51

Verilog: функциональные модели

Testbench

Synthesizable Design

Verilog

Functional

Model #1

Verilog

Functional

Model #2

IN

OUT

17 of 51

Ресурсы Altera Cyclone IV E

Ресурсы:

  • Логические элементы
  • Порты ввода-вывода
  • Умножители
  • Блоки PLL (ФАПЧ)
  • Блоки памяти М9K

17

Источник: Cyclone IV FPGA Device Family Overview, Cyclone IV Device Handbook, Volume 1, Chapter 1. Table 1-1.

18 of 51

M9K в режиме Single-Port Memory

19 of 51

Cyclone IV M9K: read operation

Источник: Cyclone IV FPGA Device Family Overview, Cyclone IV Device Handbook, Volume 1, Chapter 3. Figure 3-3.

20 of 51

Cyclone IV M9K: write operation

Источник: Cyclone IV FPGA Device Family Overview, Cyclone IV Device Handbook, Volume 1, Chapter 3. Figure 3-4, Figure 3-2.

21 of 51

Cyclone IV M9K: byte enable

Источник: Cyclone IV FPGA Device Family Overview, Cyclone IV Device Handbook, Volume 1, Chapter 3. Figure 3-1.

22 of 51

Пример: вывод содержимого ROM через UART

23 of 51

Quartus: IP Catalog

24 of 51

Quartus: ROM: 1-PORT

25 of 51

Quartus: ROM: 1-PORT

26 of 51

Quartus: ROM: 1-PORT

27 of 51

Memory Initialization File: data.mif

WIDTH=8;

DEPTH=1024;

ADDRESS_RADIX=UNS;

DATA_RADIX=HEX;

CONTENT BEGIN

0 : 3A;

1 : 3A;

2 : 3A;

3 : 3A;

........................

1021 : 3A;

1022 : 0D;

1023 : 0A;

END;

28 of 51

RTL Viewer

29 of 51

ModelSim Intel FPGA 2020.1 в графическом режиме

vlog fpga_top_tb.v fpga_top.v uart_tx.v counter.v altera/rom1r.v

vsim work.tb -L altera_mf_ver

30 of 51

ModelSim Intel FPGA 2020.1 в графическом режиме

vlog fpga_top_tb.v fpga_top.v uart_tx.v counter.v altera/rom1r.v

vsim work.tb -L altera_mf_ver

31 of 51

Quartus: Settings > EDA Tool Settings > Simulation

32 of 51

Quartus: fpga.qsf

# EDA Netlist Writer Assignments

# ==============================

set_global_assignment -name EDA_TIME_SCALE "1 ps" -section_id eda_simulation

set_global_assignment -name EDA_OUTPUT_DATA_FORMAT "VERILOG HDL" -section_id eda_simulation

set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS TEST_BENCH_MODE -section_id eda_simulation

set_global_assignment -name EDA_NATIVELINK_SIMULATION_TEST_BENCH fpga_top_tb -section_id eda_simulation

set_global_assignment -name EDA_TEST_BENCH_NAME fpga_top_tb -section_id eda_simulation

set_global_assignment -name EDA_TEST_BENCH_DESIGN_INSTANCE_NAME fpga_top -section_id eda_simulation��set_global_assignment -name EDA_DESIGN_INSTANCE_NAME fpga_top -section_id fpga_top_tb

set_global_assignment -name EDA_TEST_BENCH_MODULE_NAME tb -section_id fpga_top_tb

set_global_assignment -name EDA_TEST_BENCH_FILE fpga_top_tb.v -section_id fpga_top_tb

33 of 51

ModelSim Intel FPGA 2020.1 в консольном режиме

vlog fpga_top_tb.v fpga_top.v uart_tx.v counter.v altera/rom1r.v

Model Technology ModelSim - Intel FPGA Edition vlog 2020.1 Compiler 2020.02 Feb 28 2020

Start time: 03:48:54 on Mar 17,2025

vlog fpga_top_tb.v fpga_top.v uart_tx.v counter.v altera/rom1r.v

-- Compiling module tb

-- Compiling module fpga_top

-- Compiling module uart_tx

-- Compiling module counter

-- Compiling module rom1r

Top level modules:

tb

End time: 03:48:55 on Mar 17,2025, Elapsed time: 0:00:01

Errors: 0, Warnings: 0

vsim -c work.tb -L altera_mf_ver -do 'run -all'

Reading pref.tcl

# 2020.1

# vsim -c work.tb -L altera_mf_ver -do "run -all"

# Start time: 03:48:56 on Mar 17,2025

# Loading work.tb

# Loading work.fpga_top

# Loading work.uart_tx

# Loading work.counter

# Loading work.rom1r

# Loading altera_mf_ver.altsyncram

# Loading altera_mf_ver.altsyncram_body

# Loading altera_mf_ver.ALTERA_DEVICE_FAMILIES

# Loading altera_mf_ver.ALTERA_MF_MEMORY_INITIALIZATION

# run -all

# ** Note: $finish : fpga_top_tb.v(27)

# Time: 1 ms Iteration: 0 Instance: /tb

# End time: 03:49:03 on Mar 17,2025, Elapsed time: 0:00:07

# Errors: 0, Warnings: 0

34 of 51

ModelSim Intel FPGA 2020.1 в консольном режиме

vlog fpga_top_tb.v fpga_top.v uart_tx.v counter.v altera/rom1r.v

Model Technology ModelSim - Intel FPGA Edition vlog 2020.1 Compiler 2020.02 Feb 28 2020

Start time: 03:48:54 on Mar 17,2025

vlog fpga_top_tb.v fpga_top.v uart_tx.v counter.v altera/rom1r.v

-- Compiling module tb

-- Compiling module fpga_top

-- Compiling module uart_tx

-- Compiling module counter

-- Compiling module rom1r

Top level modules:

tb

End time: 03:48:55 on Mar 17,2025, Elapsed time: 0:00:01

Errors: 0, Warnings: 0

vsim -c work.tb -L altera_mf_ver -do 'run -all'

Reading pref.tcl

# 2020.1

# vsim -c work.tb -L altera_mf_ver -do "run -all"

# Start time: 03:48:56 on Mar 17,2025

# Loading work.tb

# Loading work.fpga_top

# Loading work.uart_tx

# Loading work.counter

# Loading work.rom1r

# Loading altera_mf_ver.altsyncram

# Loading altera_mf_ver.altsyncram_body

# Loading altera_mf_ver.ALTERA_DEVICE_FAMILIES

# Loading altera_mf_ver.ALTERA_MF_MEMORY_INITIALIZATION

# run -all

# ** Note: $finish : fpga_top_tb.v(27)

# Time: 1 ms Iteration: 0 Instance: /tb

# End time: 03:49:03 on Mar 17,2025, Elapsed time: 0:00:07

# Errors: 0, Warnings: 0

Функциональные модели M9K

35 of 51

Функциональная модель для Icarus Verilog

module rom1r_wrap(

input wire clock,

input wire [9:0] address,

output wire [7:0] q

);

`ifdef __ICARUS__

reg [7:0] mem [0:1023];

reg [9:0] addr_d;

initial $readmemh("data.txt", mem);

always @(posedge clock)

addr_d <= address;

assign q = mem[addr_d];

`else // Quartus/ModelSim

rom1r u_rom (

.address (address),

.clock (clock ),

.q (q )

);

`endif

endmodule

ModelSim (altera_mf_ver)

Icarus Verilog (rom1_wrap)

36 of 51

In-System Memory Content Editor

In-System Memory

Content Editor

37 of 51

Quartus: Tools > In-System Memory Content Editor

$ sudo picocom -b 2000000 /dev/ttyUSB0

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::.. ..---.: . :-:: :: :--: :::::. .:::::::

::=%@@@@%%%@@@@:@@@@@@%#@@@+ @@@@%%@@@@@ ::::. .@@= :::::::

::. @* %# @% @@* .@@% +@@ :::: -@@@@ ::::::

::: @+ @- @@ @@# @@= :::: =@ :::. @@ %@+ :::::

::: @@@@@@- :.: @@ .-@@@: .@@ ::: :. +: #@= .::::

::: @* :@- ::: @@#@@%- :@@ :::=@@@@@*. -@@@%@@@@- ::::

::: @# : .::: @@ .::. @@% .:: +@@ .=@:.: @@@ .::

:. @* .:::: @% .::::: -@@ @@@ @# :@= .:

:.@@@@@@@@.::::@@@@@@@@.:::::: -@@@@@@ :@ @@@@@@-:.@@@@@@@.:

:. .:::: .::::::::. .:. .:

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

$ sudo picocom -b 2000000 /dev/ttyUSB0

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::.. ..---.: . :-:: :: :--: :::::. .:::::::

::=%@@@@%%%@@@@:@@@@@@%#@@@+ @@@@%%@@@@@ ::::. .@@= :::::::

::. @* %# @% @@* .@@% +@@ :::: -@@@@ ::::::

::: @+ @- @@ @@# @@= :::: =@ :::. @@ %@+ :::::

::: @@@@@@- :.: @@ .-@@@: .@@ ::: :. +: #@= .::::

::: @* :@- ::: @@#@@%- :@@ :::=@@@@@*. -@@@%@@@@- ::::

::: @# : .::: @@ .::. @@% .:: +@@ .=@:.: @@@ .::

:. @* .:::: @% .::::: -@@ @@@ @# :@= .:

:.@@@@@@@@.::::@@@@@@@@.:::::: -@@@@@@ :@ @@@@@@-:.@@@@@@@.:

:. .:::: .::::::::. .:. .:

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

  • Processing > Read Data from In-System Memory

In-System Memory Content Editor читает и изменяет содержимое М9К блоков непосредственно во время работы схемы через порт B

38 of 51

Quartus: Tools > In-System Memory Content Editor

$ sudo picocom -b 2000000 /dev/ttyUSB0

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::.. ..---.: . :-:: :: :--: :::::. .:::::::

::=%@@@@%%%@@@@:@@@@@@%#@@@+ @@@@%%@@@@@ ::::. .@@= :::::::

::. @* %# @% @@* .@@% +@@ :::: -@@@@ ::::::

::: @+ @- @@ @@# @@= :::: =@ :::. @@ %@+ :::::

::: @@@@@@- :.: @@ .-@@@: .@@ ::: :. +: #@= .::::

33333333333333333333333333333333333333333333333333333333333333

::: @# : .::: @@ .::. @@% .:: +@@ .=@:.: @@@ .::

:. @* .:::: @% .::::: -@@ @@@ @# :@= .:

:.@@@@@@@@.::::@@@@@@@@.:::::: -@@@@@@ :@ @@@@@@-:.@@@@@@@.:

:. .:::: .::::::::. .:. .:

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

  • Processing > Write Data to In-System Memory

In-System Memory Content Editor читает и изменяет содержимое М9К блоков непосредственно во время работы схемы через порт B

39 of 51

Quartus: Tools > Signal Tap Logic Analyzer

SignalTap Logic Analyzer записывает и отображает выбранные сигналы во время работы схемы

  • Позволяет выбрать любой сигнал в схеме для отслеживания и события срабатывания триггера
  • Синтезируется и размещается вместе с отлаживаемой схемой
  • Использует блоки M9K SRAM в качестве буфера
  • Передает собранные данные на ПК через JTAG

40 of 51

Однотактная микроархитектура

41 of 51

Однотактная микроархитектура: IMEM

42 of 51

Однотактная микроархитектура: IMEM

43 of 51

Однотактная микроархитектура: IMEM

44 of 51

Однотактная микроархитектура: LSU

45 of 51

Многотактная микроархитектура: LSU

46 of 51

Многотактная микроархитектура

47 of 51

Многотактная микроархитектура: симуляция

LOAD

LOAD

LOAD

Инструкции

48 of 51

Reports

+-------------------------------------------------------------------------------------+

; Flow Summary ;

+------------------------------------+------------------------------------------------+

; Quartus Prime Version ; 23.1std.1 Build 993 05/14/2024 SC Lite Edition ;

; Top-level Entity Name ; fpga_top ;

; Family ; Cyclone IV E ;

; Device ; EP4CE15F23C8 ;

; Timing Models ; Final ;

; Total logic elements ; 2,835 / 15,408 ( 18 % ) ;

; Total combinational functions ; 2,638 / 15,408 ( 17 % ) ;

; Dedicated logic registers ; 1,115 / 15,408 ( 7 % ) ;

; Total registers ; 1115 ;

; Total pins ; 6 / 344 ( 2 % ) ;

; Total virtual pins ; 0 ;

; Total memory bits ; 16,384 / 516,096 ( 3 % ) ;

; Embedded Multiplier 9-bit elements ; 0 / 112 ( 0 % ) ;

; Total PLLs ; 0 / 4 ( 0 % ) ;

+------------------------------------+------------------------------------------------+

+-------------------------------------------------+

; Slow 1200mV 0C Model Fmax Summary ;

+-----------+-----------------+------------+------+

; Fmax ; Restricted Fmax ; Clock Name ; Note ;

+-----------+-----------------+------------+------+

; 47.17 MHz ; 47.17 MHz ; CLK ; ;

+-----------+-----------------+------------+------+

49 of 51

Chip Planner

50 of 51

Задание

  • Реализация многотактного (LOAD – 2 такта, остальные – 1 такт) RISC-V CPU с поддержкой всех инструкций RV32I (кроме служебных) с M9K блоками в качестве памяти команд и памяти данных и возможностью вывода на 7-сегментный дисплей через MMIO

51 of 51

Литература

  • N. Weste and D. Harris, “CMOS VLSI Design: A Circuits and Systems Perspective,” 4th edition
  • Altera Cyclone IV Device Handbook