Какие входы и выходы существуют в / из ОЗУ, могут различаться в зависимости от того, как вы собираетесь их использовать. Если ОЗУ действительно существует на самом чипе ПЛИС, примером может быть то, что вы хотите использовать простую однопортовую ОЗУ, например, в компоненте библиотеки ОЗУ блока Xilinx.
Как видно из кода, что sdram инстанцируется под верхним уровнем FPGA (ОЗУ содержится в чипе fpga), кажется, что входы / выходы ОЗУ также должны быть входами / выходами верхнего уровня , Было бы наоборот, если бы sdram находились вне ПЛИС (и, следовательно, вне верхнего уровня ПЛИС)
Как правило, ОЗУ, как правило, представляют собой последовательные элементы, требующие как минимум:
-Часы (обычно сигнал шириной 1 бит)
-Адрес (как правило, имеет ширину log2 (n) бит, где n - размер массива ОЗУ. Поэтому, если массив состоит из 64 элементов, вам потребуется как минимум 6 бит для адресации всего. Тот же адрес Сигнал может использоваться как для чтения, так и для записи, или, возможно, у вас будет 2 отдельных адресных сигнала.)
-A разрешение записи (в самом простом из это может быть 1-битный сигнал. Наиболее типичным использованием будет утверждение этого сигнала за 1 такт, чтобы обновить данные по текущему адресу адресного сигнала)
-data (ширина может варьироваться и может быть гибкой / настраиваемой на ПЛИС. Если вы хотите хранить 16-битные данные в каждой записи ОЗУ, которая должна быть абсолютно корректной. Это может быть один сигнал или 2 отдельных для чтения и записи данных).
Пока векторы сигналов, идущие в / из ОЗУ, имеют хотя бы эти базовые функции, кажется, что вы должны иметь возможность использовать его как минимум в качестве простой ОЗУ. Обратите внимание на то, что в вашем коде сигналы sdram_ * не объявлены и не связаны ни с чем, кроме самого экземпляра sdram.