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

Actel pеализация встроенной ROM-памяти

Здравствуйте.
С недавнего времени осваиваю разработку проектов под ПЛИС для семейства ProASIC3E (ранее имел дело только с Altera и Xilinx) и столкнулся с проблемой нехватки информации и технической поддержке. В моем проекте имеется два процессорных ядра каждое из которых имеет память ROM 4096x32 инструкций. В результате разводки выдается ошибка:
 
Error: [fail_to_route]:
    Router fails. Shorts = 6407. Open nets = 0.

 
Я подозреваю, что не хватает каких то ресурсов. Где посмотреть что это значит? Синтез проекта проходит нормально:

Core Cells         : 46826 of 75264 (62%)
IO Cells           : 46
  RAM/ROM Usage Summary
Block Rams : 79 of 112 (70%)
 
Скажите пожалуйста можно ли в семействе ProASIC3E реализовать память типа ROM на встроенный блоках памяти (RAM) по аналогии как в ПЛИС Altera?
 
Директива синтезатора Synplify Pro: synthesis syn_romstyle = "lsram"  — не дает результата (память реализуется на логический элементах). Пример:
 
module rom1(clk, addr, q)/* synthesis syn_romstyle = "lsram" */;
input    clk;
input    [11:0] addr;
output [31:0] q;
reg [31:0] m;
reg [31:0] q;
always @(posedge clk)
begin
 q[31:0] <= m[31:0];
end
always @(*)
begin
 case (addr[11:0])
  12'h000 : m[31:0] = 32'hA0FC0000;
  12'h001 : m[31:0] = 32'hA0FE0000;
  12'h002 : m[31:0] = 32'hA0FD0000;
  12'h003 : m[31:0] = 32'h04FF0000;
  12'h004 : m[31:0] = 32'h00000100;
  12'h005 : m[31:0] = 32'h6BFCFCFC;
...
 
Синтезатор понимает, что это ROM:

@N: MO106 :"f:\project\microsemi\core\hdl\rom1.v":19:1:19:4|Found ROM .delname. (in view: work.rom1(verilog)) with 4096 words by 32 bits.

 
Заранее благодарен за любую оказанную помощь в моей проблеме.

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


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

17 minutes ago, andrei-sedov said:

always @(posedge clk)
begin
 q[31:0] <= m[31:0];
end

Уверены, что это физически можно реализовать с той встроенной памятью, которая есть в этих чипах?  - т.е. что при подаче адреса за один  такт получится прочитать содержимое данной ячейки памяти.

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


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

3 минуты назад, Yuri124 сказал:

Уверены, что это физически можно реализовать с той встроенной памятью, которая есть в этих чипах?  - т.е. что при подаче адреса за один  такт получится прочитать содержимое данной ячейки памяти.

Не уверен, но это стандартное описание ROM-памяти, можно сделать регистровый выход или выход. Вопрос в том можно ли вообще реализовать память типа ROM на встроенных блоках памяти?

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


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

15 minutes ago, andrei-sedov said:

можно ли вообще реализовать память типа ROM на встроенных блоках памяти?

Это не поможет ответить на Ваш вопрос?

 

В том документе есть такая фраза:

Quote

 If  the users main design  only has access to the read  ports of  the RAM block (RADDR, RD, RCLK, and  REN)

и я предполагаю, что попытка чтения их этой памяти через такой простой блок, как 

Quote

always @(posedge clk)
begin
 q[31:0] <= m[31:0];
end

не прокатит.

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


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

Цитата

Скажите пожалуйста можно ли в семействе ProASIC3E реализовать память типа ROM на встроенный блоках памяти (RAM) по аналогии как в ПЛИС Altera?

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

Цитата

Error: [fail_to_route]:
    Router fails. Shorts = 6407. Open nets = 0.
 
Я подозреваю, что не хватает каких то ресурсов. Где посмотреть что это значит? Синтез проекта проходит нормально:

Я думаю дизайнер пытается вытянуть временные ограничения и размещает все это так, что потом не может развести.

Я бы попробовал разбить ваши таблицы на 4 или 8 поменьше размером, с защелками на выходах, с последующим объединением.

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


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

3 часа назад, Shamil сказал:

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

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

Хотелось бы знать имеется ли подобная технология в ПЛИС семействе ProASIC3E?

P.S. Как я уже писал, в синтезаторе Synplify Pro имеется директива определяющая тип построения памяти: syn_romstyle = "URAM|lsram|..." 

 

Неужели никто не работал с массивами констант, перекодирующими таблицами и т.д.?

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


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

9 часов назад, andrei-sedov сказал:

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

Хотелось бы знать имеется ли подобная технология в ПЛИС семействе ProASIC3E?

Нет у Actel такого!
Вам придется самостоятельно заполнять блоки RAM содержимым таблиц при каждом включении питания.

9 часов назад, andrei-sedov сказал:

Неужели никто не работал с массивами констант, перекодирующими таблицами и т.д.?

Да работаем постоянно. С такой проблемой как у Вас не сталкивались, правда и таблиц настолько больших не было.

Самая большая табличка которая была:

	localparam COEF_WIDTH = 12;							// Разрядность коэфициентов фильтра (включая знаковый разряд)
	localparam COEF_QN = 960;							// Кол-во коэфициентов фильтра
	localparam COEF_TABLE_SIZE = COEF_QN / 2 + 1;					// Размер таблицы коэфициентов фильтра

	localparam ACC_WIDTH = 20;							// Разрядность аккумлятора фильтра

	wire [COEF_WIDTH-1:0]CoefTableTx[COEF_TABLE_SIZE-1:0];

	assign CoefTableTx[  0] = 12'h001;
	assign CoefTableTx[  1] = 12'h001;
	assign CoefTableTx[  2] = 12'h002;
	assign CoefTableTx[  3] = 12'h002;
	assign CoefTableTx[  4] = 12'h002;
	assign CoefTableTx[  5] = 12'h002;
	assign CoefTableTx[  6] = 12'h003;
	assign CoefTableTx[  7] = 12'h003;
	assign CoefTableTx[  8] = 12'h003;
	assign CoefTableTx[  9] = 12'h003;
//	.............
	assign CoefTableTx[474] = 12'h7AF;
	assign CoefTableTx[475] = 12'h7B1;
	assign CoefTableTx[476] = 12'h7B3;
	assign CoefTableTx[477] = 12'h7B5;
	assign CoefTableTx[478] = 12'h7B6;
	assign CoefTableTx[479] = 12'h7B6;
	assign CoefTableTx[480] = 12'h000;

 

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


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

1. А что - такой прием, как инициализация массива, здесь не работает?

2. В качестве синтезатора используется Synplify Pro? Так у него-то с документацией все должно быть в порядке - можно узнать обо всех вариантах работы с ROM и RAM (их там далеко не один только /* synthesis syn_romstyle = "lsram" */).

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


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

@andrei-sedov

Память ROM на встроенных блоках есть, но объемом только 1 кбит. Cодержимое "прошивается" (перепрошивается) только при помощи программатора. Если актуально, позже напишу как пользоваться

 

FlashROM.png

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


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

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

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

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

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

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

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

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

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

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