2 мірних декларації пам'яті масиву

A

ayza1505

Guest
Я спробував запустити цю програму, але є помилка з-за пам'яті: кілька постійних drivers.anyone може мені допомогти?

вхід WEN, A0, A1;

вхід DI0, DI1, DI2, DI3;

вихід DO0, do1, DO2, do3;Параметр MEMORY_SIZE = 4;
Параметр WORD_LEN = 4;
Параметр ADDRESS_WIDTH = 2;

р [0: (WORD_LEN - 1)] пам'ять [(MEMORY_SIZE - 1): 0] / / Оперативна пам'ять

дроту [(ADDRESS_WIDTH -1): 0] rw_address_reg / / 'RD (читати) адреса порту.

дроту [0: (WORD_LEN - 1)] bdi_data_reg / / введення "даних реєстру.

дроту [0: (WORD_LEN - 1)] ado_data_wire / / вихід "дані" зареєструватися

р [0: (WORD_LEN - 1)] ado_data_reg / / вихід "дані" зареєструватися

р [(MEMORY_SIZE - 1): 0] темпах;

ЬіЕ ira0 (A0_BUF, А0);
ЬіЕ ira1 (A1_BUF, A1);

ЬіЕ dib0 (DI0_BUF, DI0);
ЬіЕ dib1 (DI1_BUF, DI1);
ЬіЕ dib2 (DI2_BUF, DI2);
ЬіЕ dib3 (DI3_BUF, DI3);

ЬіЕ wenable (WEN_BUF, WEN);

призначати
rw_address_reg = (A1_BUF, A0_BUF),
bdi_data_reg = (DI0_BUF, DI1_BUF, DI2_BUF, DI3_BUF);завжди @ (negedge WEN_BUF)
починати
якщо (== WEN_BUF 1'b0)
починати
якщо (rw_address_reg <MEMORY_SIZE)
починати
пам'ять [rw_address_reg] = bdi_data_reg;
ado_data_reg = пам'яті [rw_address_reg];
кінець

ще
починати
$ Дисплея ("WRITE-ERROR [RAM4X4]: [Незаконні Адреса <1:0> =% D>% D], час =% г \ п", rw_address_reg, MEMORY_SIZE, $ часу);
для (темпах = 0; темпах <WORD_LEN; Темп Темп = 1)
починати
ado_data_reg [темпах] = 1'bx;
кінець
кінець
кінець
кінець

завжди @ (rw_address_reg)
починати
якщо (== WEN_BUF 1'b1)
починати
ado_data_reg = пам'яті [rw_address_reg];
кінець

ще
починати
для (темпах = 0; темпах <WORD_LEN; Темп Темп = 1)
починати
ado_data_reg [темпах] = 1'bx;
кінець
$ Дисплея ("WRITE-ERROR [RAM4X4]: <1:0> змінилася", $ раз ", а (Wen) = 0 \ п");

для (темпах = 0; темпах <MEMORY_SIZE; Темп Темп = 1)
починати
пам'ять [темпах] = 4'bx;
кінець
пам'ять [rw_address_reg] = bdi_data_reg;
ado_data_reg = пам'яті [rw_address_reg];
кінець
кінець

завжди @ (bdi_data_reg)
починати
якщо (== WEN_BUF 1'b0)
починати
пам'ять [rw_address_reg] = bdi_data_reg;
ado_data_reg = пам'яті [rw_address_reg];
кінець
кінець

 
Ви не можете писати 'р' 2 типу в різних prodedural блоків.
Ви написали на "ado_data_reg в 2 завжди блоків, що затвердження.Він створює два драйвери для нього, отже, помилки.
Kr,
Аві
http://www.vlsiip.com

 
так що мені потрібно змінити в різних блоків для ado_data_reg?

 
пишіть на 'ado_data_reg "тільки в один блок завжди.тобто вам доведеться суміщати дві завжди блоків
Kr,
Аві
http://www.vlsiip.com

 
ado_data_reg = пам'яті [rw_address_reg]

Вище означає, що ви "письмової форми" значення 'ado_data_reg.

А ви пишете значення ado_data_reg в 2 різних завжди блоків.
Якщо ви думаєте, завжди блокувати, як комбінаційних хмари (ось що він представляє в відсутність будь-яких poseedge його чутливості список), то фактично у вас є 'ado_data_reg приходу від 2 combinatinal хмари та коротке togegher.Це поганий дизайн, який звичай 'працювати чітко.
Так не призначати або "WRITE" до "р" типу в більш ніж одному ЗАВЖДИ BLOCK.

Сподіваюся, що це допомагає,
Kr,
Аві
http://www.vlsiip.com

 

Welcome to EDABoard.com

Sponsor

Back
Top