|
использование встроенной памяти ПЛИС |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 37)
|
Nov 5 2009, 07:13
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
Цитата(DmitryR @ Nov 5 2009, 10:01)  Надо почитать документацию на то программное обеспечение, которым вы пользуетесь. Там в примерах расписано, как надо кодить распространенные конструкции, чтобы они синтезились предсказуемо. тоесть насколько я понял из вашего ответа, что в Vhdl нету такой синтаксической конструкции для работы с памятью?
|
|
|
|
|
Nov 5 2009, 09:00
|
iBuilder©
   
Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322

|
Цитата(SM @ Nov 5 2009, 12:52)  Как раз с точностью до наоборот - мегавизардом, если платформонезависимый код НУЖЕН. Так как на любой платформе есть свой мемори компилер. Или конструкцией HDL, если четко привязываться к определенному синтезатору и рекомендациям по инферрингу от него. добавлю. Если компилится на разных платформах, выносим память в отдельный модуль, где по дефайну вставляется нужная версия для нужной платформы. Дефайн выводим на верхний уровень, для всего проекта.
|
|
|
|
|
Nov 5 2009, 09:03
|

Местный
  
Группа: Свой
Сообщений: 435
Регистрация: 8-03-06
Из: степей Украины
Пользователь №: 15 069

|
Цитата(dvladim @ Nov 5 2009, 10:44)  В ксайлинксах, наверное, тоже что-то подобное есть. В ксайлинксах это называется Core Generator. Еще в ISE есть волшебная кнопочка в виде лампочки и с названием Language Template. После нажатия на волшебную кнопочку можно заглянуть в раздел VHDL->Synthesis Construct->CodingExamples->RAM Еще есть и документация - но этим путем редко кто идет
|
|
|
|
|
Nov 5 2009, 13:21
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(penauch @ Nov 5 2009, 16:09)  меня интересует в vhdl, квартус, альтера циклон-2 Найдите в меню квартуса мегавизард, в нем сгенерируйте нужную память, он сгенерирует все что надо, и шаблон, как ее подключить в проект, и модуль самой памяти.
|
|
|
|
|
Nov 5 2009, 13:48
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
разобрался, спасибо. но он по прежнему не использует биты памяти!!! ниже лог компиляции - желаемое здействовать обведено красным
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 6 2009, 01:19
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
спасибо. проработал два варианта - через wizard и через edit. Через edit описание памяти вклинивается в исходный файл проекта, но по-прежнему память синтезируется из вентилей. если делать через wizard, то создаётся отдельный файл с описанием памяти где в generic указано "M4K" тоесть из ячеек памяти делать, так? но подключить файл не удалось - как это сделать? во вторых - как с этой памятью работать? память однопортовая с we и clk. и зачем мне clk? мне нужна асинхронная память - какую там не нашёл  мне же нужно работать с памятью как с массивом std_logic_vector - и не хотелось бы всякие стробы и клоки примешивать, тоесть нужно чтоб переменные синтезировались из памяти а не из вентилей. такое возможно? если нет, то как пользоваться вышеупомянутой однопортовой памятью?
|
|
|
|
|
Nov 6 2009, 08:31
|

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

|
1. Из меню Edit вставляете template "нужная Вам RAM" (берёте бубен, набедренную повязку и в ритме тумба-умба > п. 2)  2. Настраиваете: главное меню Assignments > пункт Settings > категория Analysis & Syntethesys settings > кнопка More settings > опции (Auto RAM replacement = ON, Auto RAM to logic cell conversion = OFF) P.S. Это в QII-7.2 так, в других версиях может последовательность и направление вложения опций отличаться, но сути дела не меняет.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Nov 6 2009, 08:56
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(penauch @ Nov 6 2009, 04:19)  но подключить файл не удалось - как это сделать? Файл просто добавить в проект, а в тот файл, где используется память. Описание компонента - генерируется визардом, его только включить не забыть. Ну и экземпляр - через memory_inst: memory_name PORT MAP ( .... ); Цитата(penauch @ Nov 6 2009, 04:19)  Через edit описание памяти вклинивается в исходный файл проекта, но по-прежнему память синтезируется из вентилей. И будет из вентилей, пока хотите асинхронную. Так как, как уже сказали, асинхронного режима у M4K нет. Цитата(des00 @ Nov 6 2009, 11:50)  о блочной памяти, а не о распределенной %) Так они распределенку сделали в виде блочной - один блок = 1 MLAB = 640 бит = 64x10 | 32x20
|
|
|
|
|
Nov 6 2009, 10:29
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(SM @ Nov 6 2009, 02:56)  Так они распределенку сделали в виде блочной - один блок = 1 MLAB = 640 бит = 64x10 | 32x20 я бы не стал так однозначно утверждать. Назвать можно все что угодно и как угодно, вот из даташита на стратикс 4 Цитата The LAB of Stratix IV has a new derivative called Memory LAB (MLAB), which adds look-up table (LUT)-based SRAM capability to the LAB as shown in Figure 2–2. .... You can use MLAB ALM as a regular LAB ALM or configure it as a dual-port SRAM, as shown будет тоже самое если назвать SLICEM у хилых каким нить RAMD и заявить что это блочная память с асинхронным чтением, только маленькая. Хотя на деле будут те же яйца вид сбоку %)
--------------------
|
|
|
|
|
Nov 8 2009, 12:45
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата А RMW цикл не получилось использовать ? асинхронное чтение тут как раз рулит это Xilinx рулит... Цитата А мне вот надо было довольно много памяти сделать с byte enable по 4 бита а какой глубины нужна память? может на рассыпухе проще будет?
Сообщение отредактировал o_khavin - Nov 8 2009, 12:48
|
|
|
|
|
Nov 9 2009, 02:20
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
c помощью визарда создал такой файл mem.vhd: Код LIBRARY ieee; USE ieee.std_logic_1164.all;
LIBRARY altera_mf; USE altera_mf.all;
ENTITY mem IS PORT ( clock : IN STD_LOGIC; data : IN STD_LOGIC_VECTOR (14 DOWNTO 0); rdaddress : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wraddress : IN STD_LOGIC_VECTOR (7 DOWNTO 0); wren : IN STD_LOGIC := '1'; q : OUT STD_LOGIC_VECTOR (14 DOWNTO 0) ); END mem;
ARCHITECTURE SYN OF mem IS
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (14 DOWNTO 0);
COMPONENT altsyncram GENERIC ( address_reg_b : STRING; clock_enable_input_a : STRING; clock_enable_input_b : STRING; clock_enable_output_a : STRING; clock_enable_output_b : STRING; intended_device_family : STRING; lpm_type : STRING; numwords_a : NATURAL; numwords_b : NATURAL; operation_mode : STRING; outdata_aclr_b : STRING; outdata_reg_b : STRING; power_up_uninitialized : STRING; ram_block_type : STRING; read_during_write_mode_mixed_ports : STRING; widthad_a : NATURAL; widthad_b : NATURAL; width_a : NATURAL; width_b : NATURAL; width_byteena_a : NATURAL ); PORT ( wren_a : IN STD_LOGIC; clock0 : IN STD_LOGIC; address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); address_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); q_b : OUT STD_LOGIC_VECTOR (14 DOWNTO 0); data_a : IN STD_LOGIC_VECTOR (14 DOWNTO 0) ); END COMPONENT;
BEGIN q <= sub_wire0(14 DOWNTO 0);
altsyncram_component : altsyncram GENERIC MAP ( address_reg_b => "CLOCK0", clock_enable_input_a => "BYPASS", clock_enable_input_b => "BYPASS", clock_enable_output_a => "BYPASS", clock_enable_output_b => "BYPASS", intended_device_family => "Cyclone II", lpm_type => "altsyncram", numwords_a => 256, numwords_b => 256, operation_mode => "DUAL_PORT", outdata_aclr_b => "NONE", outdata_reg_b => "CLOCK0", power_up_uninitialized => "FALSE", ram_block_type => "M4K", read_during_write_mode_mixed_ports => "DONT_CARE", widthad_a => 8, widthad_b => 8, width_a => 15, width_b => 15, width_byteena_a => 1 ) PORT MAP ( wren_a => wren, clock0 => clock, address_a => wraddress, address_b => rdaddress, data_a => data, q_b => sub_wire0 );
END SYN; и ещё mem_inst.vhd: Код mem_inst : mem PORT MAP ( clock => clock_sig, data => data_sig, rdaddress => rdaddress_sig, wraddress => wraddress_sig, wren => wren_sig, q => q_sig ); как теперь этим пользоваться? читать/записать... и как включить в проект?
|
|
|
|
|
Nov 9 2009, 04:49
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141

|
Цитата(penauch @ Nov 9 2009, 07:20)  как теперь этим пользоваться? читать/записать... и как включить в проект? Может я сейчас глупость скажу, но всегда ли оправдано использование VHDL? В графическом режиме таких вопросов не возникает.
|
|
|
|
|
Nov 9 2009, 14:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(penauch @ Nov 9 2009, 16:47)  я наконец-то хочу услышать ответ по этой памяти. Вы это, не школьный учитель, часом? Цитата(penauch @ Nov 9 2009, 16:47)  можно ли работу с ней сделать настолько же удобной как с массивами std_logic_vector ? Двадвцать раз уже кажется вам объяснили: нет, нет и нет. Никакое железо не поддерживает всех конструкций языков высокого уровня, и искусство программирования на HDL заключается именно в знании аппаратуры и умением написать на HDL конструкции, которые в кокретном железе могут быть реализованы.
|
|
|
|
|
Nov 9 2009, 18:08
|

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

|
penauch, Вы вероятно программист, в смысле - программируете для МК, PC и т.п... Вполне понятно, что хочется иметь аналогию того, как в программе для МК ведётся обращение к регистрам или ячейке памяти на низком уровне - примерно одинаково, или на высоком уровне - можно даже и не знать - что задействует для хранения переменной компилятор. Но упускается важный момент - в случае с МК вся архитектура и растактовка сделана до Вас и на ещё БОЛЕЕ НИЗКОМ уровне. А ПЛИС это и есть конструктор того самого низкого железного уровня. Так что, описание ведётся не столько алгоритма, сколько архитектуры, которая позволяет этот алгоритм реализовать. В этом плане HDL-описание итак довольно высоко поднимает разработчика относительно gate-уровня. Кроме того, организация сигнальных путей и законов управления. В случае с std_vector_logic на него выделяются отдельные физические пути и Вы всегда можете "обратиться" к нему. С памятью, всё-таки, дело обстоит посложнее именно физически (например: первым тактом ваша схема защёлкивает у себя адрес, вторым тактом этот адрес захватывается в ДША ОЗУ и выдаются данные, третьим тактом Вы эти данные захватываете в регистр своей схемы). А голом наборе вентилей никто за Вас времянки очерёдности и эти клоки формировать не будет хотя бы потому, что их просто нет, кроме тех, что Вы сами и завели на кристалл и которыми сами полностью и управляете - куда подвести, а куда нет, где по какому фронту защёлкнуть и т.д. Но в общем на ваш вопрос можно ответить с некоторой степенью утвердительно - работу с некоторыми узлами можно облегчить, создав специальные автоматы (драйверы, контроллеры, как хотите) и вести обращение через них.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|