реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Память внутри Cyclone III, Не понятно сообщение от Flow Summary
Serhiy_UA
сообщение Jan 10 2011, 06:33
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



После успешной компиляции в QII, появляется окно Compilation Report – Flow Summary, которое сообщает о том, что память внутри Cyclone III не используется: Total memory bits = 0%.
Хотя эта память описана в корневом модуле. В частности, после компиляции, эту память можно просмотреть через RTL Viewer, где она и отображается как блок памяти (синий прямоугольник).
Почему так может происходить, когда в одном месте сообщается, что памяти нет, а в другом она видна?

Пробовал для QII 7.2 и QII 9.1 – результат одинаков. Использоват память из шаблона Single port RAM with single read/write address.
Когда же создал короткий тест, то видел блок памяти и в RTL Viewer, и сообщение в Compilation Report – Flow Summary, т.е. память задействована. А для большого проекта – разночтение, с сообщением в Flow Summary, что памяти нет.
Какие могут быть соображения?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 10 2011, 06:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



посмотрите отчет компиляции, какие ресурсы этим модулем используется. м.б. синтезатор решил ее на регистрах сделать (небольшой размер), либо вообще выкинул - если ничего от нее не зависит. слева, где дерево проекта, можно посмотреть статистику модулей по занимаемым ресурсам.
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jan 11 2011, 10:41
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



vadimuzzz, спасибо за советы.

В проекте память на 8192 адреса (М9К) в двух модулях RAM с шириной слова по 32 бита. Один модуль не хотел создаваться, хотя модули полностью идентичные. Почему-то RTL Viewer показывал оба модуля, а в отчете и дереве проекта (окошко Project Navigator) один из модулей не создавался, ни на регистрах, не в М9К. До этого я считал показания RTL Viewer истинными, теперь буду сомневаться, не пойму только почему это так в QII, вроде, должны показываться одно и то же. Вопрос остается….

В конце концов, опять же не без помощи дерева проекта, оба модуля созданы. Однако в проекте много 32-разрядныз мультиплексоров 2 в 1, управляемых одним сигналом, похоже, что нагрузочных входов у этого сигнала будет более 200. Манипуляции с эти сигналом почему-то влияют на создание одного из этих модулей RAM. Ситуация такая, что ставит под угрозу весь проект. Надо, видимо, этот сигнал управления мультиплексорами как-то разгрузить. Как в таких случаях поступают, когда у сигнала большой коэффициент разветвления?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 11 2011, 11:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата
До этого я считал показания RTL Viewer истинными

не, ему верить нельзя. смотрите Technology Map Viewer`ом
Цитата
нагрузочных входов у этого сигнала будет более 200.

для этого есть глобальные сигналы. поищите в Assignment Editore глобальную опцию что-то-там "high fan-out signals". ну и отчет компиляции бы поглядеть не мешало
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Jan 11 2011, 12:10
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Количество потребителей не может влиять на создание памяти, мысли про глюки в quartus не допускаем.
Чтобы память попала в проект, её содержимое должно меняться и использоваться.
Достаточно, чтобы сигнал write enable был всегда неактивным и память уже не нужна.

Покажите исходники, если есть возможность.

Если цель проекта не в нагреве микросхемы, то моделирование до и после place&route должны показать правильное функционирование, которому эта память необходима.

QUOTE (Serhiy_UA @ Jan 11 2011, 16:41) *
Как в таких случаях поступают, когда у сигнала большой коэффициент разветвления?

- используют специальные выделенные ресурсы разводки (глобальные сети), если есть
- если есть возможность определить значение сигнала на один или более тактов раньше, перед потребителями добавляется последовательно один или более регистров, что позволит P&R наделать дублей и построить дерево
- осмысливается схема, ищутся новые варианты реализации
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jan 11 2011, 15:49
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Shtirlits и vadimuzzz, спасибо за советы.

Буду разбираться. QII пока под презумпцией невиновности... А вот его оптимизатор, возможно, умничает...
Схема разветвления через регистры кажется проще, я сигнал разгружу пока этим способом...
Проект громоздкий, моделировать его сложно, только что отдельными модулям. Показывать тексты пока смысла нет...
Ниже модуль памяти, хотя мега-функции RAM вели себя подобно, т.е. на них как бы тоже влиял перегруженный сигнал:

module single_port_ram
(input [31:0] data, input [12:0] addr, input we, clk, output [31:0] q);
reg [31:0] ram[8191:0];
reg [12:0] addr_reg;
always @ (posedge clk)
begin if (we) ram[addr] = data; addr_reg <= addr; end
endmodule

и вызов модуля:

single_port_ram DD(.data(DDi), .addr(AD), .we(WE), .clk(CLK), .q(DDo));
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Jan 12 2011, 08:04
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Цитата(Serhiy_UA @ Jan 10 2011, 12:33) *
Пробовал для QII 7.2...

Попробуйте в 7-ой квартусе задать опции:
главное меню Assignments > пункт Settings > категория Analysis & Syntethesys settings > кнопка More settings > опции (Auto RAM replacement = ON, Auto RAM to logic cell conversion = OFF)
---
В 9-ом я их не нашёл...


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jan 12 2011, 11:18
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(Евгений Николаев @ Jan 12 2011, 15:04) *
Попробуйте в 7-ой квартусе задать опции..:
Спасибо, Евгений. Эти опции в QII7.2 были изначально заданы таковыми же. Однако это не помогает..

Разгрузил перегруженный сигнал через регистры, тоже не помогло...

Проект мой создан на основе уже существующего, с заменой ПЛИС, а также переносом RAM с внешних чипов во внутреннею память. Файлы перетягивались из старого в новый. Анализируя Warning-и, обнаружил, что эти файлы надо бы специфицировать, т.е. включать через Prpoject -> Add/Remove Files in Project. Сделал и это, но пока результат тот же. Один из модулей RAM может не создаваться, что видно по дереву проекта.

Очередной объект текущих исследований, это оператор casex, в который в итоге принимаются, а затем записываются в промежуточный регистр, коды с выходов этих обоих RAM... Перестановка местами выходов RAM в соседних операторах присваивания casex, и приводит к запрету/открытию одной из RAM. Вот так... Все перепроверил на подключение по несколько раз...
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 12 2011, 12:08
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Serhiy_UA @ Jan 11 2011, 21:49) *
Ниже модуль памяти, хотя мега-функции RAM вели себя подобно, т.е. на них как бы тоже влиял перегруженный сигнал:

module single_port_ram
(input [31:0] data, input [12:0] addr, input we, clk, output [31:0] q);
reg [31:0] ram[8191:0];
reg [12:0] addr_reg;
always @ (posedge clk)
begin if (we) ram[addr] = data; addr_reg <= addr; end
endmodule
Ой! Регистр addr_reg не используется, выход q вообще не подключен. Не удивительно, что Q это выкинул rolleyes.gif

Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jan 13 2011, 03:33
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(XVR @ Jan 12 2011, 19:08) *
Ой! Регистр addr_reg не используется, выход q вообще не подключен. Не удивительно, что Q это выкинул rolleyes.gif
На самом деле модуль RAM у меня такой:
module single_port_ram
(input [31:0] data, input [12:0] addr, input we, clk, output [31:0] q);
reg [31:0] ram[8191:0];
reg [12:0] addr_reg;
always @ (posedge clk)
begin if (we) ram[addr] = data; addr_reg <= addr; end
assign q = ram[addr_reg];
endmodule

То есть, в предыдущих постах я был невнимателен и упустил вписать назначение: assign q = ram[addr_reg]; , хотя оно реально в проекте присутствует...

XVR, извините за такую неточность... Что-то много ошибок стал допускать...
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 13 2011, 04:11
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата
На самом деле модуль RAM у меня такой:
Я не в курсе, как устроен RAM на Cyclone, но на Xilinx это в блочную память не ляжет - у нее синхронное чтение.
Проверьте по DS от Cyclone на синхронность чтения.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Jan 13 2011, 04:28
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



В cyclone есть асинхронный выход чтения, тут не подкопаешься.

PS: Есть один моментик, для точной модели нужно регистр адреса и на запись использовать, но писать не по фронту, а по уровню - сделать латч. А поскольку латчи лучше избегать при прочих равных, то должно синтезироваться без проблем.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 13 2011, 04:55
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



2 Serhiy_UA вы можете выложить 2 отчета компилятора - когда модуль есть и когда нет? желательно с примерными пояснениями, что изменяете в проекте
Go to the top of the page
 
+Quote Post
Leka
сообщение Jan 13 2011, 04:59
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(XVR @ Jan 13 2011, 11:11) *
... это в блочную память не ляжет - у нее синхронное чтение

Описанное чтение - синхронное:
always @ (posedge clk) addr_reg <= addr;
assign q = ram[addr_reg];

Сообщение отредактировал Leka - Jan 13 2011, 05:00
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 13 2011, 05:50
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Leka @ Jan 13 2011, 10:59) *
Описанное чтение - синхронное:
always @ (posedge clk) addr_reg <= addr;
assign q = ram[addr_reg];
Это синхронное защелкивание адреса, а само чтение асинхронное. При синхронном чтении любые изменения содержимого ram не попадут на выход q до ближайшего клока (clk), у вас же они проявляются немедленно.

PS. Но это не важно, т.к. (по информации от Shtirlits) асинхронное чтение RAM в Cyclone есть
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 11:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01511 секунд с 7
ELECTRONIX ©2004-2016