DocsTech
/
Проекты ПЛИС на VERILOG
/

~ cd память ram verilog плис

Сводка

Память RAM (Random Access Memory) — это важный компонент в современных электронных устройствах, таких как компьютеры, мобильные устройства, микроконтроллеры, ПЛИС и другие. Она используется для временного хранения данных, которые обрабатываются или передаются в устройстве. Для разработки памяти RAM на уровне аппаратных средств, таких как программируемые логические интегральные схемы (ПЛИС), часто применяется Verilog.

Выделяют следующие классификации памяти RAM:

Описание памяти RAM в языке Verilog позволяет инженерам разрабатывать эффективные и оптимизированные битовые структуры для хранения данных. Это особенно важно при работе с ограниченными ресурсами на ПЛИС, где каждый бит и каждый тактовый цикл имеют значение. Verilog позволяет создавать модули памяти RAM различных типов, включая двухпортовую память, что обеспечивает быстрый доступ к данным и их одновременную запись и чтение.

Примеры

Пример однопортовой двухтактовой памяти RAM на языке Verilog

Рассмотрим пример создания однопортовой двухтактовой памяти RAM на языке Verilog для ПЛИС Altera Cyclone IV E. В качестве простого примера создадим модуль памяти RAM с двумя портами для чтения и записи.
...
Копировать
module true_dual_port_ram_dual_clock
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=6)
(
	input [(DATA_WIDTH-1):0] data_a, data_b,
	input [(ADDR_WIDTH-1):0] addr_a, addr_b,
	input we_a, we_b, clk_a, clk_b,
	output reg [(DATA_WIDTH-1):0] q_a, q_b
);

	// объявление памяти
	reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];

	always @ (posedge clk_a)
	begin
		// Порт A 
		if (we_a) 
		begin
			ram[addr_a] <= data_a;
			q_a <= data_a;
		end
		else 
		begin
			q_a <= ram[addr_a];
		end 
	end

	always @ (posedge clk_b)
	begin
		// Порт B 
		if (we_b) 
		begin
			ram[addr_b] <= data_b;
			q_b <= data_b;
		end
		else 
		begin
			q_b <= ram[addr_b];
		end 
	end

endmodule

Этот пример демонстрирует создание модуля двухпортовой памяти RAM на языке Verilog для ПЛИС. Модуль имеет два порта для чтения и записи(адрес чтения/записи, данные для записи, сигнал записи), а также тактовые сигналы. Для оптимальной работы с памятью RAM в Verilog важно правильно организовывать доступ к памяти, учитывать синхронизацию с тактовым сигналом и правильно управлять записью и чтением данных.

Пример однопортовой однотактовой памяти RAM на языке Verilog

Однопортовая и однотактовая память отличается тем, что чтение и запись происходит по одно фронту тактового сигнала. В семействе ПЛИС Cyclone с чтением и записью одного регистра в режиме «new value» имеется проблема, которая выдает 3-е состояние. Пример написан языке Verilog с режимом «old value». Нужно поменять знак назначения в операции чтения с неблокирующее назначения «<=» на блокирующее «=», чтоб сменить режим на «new value».
...
Копировать
module simple_dual_port_ram_single_clock
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=6)
(
	input [(DATA_WIDTH-1):0] data,
	input [(ADDR_WIDTH-1):0] read_addr, write_addr,
	input we, clk,
	output reg [(DATA_WIDTH-1):0] q
);

	// Объявление памяти
	reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];

	always @ (posedge clk)
	begin
		// запись
		if (we)
			ram[write_addr] <= data;

		// чтение
		q <= ram[read_addr];
	end

endmodule

Заключение

В заключение, разработка памяти RAM на языке Verilog для ПЛИС требует понимания основных принципов работы с аппаратурой и оптимизации ресурсов. Создание эффективных и оптимизированных модулей памяти RAM на Verilog позволяет улучшить производительность и эффективность электронных устройств, использующих ПЛИС.

Главная
Курсы
Вебинары
Квадратный корень методом CORDIC на FPGA
Алгоритмы квадратного корня на FPGA
Делители частоты на Verilog: дробные и целые коэффициенты деления
Расчет фильтра Баттерворта MATLAB и Verilog
Интегратор: цифровой и аналоговый элемент схемы
Примеры Сдвиговых регистров в Verilog
5 Уникальных Примера Testbench на Verilog
Сдвиги в Verilog: логический, арифметический и циклический
Память RAM Verilog ПЛИС
Триггеры в Verilog: JK, RS, D и T
10 Лучших примеров кода Verilog
Закрыть