Всё ж как бы всё оформить в виде проекта, а то отдельные тексты...
Вид для печати
Всё ж как бы всё оформить в виде проекта, а то отдельные тексты...
Спасибо Донетчанам за отлично проделанную работу! Начали читаться последние треки на дисках.
Теперь нужно дружно попросить Дмитрия реализовать второй алгоритм выделения синхры и передать в недопц, чтобы те добавили в гуглокод.
Ewgeny7, это ужо их проблема. Вот ответ на просьбу Юры сделать фапч:
Понимай как хошь, но уже написали :)Цитата:
Сообщение от lvd
Надо обозвать *****фапч тогда включат в репозитарий :D
А можно в личку бинарник? есть на чем тестить.
Улучшения не понятно - есть или нету - вроде глючит так же - переодически надо ретрай делать. счас сделаю образ с установленными на нем дцу и еще чемто аналогичным и 2 карты - со стандартным фирмварем и с фапчевым. и попробую сравнить на том же диске.
Кстати вопрос - а мегу обязательно перешивать( имеется ввиду вероятнее всего бутлодырь)? а то пишет что там прошивка от марта 2010.
Сделал более красивый генерератор RCLK
Теперь резкие скачки переваривает на порядок лучше.
На изображении пример того как ведет себя стандартный фапч (красное), и новый с пред обработкойКод:module apll(
input wire clk, // 28MHz
input wire rddat,
input wire wfde,
output reg rclk,
output reg rawr
);
// логика выделения фронтов сингналов для синхронной логики
reg oldrd;
reg oldde;
reg oldrclk;
always @ (posedge clk)
begin
oldrd <= rddat;
oldde <= wfde;
oldrclk <= rclk;
end
// вычисление смещения отрицательного импулься RDDAT отностительно RCLK
wire[6:0] calc = (27 - rcnt);
wire[6:0] delta = { calc[6], calc[6], calc[5:1] } ; // знаковое деление пополам
// расчет длительнести полуволн RCLK
reg [6:0] nxtime;
reg [1:0] inrawr;
always @ (posedge clk)
if (oldde && !wfde)
// при начале операции чтения ставим длительность полуволн RCLK 2мкс
nxtime <= 55;
else
begin
if (oldrd && !rddat)
begin
inrawr[0] <= 1'b0;
nxtime <= 55 + delta;
end
else if (oldrclk != rclk)
inrawr <= { inrawr[0], 1'b1 };
end
// генератор RCLK
reg [6:0] rcnt;
reg [6:0] rcenter;
always @ (posedge clk)
begin
if (rcnt > 0)
rcnt <= rcnt - 1;
else
begin
if (!wfde) rclk <= ~rclk;
rcnt <= nxtime;
rcenter <= nxtime/2;
end
end
// генератор RAWR
always @ (posedge clk)
begin
if (wfde)
rawr <= 1'b1;
else
begin
// делаем rawr в середине rclk
if (rcnt == (rcenter +3)) rawr <= inrawr[1];
if (rcnt == (rcenter -1)) rawr <= 1'b1;
end
end
// для симулятора
initial
begin
rcnt = 33;
rclk = 1;
nxtime = 8;
end
endmodule
Тестим...
Ждем новый бин. Со старым таки улучшения есть. Хотя часть дисков таки не читается.
Последний фапч можно еще улучшить, двигать rawr в противоположную сторону перекосу, при этом сохраняя rawr в идеальном положении окна детектирования, по идее будут лучше соблюдены требования к данным от ВГшки. Сейчас rawr ставлю тупо в середину rclk, в теории может вызвать проблемы (нигде не нашел хоть намека как WD179x или ВГ93 декодирует mfm)