Перейти к содержанию
    

Подключение SRAM к ПЛИС

Приветствую всех, работаю над подключением внешней SRAM памяти (cy7c1470v33) к ПЛИС (spartan 6)  на частоте 100 МГц. Возникла проблема некорректной записи данных в память, к сожалению, сейчас нет возможности приложить осциллограммы с chipscope. Используемые модули:

module w1(input clk, 
output reg [4:0] A1=0,
output reg WE2=0,
output reg ab,
 inout [15:0] ab1
    );(* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [8:0] p=0;
    (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [8:0] p1=0;
    (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [15:0] t1=16'b0;
     (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [15:0] a1=16'b0;
     (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [15:0] g1=16'b0;
     (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [15:0] h1=0;
assign  ab1=p<34?t1:16'bzzzzzzzzzzzzzzzz;//заполнение и чтение блока адресов
always  @(posedge clk) begin
WE<=(p1<32)?0:1;
g1<=(p>14&&p<32)?g1+2:0;
A1<=(A1<15)?A1+1:0;
if (p<50)
p<=p+1; else p<=50;
if (p1<50)
p1<=p1+1; else p1<=50;

a1<=g1;
h1<=a1;
t1<=h1;

//ab<=ab1;

end

endmodule

module w2(
input clk, 
input [15:0] ab1,
output reg [4:0] A2=5'b0, 
output reg WE=0,
output [15:0] abb,
 inout [15:0] ab2=16'b0
    );(* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [8:0] j=0;
    (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [8:0] j1=0;
    (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [8:0] j2=0;
      reg [15:0] abb=16'b0;
    (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [15:0] t2=16'b0;
     (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [15:0] a2=16'b0;
     (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [15:0] aa2=16'b0;
     (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [15:0] g2=16'b1;
     (* EQUIVALENT_REGISTER_REMOVAL="NO"*) reg [15:0] h2=0;
assign  ab2=(j1<19)?t2:16'bzzzzzzzzzzzzzzzz;//заполнение и чтение блока результата
always  @(posedge clk) begin
WE2<=(j<15)?0:1;
if (j<50)
j<=j+1; else j<=50;
if (j1<50)
j1<=j1+1; else j1<=50;
if (j2<50)
j2<=j2+1; else j2<=50;
A2<=(j2<15)?(A2+1):ab1; 
g2<=(j2<15)?g2*2:1; 
a2<=g2;
h2<=a2;
t2<=h2;
end
endmodule

  Используется 2 микросхемы памяти, которые взаимодействуют между собой через ПЛИС. В одну записываются адреса, а другая читает данные по этим адресам.

 ab1, ab2 это двусторонние шины данных, первые 32 такта для w1 и 16 тактов для w2 идет запись сигналов, а затем чтение, WE,WE2- управляют чтением и записью, A1,А2 - адреса.

  Также я столкнулся с проблемой: chipscope не видит шины данных. Осциллограф показывал что сигнал на шинах есть. Заранее благодарю за помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 направленные шины (как у вас данные) реально в FPGA не существуют. Синтезатор раскладывает цепи чтения и записи данных на разные провода и вставляет реальный буфер, подключённый к ним.

Поставьте этот буфер явно и разделите направления чтения и записи - тогда они будут реальными сигналами и chipscope их увидит

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13.11.2021 в 14:41, aLvui1 сказал:

Используется 2 микросхемы памяти, которые взаимодействуют между собой через ПЛИС. В одну записываются адреса, а другая читает данные по этим адресам.

Мне кажется как-то сложновато для начала работы с неизвестными устройствами. Я бы сначала написал простой модуль, который бы пробежавшись по всем адресам одной микросхемы отправлял и вычитывал какой-нибудь байт данных. Делаете сравнение отправки\получения и выводите это в сигнал ошибки, который можно чипскопом захлопывать. Так можно отладить обмен с памятью, да заодно и саму память проверить. Если микросхема допускает я бы так же все опыты проводил на частоте мегагерц 20, чтобы уж гарантированно на времянку не попасть.

 

13.11.2021 в 14:41, aLvui1 сказал:

Также я столкнулся с проблемой: chipscope не видит шины данных.

Выше уже ответили - нужно поставить управляемый двунаправленный буфер. Коммутировать его придётся самому, но зато в чипскоп можно будет вывести индивидуально линии данных на него и от него. Однако если залезть в RTL, то можно эти линии данных увидеть и при вашей реализации, но, мне кажется, не стоит оно того - искать отдельные сигналы 32-битной шины, названия которым синтезатор сам дал...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13.11.2021 в 14:41, aLvui1 сказал:

проблема некорректной записи данных в память

В какой строке у Вас отрабатывается требуемое ею tDH?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...