|
Память внутри Cyclone III, Не понятно сообщение от Flow Summary |
|
|
|
Jan 10 2011, 06:33
|
Знающий
   
Группа: Свой
Сообщений: 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, что памяти нет. Какие могут быть соображения?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Jan 11 2011, 10:41
|
Знающий
   
Группа: Свой
Сообщений: 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. Ситуация такая, что ставит под угрозу весь проект. Надо, видимо, этот сигнал управления мультиплексорами как-то разгрузить. Как в таких случаях поступают, когда у сигнала большой коэффициент разветвления?
|
|
|
|
|
Jan 11 2011, 11:43
|

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

|
Цитата До этого я считал показания RTL Viewer истинными не, ему верить нельзя. смотрите Technology Map Viewer`ом Цитата нагрузочных входов у этого сигнала будет более 200. для этого есть глобальные сигналы. поищите в Assignment Editore глобальную опцию что-то-там "high fan-out signals". ну и отчет компиляции бы поглядеть не мешало
|
|
|
|
|
Jan 11 2011, 12:10
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Количество потребителей не может влиять на создание памяти, мысли про глюки в quartus не допускаем. Чтобы память попала в проект, её содержимое должно меняться и использоваться. Достаточно, чтобы сигнал write enable был всегда неактивным и память уже не нужна. Покажите исходники, если есть возможность. Если цель проекта не в нагреве микросхемы, то моделирование до и после place&route должны показать правильное функционирование, которому эта память необходима. QUOTE (Serhiy_UA @ Jan 11 2011, 16:41)  Как в таких случаях поступают, когда у сигнала большой коэффициент разветвления? - используют специальные выделенные ресурсы разводки (глобальные сети), если есть - если есть возможность определить значение сигнала на один или более тактов раньше, перед потребителями добавляется последовательно один или более регистров, что позволит P&R наделать дублей и построить дерево - осмысливается схема, ищутся новые варианты реализации
|
|
|
|
|
Jan 11 2011, 15:49
|
Знающий
   
Группа: Свой
Сообщений: 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));
|
|
|
|
|
Jan 12 2011, 08:04
|

Знающий
   
Группа: Свой
Сообщений: 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-ом я их не нашёл...
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Jan 12 2011, 11:18
|
Знающий
   
Группа: Свой
Сообщений: 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. Вот так... Все перепроверил на подключение по несколько раз...
|
|
|
|
|
Jan 12 2011, 12:08
|
Гуру
     
Группа: Свой
Сообщений: 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 это выкинул
|
|
|
|
|
Jan 13 2011, 03:33
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(XVR @ Jan 12 2011, 19:08)  Ой! Регистр addr_reg не используется, выход q вообще не подключен. Не удивительно, что Q это выкинул  На самом деле модуль 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, извините за такую неточность... Что-то много ошибок стал допускать...
|
|
|
|
|
Jan 13 2011, 04:59
|
Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|