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

Обновление содержимого BRAM без перекомпиляции проекта

Народ, подскажите, пожалуйста, как обновлять содержимое BRAM (ROM) без перекомпиляции проекта в Vivado.

В ISE я это делал через BMM и TCL скрипт, а как это делать в Vivado?

Особенно если память синтезируется из Verilog, а не через IP core.

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


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

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


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

Я правильно понял, что данный вариант работает только с microblaze и его нельзя применить для обычной памяти?

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


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

1 hour ago, blackfin said:

MicroZed Chronicles: Updating Block RAM

С TCL скриптом понятно.

Я не понимаю, откуда брать *.mmi файл.

В скомпилированном проекте его нет.

Память я задаю через Verilog, а не через IP.


`timescale 1 ns / 1 ps

module avr_cpu_prog_ram
#(
	parameter DATA_SIZE  = 4096,
	parameter DATA_WIDTH =   16,
	parameter INIT_FILE  = "",
	parameter SIM_INIT   = "FALSE"
)
(
	input clock_a,
	input clock_b,
	input addressstall_a,
	input addressstall_b,
	input [$clog2(DATA_SIZE)-1:0] address_a,
	input [$clog2(DATA_SIZE)-1:0] address_b,
	input [DATA_WIDTH-1:0] data_a,
	input [DATA_WIDTH-1:0] data_b,
	input wren_a,
	input wren_b,
	input enable_out_a,
	input enable_out_b,
	input aclr_out_a,
	input aclr_out_b,
	output reg [DATA_WIDTH-1:0] q_a,
	output reg [DATA_WIDTH-1:0] q_b
) ;

reg [$clog2(DATA_SIZE)-1:0] address_reg_a ;
wire [$clog2(DATA_SIZE)-1:0] address_mux_a ;
reg [$clog2(DATA_SIZE)-1:0] address_reg_b ;
wire [$clog2(DATA_SIZE)-1:0] address_mux_b ;
reg [DATA_WIDTH-1:0] mem [DATA_SIZE-1:0] /* synthesis syn_ramstyle = "no_rw_check" */ ;


initial begin
	#0.01 ;
	
	if (INIT_FILE != "") begin
		$readmemh (INIT_FILE, mem) ;
	end
	
	if (SIM_INIT == "TRUE") begin
		address_reg_a <= 0 ;
		address_reg_b <= 0 ;
		q_a <= 0 ;
		q_b <= 0 ;
	end
end


assign address_mux_a = (addressstall_a)? address_reg_a : address_a ;

always @(posedge clock_a) begin
	address_reg_a <= address_mux_a ;
	
	if (wren_a) 
		mem[address_mux_a] <= data_a ;
end

always @(posedge clock_a or posedge aclr_out_a) begin
	if (aclr_out_a) 
		q_a <= 0 ;
	else if (enable_out_a) 
		q_a <= mem[address_reg_a] ;
end


assign address_mux_b = (addressstall_b)? address_reg_b : address_b ;

always @(posedge clock_b) begin
	address_reg_b <= address_mux_b ;
	
	if (wren_b) 
		mem[address_mux_b] <= data_b ;
end

always @(posedge clock_b or posedge aclr_out_b) begin
	if (aclr_out_b) 
		q_b <= 0 ;
	else if (enable_out_b) 
		q_b <= mem[address_reg_b] ;
end


endmodule

 

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


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

Сделал память через макрос, теперь *.mmi файл создается на этапе имплементации. Но возникла вторая проблема. После выполнения updatemem я получаю некорректные данные в случае если память задаваемая через макрос занимает более чем один BRAM (32768 бит). Причем применить updatemem к памяти размером более 32768 мне удалось только в 2019.2. В 2018.3 выдавалась ошибка о превышении размера 32768 бит. Если память задаваемая через макрос меньше одного BRAM, то обновление происходит корректно.

Может быть можно как-то сконвертировать *.mmi в *.bmm и воспользоваться data2mem?

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


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

Откуда берется ошибка разобрался.

UG898

Although bit-lane parity is defined in the MMI file, it is not supported by UpdateMEM.

Теперь вопрос как заставить vivado не использовать parity при синтезе BRAM.

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


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

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

 

http://fpga-systems.ru/publ/xilinx/xilinx_vivado/eco_flow_v_vivado_ili_rabota_v_rezhime_redaktirovanija_netlista/8-1-0-86

 

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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