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

 
 
> как правильно использовать readmemb
Kokos
сообщение Oct 29 2012, 06:29
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 54
Регистрация: 5-11-10
Из: Санкт-Петербург
Пользователь №: 60 667



добрый день. возникла проблема с использованием данной команды:

CODE
reg [15:0] MEM_0 [0:359];
$readmemb("MEM_0.mif", MEM_0);


при моделировании в моделсиме на выходе то что нужно но при компиляции проекта в квартусе возникает следующая ошибка:

Error (10170): Verilog HDL syntax error at MEM_0.mif(1) near text -
Error (12153): Can't elaborate top-level user hierarchy


текст самого файла :

CODE
-- Quartus II generated Memory Initialization File (.mif)

WIDTH=16;
DEPTH=360;

ADDRESS_RADIX=UNS;
DATA_RADIX=BIN;

CONTENT BEGIN
0 : 0000000000010000;
[1..15] : 0000000000000000;
16 : 0000000000001000;
[17..359] : 0000000000000000;
END;


Анализ курент файл применительно к mif файлу дает следующее:

Error (12074): File D:/.../.../MEM_0.mif is not a recognized design file type
Error: Quartus II 64-Bit Analyze Current File was unsuccessful. 1 error, 1 warning
Error: Peak virtual memory: 371 megabytes
Error: Processing ended: Mon Oct 29 09:36:13 2012
Error: Elapsed time: 00:00:00
Error: Total CPU time (on all processors): 00:00:00



в чем проблема?кому не сложно объясните пожалуйста.

Сообщение отредактировал Kokos - Oct 29 2012, 06:31
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kokos
сообщение Oct 31 2012, 14:00
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 54
Регистрация: 5-11-10
Из: Санкт-Петербург
Пользователь №: 60 667



Если не сложно можете еще объяснить пару моментов?

1)постараюсь объяснить подробнее.имею убывающую монотонную функцию записанную в таблицу. (в 0-й строчке максимум, в 511-й минимум).
по каждому фронту частоты 10 МГц, на выходе моего ящика должен появляться номер строчки из таблицы mem_tab [0:511], такой что в этой строчке записано самое маленькое значение, которое все еще больше входного сигнала.
Пусть этот номер будет N=511 (худший случай, входной сигнал меньше минимума функции).
И если на одно сравнение требовалось ~4 такта по Вашему алгоритму. то на 511 сравнений будет необходимо 2044 такта вспомогательного генератора, по которому данные будут считываться из памяти. Получится ведь очень большая частота вспомогательного генератора.


2) почему for не будет тут работать?просто я думал что синтезатор будет раскладывать его в параллельные ветви кода, например

for(i=0;i<=2;i=i+1)
begin
a[i]=b[i];
end

разложится в
a[0]=b[0];
a[1]=b[1];
и будет выполняться параллельно.

заниматься программированием на verilog начал не так уж давно, поэтому заранее извиняюсь если вопросы покажутся глупыми.
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 1 2012, 08:39
Сообщение #3


Гуру
******

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



Цитата(Kokos @ Oct 31 2012, 18:00) *
2) почему for не будет тут работать?просто я думал что синтезатор будет раскладывать его в параллельные ветви кода, например

for(i=0;i<=2;i=i+1)
begin
a[i]=b[i];
end

разложится в
a[0]=b[0];
a[1]=b[1];
и будет выполняться параллельно.
Будет. Синтезатор размотает цикл и сделает параллельное чтение из всей вашей таблицы mem_tab. В результате получится 512 сравнения input с константой и приоритетный шифратор на 512 входа (это если повезет). Если не повезет, то умножайте все на 2.

Это будет грандиозная, чисто логическая схема, которая угробит как частоту так и ресурсы вашей FPGA smile3046.gif

Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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