andrei-sedov 0 9 августа, 2021 Опубликовано 9 августа, 2021 · Жалоба Здравствуйте. С недавнего времени осваиваю разработку проектов под ПЛИС для семейства 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. Заранее благодарен за любую оказанную помощь в моей проблеме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 2 9 августа, 2021 Опубликовано 9 августа, 2021 · Жалоба 17 minutes ago, andrei-sedov said: always @(posedge clk) begin q[31:0] <= m[31:0]; end Уверены, что это физически можно реализовать с той встроенной памятью, которая есть в этих чипах? - т.е. что при подаче адреса за один такт получится прочитать содержимое данной ячейки памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrei-sedov 0 9 августа, 2021 Опубликовано 9 августа, 2021 · Жалоба 3 минуты назад, Yuri124 сказал: Уверены, что это физически можно реализовать с той встроенной памятью, которая есть в этих чипах? - т.е. что при подаче адреса за один такт получится прочитать содержимое данной ячейки памяти. Не уверен, но это стандартное описание ROM-памяти, можно сделать регистровый выход или выход. Вопрос в том можно ли вообще реализовать память типа ROM на встроенных блоках памяти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 2 9 августа, 2021 Опубликовано 9 августа, 2021 · Жалоба 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 не прокатит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shamil 2 9 августа, 2021 Опубликовано 9 августа, 2021 · Жалоба Цитата Скажите пожалуйста можно ли в семействе ProASIC3E реализовать память типа ROM на встроенный блоках памяти (RAM) по аналогии как в ПЛИС Altera? Память у Actel не сохраняет свое содержимое после выключения питания. Поэтому кто то ее все равно должен будет проинициализировать. Все равно придется табличку держать либо в ПЛИС, реализованную на логике, либо снаружи в чем то. Цитата Error: [fail_to_route]: Router fails. Shorts = 6407. Open nets = 0. Я подозреваю, что не хватает каких то ресурсов. Где посмотреть что это значит? Синтез проекта проходит нормально: Я думаю дизайнер пытается вытянуть временные ограничения и размещает все это так, что потом не может развести. Я бы попробовал разбить ваши таблицы на 4 или 8 поменьше размером, с защелками на выходах, с последующим объединением. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrei-sedov 0 9 августа, 2021 Опубликовано 9 августа, 2021 · Жалоба 3 часа назад, Shamil сказал: Память у Actel не сохраняет свое содержимое после выключения питания. Поэтому кто то ее все равно должен будет проинициализировать. Все равно придется табличку держать либо в ПЛИС, реализованную на логике, либо снаружи в чем то. Это понятно, что ОЗУ теряет свое содержимое после выключения питания, но например ПЛИС Altera позволяет строить из своих блоков RAM память типа ROM. В этом случае блоки RAM инициализируются на этапе конфигурации ПЛИС и в дальнейшем данные неизменно хранятся и доступны для чтения. Синтезатор распознает приведенное выше описание модуля констант как память типа ROM и размещает данные в блоках RAM. Хотелось бы знать имеется ли подобная технология в ПЛИС семействе ProASIC3E? P.S. Как я уже писал, в синтезаторе Synplify Pro имеется директива определяющая тип построения памяти: syn_romstyle = "URAM|lsram|..." Неужели никто не работал с массивами констант, перекодирующими таблицами и т.д.? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shamil 2 10 августа, 2021 Опубликовано 10 августа, 2021 · Жалоба 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 10 августа, 2021 Опубликовано 10 августа, 2021 · Жалоба 1. А что - такой прием, как инициализация массива, здесь не работает? 2. В качестве синтезатора используется Synplify Pro? Так у него-то с документацией все должно быть в порядке - можно узнать обо всех вариантах работы с ROM и RAM (их там далеко не один только /* synthesis syn_romstyle = "lsram" */). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 3 10 августа, 2021 Опубликовано 10 августа, 2021 · Жалоба @andrei-sedov Память ROM на встроенных блоках есть, но объемом только 1 кбит. Cодержимое "прошивается" (перепрошивается) только при помощи программатора. Если актуально, позже напишу как пользоваться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться