Цитата
В квартусе создаю Simple Dual-Port RAM (dual clock), прямо из темплейта.
как показала практика фигово он это создает, лучше явно через мегафункцию описать....
Цитата
Есть ли возможность подключить память к процессору таким образом, чтобы объявить ее обычным const unsigned int ARRAY[2**ADDR_WIDTH - 1] и читать из нее как из обычного массива?
можно. Надо 1 подключить эту память к шине через подходящий переходник (это должен быть готовый модуль).
Переходник выделит вашей памяти адресное пространство и дальше у вас 2 пути
1. это создать указатель unsigned int *MyPointer = MEM_ADDR; и обращаться в память через MyPointer[i] = 10 или *MyPointer = 10; *(MyPointer + i) = 10;
2. это создать переменную массив, и договориться с линкером чтобы он ее разместил точно в этой памяти, тогда будет точно ваш вариант const unsigned int ARRAY[2**ADDR_WIDTH - 1], как в ниосе договариваться с линкером надо читать.... но это уже нюансы.
То есть основная ваша задача это через переходник подключить память к шине и выдать ей адресное пространство.
Но по мне это надо делать со стороны НИОСА, то есть делать модуль памяти для него через встроенный IP core генератор (или как там он у квартуса называется), а уж потом к нему цеплятся периферией, может даже через еще какие то стандартные блоки...