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

 
 
> Virtex5 RAMB18, Почему ША больше на 4 бита?
Sergei_Ilchenko
сообщение Feb 7 2009, 08:36
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-05-05
Из: Санкт-Петербург
Пользователь №: 5 128



Скопировал из ISE template блока памяти RAMB18.
Оформил свой модуль. RAMB18 сконфигурировал как двухпортовую 16-ти разрядную память глубиной 1024 слова - т.е. шина адреса 10 бит (ADDRA[9:0]).
При синтезе получил Warning, что мол не хватает 4-х адресов для портов ADDRA и ADDRB %)
Пачему? smile3046.gif

module ramb18_s16_s16
(
input wire [ 15 : 0 ] DIA,
input wire [ 9 : 0 ] ADDRA,
input wire WEA,
input wire ENA,
input wire CLKA,
output wire [ 15 : 0 ] DOA,

input wire [ 15 : 0 ] DIB,
input wire [ 9 : 0 ] ADDRB,
input wire WEB,
input wire ENB,
input wire CLKB,
output wire [ 15 : 0 ] DOB
);

RAMB18
#(
.DOA_REG(0), // Optional output registers on A port (0 or 1)
.DOB_REG(0), // Optional output registers on B port (0 or 1)
.INIT_A(18'h00000), // Initial values on A output port
.INIT_B(18'h00000), // Initial values on B output port
.READ_WIDTH_A(18), // Valid values are 1, 2, 4, 9 or 18
.READ_WIDTH_B(18), // Valid values are 1, 2, 4, 9 or 18
.SIM_COLLISION_CHECK("ALL"), // Collision check enable "ALL", "WARNING_ONLY",
// "GENERATE_X_ONLY" or "NONE"
.SRVAL_A(18'h00000), // Set/Reset value for A port output
.SRVAL_B(18'h00000), // Set/Reset value for B port output
.WRITE_MODE_A("WRITE_FIRST"), // "WRITE_FIRST", "READ_FIRST", or "NO_CHANGE"
.WRITE_MODE_B("WRITE_FIRST"), // "WRITE_FIRST", "READ_FIRST", or "NO_CHANGE"
.WRITE_WIDTH_A(18), // Valid values are 1, 2, 4, 9 or 18
.WRITE_WIDTH_B(18), // Valid values are 1, 2, 4, 9 or 18

// The following INIT_xx declarations specify the initial contents of the RAM
.INIT_00(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_01(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_02(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_03(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_04(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_05(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_06(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_07(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_08(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_09(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0A(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0B(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0C(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0D(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0E(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0F(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_10(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_11(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_12(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_13(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_14(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_15(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_16(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_17(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_18(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_19(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1A(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1B(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1C(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1D(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1E(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1F(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_20(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_21(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_22(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_23(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_24(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_25(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_26(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_27(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_28(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_29(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2A(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2B(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2C(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2D(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2E(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2F(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_30(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_31(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_32(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_33(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_34(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_35(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_36(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_37(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_38(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_39(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3A(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3B(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3C(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3D(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3E(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3F(256'h0000000000000000000000000000000000000000000000000000000000000000),

// The next set of INITP_xx are for the parity bits
.INITP_00(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_01(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_02(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_03(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_04(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_05(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_06(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_07(256'h0000000000000000000000000000000000000000000000000000000000000000)
)

RAMB18_inst
(
.DIA(DIA), // 16-bit A port data input
.DIPA(2'b0), // 2-bit A port parity data input
.ADDRA(ADDRA), // 14-bit A port address input
.WEA({WEA, WEA}), // 2-bit A port write enable input
.ENA(ENA), // 1-bit A port enable input
.SSRA(1'b0), // 1-bit A port set/reset input
.CLKA(CLKA), // 1-bit A port clock input
.REGCEA(1'b0), // 1-bit A port register enable input
.DOA(DOA), // 16-bit A port data output
.DOPA(), // 2-bit A port parity data output

.DIB(DIB), // 16-bit B port data input
.DIPB(2'b0), // 2-bit B port parity data input
.ADDRB(ADDRB), // 14-bit B port address input
.WEB({WEB, WEB}), // 2-bit B port write enable input
.ENB(ENB), // 1-bit B port enable input
.SSRB(1'b0), // 1-bit B port set/reset input
.CLKB(CLKB), // 1-bit B port clock input
.REGCEB(1'b0), // 1-bit B port register enable input
.DOB(DOB), // 16-bit B port data output
.DOPB() // 2-bit B port parity data output
);

endmodule
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
Maksim
сообщение Feb 7 2009, 09:53
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 164
Регистрация: 27-06-04
Пользователь №: 194



разрядность шины адреса для RAMB18 - 14 разрядов
добавьте 4 и все будет нормально


--------------------
qwerty
Go to the top of the page
 
+Quote Post
Sergei_Ilchenko
сообщение Feb 7 2009, 12:58
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-05-05
Из: Санкт-Петербург
Пользователь №: 5 128



Цитата(Maksim @ Feb 7 2009, 12:53) *
разрядность шины адреса для RAMB18 - 14 разрядов
добавьте 4 и все будет нормально


Тогда вопрос: - К каким разрядам подключать мои адреса. У меня их будет всего 10 (2^10=1024)
По всей видимости к старшим...
Go to the top of the page
 
+Quote Post
Maksim
сообщение Feb 7 2009, 14:29
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 164
Регистрация: 27-06-04
Пользователь №: 194



Цитата(Sergei_Ilchenko @ Feb 7 2009, 15:58) *
Тогда вопрос: - К каким разрядам подключать мои адреса. У меня их будет всего 10 (2^10=1024)
По всей видимости к старшим...

Старшие в ноль или единицу, как нравится
А зачем вам явно описывать элемент?
можно же написать и так
parameter RAM_WIDTH = <ram_width>;
parameter RAM_ADDR_BITS = <ram_addr_bits>;

reg [RAM_WIDTH-1:0] <ram_name> [(2**RAM_ADDR_BITS)-1:0];
reg [RAM_WIDTH-1:0] <output_dataA>, <output_dataB>;

<reg_or_wire> [RAM_ADDR_BITS-1:0] <addressA>, <addressB>;
<reg_or_wire> [RAM_WIDTH-1:0] <input_dataA>;

// The folloing code is only necessary if you wish to initialize the RAM
// contents via an external file (use $readmemb for binary data)
initial
$readmemh("<data_file_name>", <rom_name>, <begin_address>, <end_address>);

always @(posedge <clock>) begin
if (<enableA>) begin
if (<write_enableA>)
<ram_name>[<addressA>] <= <input_dataA>;
<output_dataA> = <ram_name>[<addressA>];
end
if (<enableB>)
<output_dataB> = <ram_name>[<addressB>];
end

Этот пример взят из примеров кода в ISE
надо задать только глубину ОЗУ и всё, остальное сделает компилятор
Или требуется иметь какую-то предварительную инициализацию в BRAM?


--------------------
qwerty
Go to the top of the page
 
+Quote Post
Sergei_Ilchenko
сообщение Feb 7 2009, 16:39
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-05-05
Из: Санкт-Петербург
Пользователь №: 5 128



Цитата(Maksim @ Feb 7 2009, 17:29) *
Старшие в ноль или единицу, как нравится

Нет, видимо все-же наоборот. В Вашем случае:

Section 2 - Warnings
--------------------
WARNING:LIT:243 - Logical network N3 has no load.
WARNING:MapLib:701 - Signal ADDRA<3> connected to top level port ADDRA<3> has
been removed.
WARNING:MapLib:701 - Signal ADDRA<2> connected to top level port ADDRA<2> has
been removed.
WARNING:MapLib:701 - Signal ADDRA<1> connected to top level port ADDRA<1> has
been removed.
WARNING:MapLib:701 - Signal ADDRA<0> connected to top level port ADDRA<0> has
been removed.
WARNING:MapLib:701 - Signal ADDRB<3> connected to top level port ADDRB<3> has
been removed.
WARNING:MapLib:701 - Signal ADDRB<2> connected to top level port ADDRB<2> has
been removed.
WARNING:MapLib:701 - Signal ADDRB<1> connected to top level port ADDRB<1> has
been removed.
WARNING:MapLib:701 - Signal ADDRB<0> connected to top level port ADDRB<0> has
been removed.

Если 4 младших разряда подключить к лог. 0, а мою ША к старшим разрядам то Warning'ов нет.
Правда есть какой-то "странный" Warning относительно сигнала N3 впрочем как и в Вашем случае.

Section 2 - Warnings
--------------------
WARNING:LIT:243 - Logical network N3 has no load.

В проекте кроме модуля памяти других модулей нету и цепи такой у меня тоже нет. Что делать не понятноооо.

Цитата(Maksim @ Feb 7 2009, 17:29) *
А зачем вам явно описывать элемент?


Там где я работаю "не принято" "так" описывать память. Уж не знаю почему тут так повелось...
Есть мысль, что боятся доверится синтезатору в вопросе распознает/не распознает память. Больше ничего не могу предположить.

Цитата(Maksim @ Feb 7 2009, 17:29) *
Или требуется иметь какую-то предварительную инициализацию в BRAM?


Нет, инициализировать не нужно.
В конечном счете нужно получить память 64х16р. слов (матрица 8 х 8), но так, чтобы по порту "A" она писалась/читалась как 32-х разрядные слова ибо PCI, а порты B обьединялись в столбцы по 8 элементов (элементы строк) и имели соответственно построчную адресацию. Причем данные со всех столбцов нужны одновременно.

Думал о распределенной памяти, но уж больно выходит не оптимально - во первых, а во вторых как я понял нельзя получить истинно двухпортовую память на SLICEM.
Т.е. для меня был бы оптимальным размер 8 х 16 р., но такое только на триггерах smile.gif

Резюме.
Выбрал блочную память RAMB18 в конфигурации 1к х 16. Из каждого блока буду использовать только 8 слов 07.gif
Сейчас заворачиваю блок памяти в модуль дабы потом было легче выполнять "соединения".

Ну не извращенец? 01.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 9 2009, 03:28
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Sergei_Ilchenko @ Feb 7 2009, 10:39) *
Ну не извращенец? 01.gif


ИМХО воспользуйтесь коре генератором


--------------------
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Feb 9 2009, 10:54
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Sergei_Ilchenko @ Feb 7 2009, 15:58) *
Тогда вопрос: - К каким разрядам подключать мои адреса. У меня их будет всего 10 (2^10=1024)
По всей видимости к старшим...

Ответ правильный, а кто говорит, что к младшим - тот не читал ug190 стр. 124.
Go to the top of the page
 
+Quote Post

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

 


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


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