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

 
 
> Как работать с 4-ым циклоном на двух фронтах на высокой частоте?
iiv
сообщение Jul 16 2011, 15:27
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Всем привет,

помогите еще раз пожалуйста, не могу разобраться упираюсь ли я в теоретический пик, или есть какое-то решение...

Есть оцифровщик, который валит по 8 лвдс на ужасной скорости данные. Надо их собрать и распараллелить, послав по 56 ногам, но, уже в 3.5 раза медленнее. Хочу потренироваться на кошках, то есть, например, на одной терасиковской борде DE2.

У оцифровщика есть два клока: фрейм и дата клоки, фрейм работает на частоте Х по двум фронтам, а дата клок - на скорости Х*3.5 по двум фронтам. В пике Х=125МГц, сейчас мои кошки тренируются на Х=800/7МГц, то есть около 114МГц при датаклоке 400МГц.

Пытаюсь скомпилить функцию, и не вписываюсь по Fast 1200mV Minimum Pulse Width со слаком в -0.4нс, в Slow все в порядке.
Понимаю, что если уронить частоту до 98МГц, то все получиться, но вдруг можно работать на большей частоте? У меня и так оцифровщик на 125МГц расчитан, и для меня падение с 125 до 98 МГц уже будет существенным. Вдруг я что-то не так делаю, не так с данными по двум фронтам работаю, и что-то не понимаю, посоветуйте, пожалуйтса!

Код
module Input(ClkFrame, ClkData, In, ClkFirst, OutData);
input             ClkFrame /*800/7MHz*/, ClkData /*400MHz*/, ClkFirst /*800/7MHz output clock*/;
input      [7:0]  In /* input data on both fronts with 400MHz*/;
output reg [13:0] OutData[0:3] /* output data on both fronts with 800/7MHz */;

// Memory ////////////////////////////

reg  [2:0] ShiftInd[0:7];
reg  [2:0] OutPos;
reg  [1:0] InPos;

reg [55:0] FIFO1[0:3], FIFO2[0:3];
reg [13:0] AllIn[0:7];
reg [55:0] AllInDM[0:3];
reg        OldState0, OldState1;

// Main Activity ////////////////////


initial
begin
   ShiftInd[0]=5;
   ShiftInd[1]=4;
   ShiftInd[2]=1;
   ShiftInd[3]=1;
   ShiftInd[4]=1;
   ShiftInd[5]=1;
   ShiftInd[6]=1;
   ShiftInd[7]=6;
end


always @(posedge ClkFirst)
begin
   OutPos<=OutPos+1;
   {OutData[0], OutData[1], OutData[2], OutData[3]}<=(OutPos[0])?FIFO1[OutPos[2:1]]:FIFO2[OutPos[2:1]];
end


always @(negedge ClkData)
begin
   for(int j=0; j<8; j++)
   begin
     AllIn[j][0]<=In[j];
     for(int i=0; i<14; i+=2)
       AllIn[j][i+2]<=AllIn[j][i];
   end
   if(ClkFrame!=OldState0)
   begin
     OldState0<=ClkFrame;
     AllInDM[0]<={AllIn[0], AllIn[2], AllIn[4], AllIn[6]};
     AllInDM[2]<=AllInDM[0];
   end
end


always @(posedge ClkData)
begin
   for(int j=0; j<8; j++)
   begin
     AllIn[j][1]<=In[j];
     for(int i=1; i<14; i+=2)
       AllIn[j][i+2]<=AllIn[j][i];
   end
   if(ClkFrame!=OldState1)
   begin
     OldState1<=ClkFrame;
     AllInDM[1]<={AllIn[1], AllIn[3], AllIn[5], AllIn[7]};
     AllInDM[3]<=AllInDM[1];
   end
end


always @(negedge ClkFrame) FIFO1[InPos]<=AllInDM[2];


always @(posedge ClkFrame)
begin
   FIFO2[InPos]<=AllInDM[3];
   InPos<=(InPos)?InPos+1:ShiftInd[OutPos];
end
endmodule


Спасибо

ИИВ
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:52
Рейтинг@Mail.ru


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