Просмотр полной версии : Читабельный ФАПЧ
На углепати подымали вопрос про читаемость и легкость для понимания ФАПЧ по сыркам.
Ясен пень что табличные или перенесеным с схем на сумматорах с перетусоваными битами фапчи малопонятны.
Решил восполнить пробел и написать простенький фапч (коментов гораздо больше чем кода) на более менее читаемом языке
// синтезируемый
module phase_sync(
input wire clk, // 8mhz
input wire rddat,
output reg rclk,
output reg rawr
);
// ************************************************** *****
// формирование RAWR
// ************************************************** *****
// защелка где храним предыдущее состояние сигнала rddat с дисковода
// нужно для определния момента отрицательного фронта
reg oldrd;
// формируем rawr 125нс
always @ (posedge clk)
begin
// запоминаем текущее значение
oldrd <= rddat;
// формируем rawr если на предыдущем такте rddat =1 а на текущем =0
rawr <= !(oldrd == 1'b1 && rddat == 1'b0); // тут oldrd еще содержит старое значение
end
// ************************************************** *****
// формирование RCLK
// ************************************************** *****
// счетчик для формирования меандра RCLK, один оборот счетчика это полуволна RCLK
reg [3:0] counter = 0;
// дельта в тактах от оптимальной точки расположения RAWR относительно RCLK
// RAWR в идельном случае долен находиться в середине полуволны RCLK
wire[3:0] delta = (8 - counter) +1;
// 8 середина полуволны,
// +1 для того что бы при совпадении фаз счетик инкреметировался а не стоял на месте
// можно полюдски написать 9-counter что то же самое
// знаково делим смещение пополам, будем приближаться к оптимальной точке на полшага перекоса фаз.
wire[3:0] shift = { delta[3], delta[3], delta[2:1] };
always @ (posedge clk)
begin
// RAWR = 0, значит сравниваем его положение с оптимальным
// и если надо (delta >= 2 или delta =< 2) корректируем фазу RCLK
if (rawr == 0)
counter[3:0] <= counter + shift;
else
counter <= counter + 1; // иначе просто инкрементируем счетчик
// закончилась полуволна генерируем меандр
if (counter == 15) rclk = ~rclk;
end
initial
begin
rclk = 1'b0;
end
endmodule
Можно колво кода как уменьшить понизив читабельность, так и увеличив, выбрал нечто среднее
Где то так...
Где будем испытывать? На Скорпионе?
А кто это переведёт в VHDL?
fifan, где-где... там где ее ну ооооочень не хватает - на Пентэве :)
пересчитал и пофиксил под 28мгц
// синтезируемый
module phase_sync28(
input wire clk, // 28mhz
input wire rddat,
output reg rclk,
output reg rawr
);
// ************************************************** *****
// формирование RAWR
// ************************************************** *****
// защелка где храним предыдущее состояние сигнала rddat с дисковода
// нужно для определния момента отрицательного фронта
reg oldrd;
// сдвиговый регистр для формирования raclk 150нс
reg [3:0] rawr0;
// формируем rawr 150нс
always @ (posedge clk)
begin
// запоминаем текущее значение
oldrd <= rddat;
// формируем rawr если на предыдущем такте rddat =1 а на текущем =0
// пишем в сдвиговый регистр, заодно сдвигаем его
rawr0 <= { rawr0[2:0], !(oldrd == 1'b1 && rddat == 1'b0) };
// если хоть один бит в сдвиговом регистре 0 тогда rawr =0, что при клоке свдига 28мгц, примерно 150нс
rawr = !(rawr0 != 4'hF);
end
// ************************************************** *****
// формирование RCLK
// ************************************************** *****
// счетчик для формирования меандра RCLK, один оборот счетчика это полуволна RCLK
reg [5:0] counter = 0;
// дельта в тактах от оптимальной точки расположения RAWR относительно RCLK
// RAWR в идельном случае долен находиться в середине полуволны RCLK
wire[5:0] delta = (24 - counter) +1;
// 24 середина полуволны -4 (на столкьо тактов удлинили RAWR)
// +1 для того что бы при совпадении фаз счетик инкреметировался а не стоял на месте
// можно полюдски написать 25-counter что то же самое
// знаково делим смещение пополам, будем приближаться к оптимальной точке на полшага перекоса фаз.
wire[5:0] shift = { delta[5], delta[5], delta[4:1] };
always @ (posedge clk)
begin
// RAWR = 0, значит сравниваем его положение с оптимальным
// и если надо (delta > 2 или delta < 2) корректируем фазу RCLK
if (rawr0[0] == 0)
counter <= counter + shift;
else
// проверяем дошли ли мы до длины полуволны примерно в 2мкс
// rclk тут что бы компенсировть хоть немного отклонение от 2мкс
if (counter < (54+rclk))
counter <= counter + 1; // есил
else
begin
counter <= 0;
rclk = ~rclk;
end
end
initial
begin
rclk = 1'b0;
end
endmodule
И диаграмка сравнивающая 2 фапча на одних входных данных
В какую ПЛИС предполагается запихнуть данное творение?
fifan, я вкорячиваю это в EP1K50, а вообще, как Дима говорит - творение занимает 8 макроячеек, так что влезет в любую, даже EPM3032.
solegstar
17.08.2011, 11:31
fifan, где-где... там где ее ну ооооочень не хватает - на Пентэве :)
Если ФАПЧ заработает на Эве, мож я таки её себе и прикуплю! :)
А что, на Эве дисковод плохо работает? Я просто не в курсе, использовал там дисковод всего пару раз, год назад :)
А что, на Эве дисковод плохо работает?
есть пачка дискет, которые Эва не хавает, хотя тот же Кай даже не поперхнулся (с одним и тем же дисководом).
---------- Post added at 11:16 ---------- Previous post was at 10:44 ----------
Собрал прошиву, если седни не нажрусь, то попробую :)
Ура товарищи!
Сегодняшний день ознаменован не только моим ДР, но и тем фактом, что сегодня контроллер дисководов PentEvo был наделен выделителем данных на основе цифрового фазового синхронизатора, построенного по схеме с отрицательной обратной связью через кольцо ФАПЧ, в народе - просто ФАПЧ!
Да, чуда не случилось, и не все диски стали одинаково хорошо читаться, но результат-таки есть и очевидный! Где ранее Эва читала со второго-третьего раза, елозив по диску, а то и вовсе отказывалась читать - сейчас считывает без затыков, либо со второй-третьей попытки. Из трех дисков, в которых в среднем по 10 сбойных секторов, которые я не смог прочитать на базовой конфигурации от 11.06.11, эва с ФАПЧ считала два успешно (на первом - на 2х секторах спотыкалась, но после первого Retry считывала нормально, на втором 4 сектора, со второй-третьей попытки считались), третий - чуть хуже (5 битых секторов, которые не прочлись). Теперь нужно сверить работу этого узла со скорпионовским, каевским и профинским. Но уже есть результат и это радует.
Демки будут? Как тут.
Или все это просто пьянка замаскированая под пати?
Так что, newart, ты не прав, это была не просто пьянка, а полезная для Speccy-сообщества конференция и плоды ее уже есть! :)
doorsfan
17.08.2011, 23:28
имя, сестра, тьфу, ссылка!
имя, сестра, тьфу, ссылка!
на пати, замаскированное под пьянку? ;)
doorsfan
18.08.2011, 00:03
нееее, ссылка на паршивку!
doorsfan, в личке. Давайте потестим прежде чем в народ отпускать.
Ну, а на более? для меня, понятный язык (VHDL) кто нить переведёт?
Ну, а на более? для меня, понятный язык (VHDL) кто нить переведёт?
lisica, ну ёлы-палы :) Там разницы-то между языками на гулькин... клюв.
lisica, исходник подробно комментирован, по идее не должно вызвать затруднений перевести его на другой язык.
Там 28Мгц фапч можно еще процентов на 10% увеличить окно детектирования, и сделать более аккуратный генератор менандра для RCLK (что улучшит параметры)
В идеале можно совсем круто сделать, что бы он не текущий бит обрабатывал, а пару битов (потому что реакция на текущий бит как правило уже запаздалая, и фапч правит RCLK для следующего бита), всякие профи каи итд, будут нервно курить в стороне
но по ресурсам будет существенно больше.
но по ресурсам будет существенно больше.
не страшно, там ресурсов еще много.
Всё ж как бы всё оформить в виде проекта, а то отдельные тексты...
doorsfan
18.08.2011, 11:44
Спасибо Донетчанам за отлично проделанную работу! Начали читаться последние треки на дисках.
Теперь нужно дружно попросить Дмитрия реализовать второй алгоритм выделения синхры и передать в недопц, чтобы те добавили в гуглокод.
и передать в недопц, чтобы те добавили в гуглокод.
Угу. Они добавят, потом догонят и еще добавят. Доработки извне они не принимают.
Ewgeny7, это ужо их проблема. Вот ответ на просьбу Юры сделать фапч:
Напиши. Я фапчи писать неумею.
Понимай как хошь, но уже написали :)
Надо обозвать *****фапч тогда включат в репозитарий :D
balu_dark
18.08.2011, 14:25
А можно в личку бинарник? есть на чем тестить.
Улучшения не понятно - есть или нету - вроде глючит так же - переодически надо ретрай делать. счас сделаю образ с установленными на нем дцу и еще чемто аналогичным и 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
На изображении пример того как ведет себя стандартный фапч (красное), и новый с пред обработкой
Тестим...
balu_dark
19.08.2011, 14:02
Ждем новый бин. Со старым таки улучшения есть. Хотя часть дисков таки не читается.
Со старым таки улучшения есть. Хотя часть дисков таки не читается.
Даже с самым навороченным фапчем будут диски, которые не возможно прочесть :( БлИН в личке.
Последний фапч можно еще улучшить, двигать rawr в противоположную сторону перекосу, при этом сохраняя rawr в идеальном положении окна детектирования, по идее будут лучше соблюдены требования к данным от ВГшки. Сейчас rawr ставлю тупо в середину rclk, в теории может вызвать проблемы (нигде не нашел хоть намека как WD179x или ВГ93 декодирует mfm)
balu_dark
19.08.2011, 15:15
:) готов проверить еще и улучшенную версию. :)
balu_dark, текущую бы проверить :)
balu_dark
19.08.2011, 15:41
Счас проверю :) как раз ресторю диски свои , чтобы перегнать в TRD . Нашел некоторые версии Севастопольских товарищей.
---------- Post added at 14:38 ---------- Previous post was at 14:25 ----------
Не - что-то совсем не работает. даже на заведомо нормальных и только отресторенных дисках.
---------- Post added at 14:41 ---------- Previous post was at 14:38 ----------
Откатился обратно на версию от 17го - с ней все нормально.
или намудрил с wfde или все таки rawr надо обязательно двигать
balu_dark
19.08.2011, 16:46
Двигай :) мое дело - проверить :)
---------- Post added at 15:46 ---------- Previous post was at 15:44 ----------
Мне можно просто заслать несколько прошивок с разными вариантами - я их прогоню на одном и том же полу рабочем диске и скажу - какая лучше читает.
Если есть квартус можно ускорить процедуру, у меня 11 а он не умеет ACEX
solegstar
19.08.2011, 17:36
Вопрос - возможно вставить кусок схемы ФАПЧ Профи 5 и 32 байта прошивки РТ4 в прошиву Эвы?
0000: 08 08 04 ОC ОС 02 OA 06 . OD OB 03 07 OF OF 00 08
0010: 08 04 ОС 02 OA 06 OE 01 . 09 05 OD 03 OB 07 OF 00
Q1(12) -- D3 Соответствие
Q2(11) -- D2 выводов
Q3(10) -- D1 микросхемы
Q4( 9) -- D0
есть вариант этой прошивы для ATF22V10. Написано в ATMEL WinCUPL. Написаны номера ячеек по соответствию адресных линий, и потом идет обычное сложение этих ячеек по "ИЛИ" для каждого бита из четырех. Т.е. если ячейка меняет только один выход (допустим 00-я), то ячейка по адресу 00 со значением 08 записана только в 3 бите, если ячейка меняет все четыре выхода, допустим 1Е со значением 0F, то она записана во всех четырех битах. Проверил в симуляторе WinCUPL по входам/выходам всё соответствует прошиве. Мне показался это самый простой вариант "в лоб" как говориться :)
Ниже текст этого безобразия:
Name fapch;
Partno 1;
Revision 01;
Date 04/04/2011;
Designer solegstar;
Company solegstar;
Location Profi3+;
Assembly DD17;
Device g22v10;
/*
* Inputs...
*/
Pin 1 = a0;
Pin 2 = a1;
Pin 3 = a2;
Pin 4 = a3;
Pin 5 = a4;
/*
* Outputs...
*
*/
Pin 17 = bit0;
Pin 18 = bit1;
Pin 15 = bit2;
Pin 16 = bit3;
/*
* Logic...
*/
c00 = !a4 & !a3 & !a2 & !a1 & !a0;
c01 = !a4 & !a3 & !a2 & !a1 & a0;
c02 = !a4 & !a3 & !a2 & a1 & !a0;
c03 = !a4 & !a3 & !a2 & a1 & a0;
c04 = !a4 & !a3 & a2 & !a1 & !a0;
c05 = !a4 & !a3 & a2 & !a1 & a0;
c06 = !a4 & !a3 & a2 & a1 & !a0;
c07 = !a4 & !a3 & a2 & a1 & a0;
c08 = !a4 & a3 & !a2 & !a1 & !a0;
c09 = !a4 & a3 & !a2 & !a1 & a0;
c0a = !a4 & a3 & !a2 & a1 & !a0;
c0b = !a4 & a3 & !a2 & a1 & a0;
c0c = !a4 & a3 & a2 & !a1 & !a0;
c0d = !a4 & a3 & a2 & !a1 & a0;
c0f = !a4 & a3 & a2 & a1 & a0;
c10 = a4 & !a3 & !a2 & !a1 & !a0;
c11 = a4 & !a3 & !a2 & !a1 & a0;
c12 = a4 & !a3 & !a2 & a1 & !a0;
c13 = a4 & !a3 & !a2 & a1 & a0;
c14 = a4 & !a3 & a2 & !a1 & !a0;
c15 = a4 & !a3 & a2 & !a1 & a0;
c16 = a4 & !a3 & a2 & a1 & !a0;
c17 = a4 & !a3 & a2 & a1 & a0;
c18 = a4 & a3 & !a2 & !a1 & !a0;
c19 = a4 & a3 & !a2 & !a1 & a0;
c1a = a4 & a3 & !a2 & a1 & !a0;
c1b = a4 & a3 & !a2 & a1 & a0;
c1c = a4 & a3 & a2 & !a1 & !a0;
c1d = a4 & a3 & a2 & !a1 & a0;
c1e = a4 & a3 & a2 & a1 & !a0;
c1f = a4 & a3 & a2 & a1 & a0;
bit0 = c08 # c09 # c0a # c0b # c0c # c0d # c17 # c18 # c19 # c1a # c1b # c1c # c1d # c1e;
bit1 = c05 # c06 # c07 # c09 # c0a # c0b # c0c # c0d # c13 # c14 # c15 # c16 # c1b # c1d # c1e;
bit2 = c02 # c03 # c04 # c07 # c08 # c0b # c0c # c0d # c11 # c12 # c15 # c16 # c19 # c1a # c1c # c1d # c1e;
bit3 = c00 # c01 # c03 # c04 # c06 # c08 # c09 # c0c # c0d # c0f # c10 # c12 # c14 # c16 # c18 # c1a # c1c # c1e;
Вопрос - возможно вставить кусок схемы ФАПЧ Профи 5 и 32 байта прошивки РТ4 в прошиву Эвы?
Вставить то можно, но смысл? у него же такие бока как и у фапч которые работают с текущим тактом, осталось только понять значения в табличке и пересчитать их под 28мгц
solegstar
19.08.2011, 17:50
Вставить то можно, но смысл? у него же такие бока как и у фапч которые работают с текущим тактом, осталось только понять значения в табличке и пересчитать их под 28мгц
ну это я предложил один из вариантов, который прорабатывал на замену РТ4, пока не запустил программатор РТ4...
Дык табличная версия по ВМГ есть и по моему должна работать.
Я, вот, домучал версию ZEKa в VHDLе , только, чёт не врублюсь деление на 2 и 4 надо вписать, но квактус ругает - простые числа делит, а переменную не хотит, читаю книгу по синтаксису... Пока сделал деление простым сдвигом. Судя по диаграммам всё ок, самый большой сдвиг не уменьшает полуволну RAWR менее 1.5 мс.
doorsfan
20.08.2011, 00:15
прикладываю psw boot, jemmini commander которые у меня стабильно вешаются при заливке в эву прошивки от 17.08
jemmini вешается при нажатии, например c (copy). В норме после нажатия на enter предлагается выбрать диск назначения.
psw boot вешается через долю секунды после запуска.
doorsfan
20.08.2011, 00:47
забыл уточнить: обе программы вешаются при выключенной турбе (при включенной jemmini на всех прошивках кричит о смене диска, psw бут вроде работает).
прикладываю psw boot, jemmini commander
А глюк кстати, не мой :) Прошил релиз от 11.06.11, скачанный вместе с сырками из гуглокода - те же яйца. ща попробую прошить с оффсайта.
Димка, просьба попробовать мою разработку фапча, дай ка своё мыло, иди в аське покажись.
lisica, нееее... я спать уже, только найду квактус 9 с поддержкой ацексов, а то их уже альтера позабыла в новых версиях :)
Прикольно понаблюдать как работает фапч на разных импульсах rawr...
Вот, диаграммы работы на импульсах 1т, 1.5т,2т, соответственно 4, 6, 8 мс.
Дмитрий, кстати, в почту глянь.
doorsfan
20.08.2011, 19:00
А глюк кстати, не мой :) Прошил релиз от 11.06.11, скачанный вместе с сырками из гуглокода - те же яйца. ща попробую прошить с оффсайта.
а прошивка, скачанная с nedopc.com такого глюка не имеет, верно?
doorsfan, не внимательно посмотрел, за 11.06 на гуглокоде 2 релиза, как раз бинарник от второго соответствует бинарнику на оффсайте. Ща квартус поставлю и скомпилю.
только найду квактус 9
Кстате в 9м нету Ацекса, у меня стоит 9.1 переискал все девайсы - нету
lisica, именно в 9.0 есть ;) А в 9.1 нету :-P
---------- Post added at 23:28 ---------- Previous post was at 22:57 ----------
doorsfan, balu_dark, ребята, пересобрал прошивку на якобы стабильном релизе прошивки эвы, адреса закинул в ЛС. Сам только что проверил - работает Jemmini.
doorsfan
21.08.2011, 00:42
СПАСИБО! psw boot тоже заработал. теперь, можно выслать (если ZEK не против) lvd оформленный (колбаской) патч, чтобы он включил его в current.
doorsfan, ZEK говорит, что в этой версии фапча есть глючок, он обещал его пофиксить.
solegstar
09.09.2011, 11:54
doorsfan, ZEK говорит, что в этой версии фапча есть глючок, он обещал его пофиксить.
апну темку! Чем дело закончилось или пока перерыв?
Даже мой фапч некому проверить...
balu_dark
10.09.2011, 03:59
ну я проверял последний Димын - а твой где? ты не присылал! Да и пока - завал на работе. Времени тестить ничего не будет в ближайшее время :(
а твой где?
Мои де версии у Дмитрия, так как я в верилоге не шарю - он обещал прикрутить и проверить, или тебе с Юрой отослать на проверку, видать совсем некогда...
doorsfan
10.09.2011, 10:33
готов как пионер
он обещал прикрутить и проверить
да я не проверяю а на диаграммы смотрю, полноценной проверки нет так как не допишу mfm декодер тогда была бы проверка, проверять чушой не зная узких мест сложно, не знаеш куда смотреть.
или тебе с Юрой отослать на проверку
Для пентевы обычный фапч не подходит, надо фапч работающий на 28МГц (не кратной 4МГц)
да я не проверяю а на диаграммы смотрю
Я о Дмитие говорил.
Для пентевы обычный фапч не подходит, надо фапч работающий на 28МГц
он как раз у меня на 28мц
Пробило перед сном
фапч 28мгц, классика без левых обработок, с нормальным меандром rclk
module pll28(
input wire clk, // 28mhz
input wire rddat,
output reg rclk,
output reg rawr
);
reg [5:0] counter = 0;
wire[5:0] delta = 27 - counter;
wire[5:0] shift = { delta[5], delta[5], delta[4:1] }; // sign div
wire[5:0] inc = rawr_sr[1:0] == 2'b10 ? shift : 1;
reg [3:0] rawr_sr;
always @ (posedge clk)
begin
rawr_sr <= { rawr_sr[2:0], rddat };
rawr <= !(rawr_sr[3] && !rawr_sr[0] ); // rawr 100ns
end
always @ (posedge clk)
begin
if (counter < 55)
counter <= counter + inc;
else
begin
counter <= 0;
rclk = ~rclk;
end
end
endmodule
Флудерам вот сюда (http://www.zx-pk.ru/showthread.php?t=16780). Я уже пошел.
При чистке срача под нож ушло слегка не срач. Переспостю
Сообщение от CHRV
Но надеюсь ZEK всетаки ответит в мыло и я тогда тестовую сборку сделаю.
Мыл никаких не получал, если там запрос на использование, копирайтов никаких не ставил, достояние общественности
ZEK, ты не против, если я в новую сборку СкорпЭвы прикошачу твой ФАПЧ?
Если да, то кинься пожалуйста последней проверенной версией в ewgeny7(гаф-гаф)speccy.su
СкорпЭвы прикошачу твой ФАПЧ?
юзайте кто хочет, я же написал некопирсатил, хотите переименовывайте хотите свои копирайты ставьте, хотите меняйте, все равно. Какой последний проверенный незнаю у Дмитрия спроси, или можешь последний проверить, он либо будет работать либо вообще ничего читаться не будет
можешь последний проверить, он либо будет работать либо вообще ничего читаться не будет
Угу, спасибо. Уже привинтил к проекту, буду дома посмотреть. Если дискеты найду...
буду дома посмотреть. Если дискеты найду...
Проверил. Это просто чудо, какая разница. Запоротый диск (Эва его не могла ни прочитать, ни форматировать) отформатировался на ура, записался и читается :)
Ewgeny7, чудо в другом, что с фапчем эва может 20летней давности диски и без ЕпсонСД700 читать успешно :)
Запоротый диск (Эва его не могла ни прочитать, ни форматировать) отформатировался на ура
это поверхность помята и/или потянута, и из за фазовых искажений родной диск может не читаться
уже три дискеты "оживил". Модуль принят на вооружение :)
balu_dark
12.09.2011, 20:42
А можно бинарник на ЭВУ ????
А можно бинарник на ЭВУ ????
(гнусаво) "Эво - это плата с микросхемами, именуемая также девбордой"
А можно бинарник на ЭВУ ????
Почаще читайте форум разработчиков Евы ;)
http://forum.nedopc.com/viewtopic.php?f=30&t=826
А кто же мой проверит? А то я мучаюсь - заработает аль нет...
balu_dark
13.09.2011, 01:16
(гнусаво) "Эво - это плата с микросхемами, именуемая также девбордой"
Хто хател тот понял правильно! ;) :v2_dizzy_vodka2:
---------- Post added at 00:16 ---------- Previous post was at 00:15 ----------
Почаще читайте форум разработчиков Евы ;)
http://forum.nedopc.com/viewtopic.php?f=30&t=826
Гы Гы а хтож от них такого подвига ожидает то? я поэтому захожу туда не чаще раза в месяц. Но спасибо за ссылочку :)
Рискну передать месседж :)
2ZEK: объявись в forum.nedopc.com, будешь свой код фиксить :)
balu_dark
13.09.2011, 06:41
Потестил бин лежащий на недофоруме. Глюк - читает только первый сектор с дорожки - далее сплошной сбой.
---------- Post added at 05:41 ---------- Previous post was at 05:38 ----------
(гнусаво) "Эво - это плата с микросхемами, именуемая также девбордой"
Жень - а дай плиз на свою плату с микросхемами называемую девбордой. бины для скорпового конфига с фапчем. А то есть куча дисков на тестирование :)
Глюк - читает только первый сектор с дорожки - далее сплошной сбой
Есть возможность померить длину импульсов rddat с дисковода? А то второй фапч и не работает... есть подозрение что импульсы короткие с дисковода (или наоборот иголки проскакивают), если из за этого плющит, можно улучшить чувствительность к rddat и слегка фильтровать иглы.
balu_dark
13.09.2011, 13:27
Да - сегодня гляну осциллографом - напомни на какой ноге разъема смотреть? (Лень в схему лезть)
balu_dark
14.09.2011, 02:57
Короче так как никто не отвечал - глянул в схему - если правильно понимаю и данные приходят на 27ю ноги - то в аттаче осцилограмы работающего фапча и безработного - из бинарника на недопц.
Развертку не менял чтобы было виднее - поэтому на одном скрине нет параметров.
аттаче осцилограмы работающего фапча и безработного
что значит работающего и безработного? читает / не читает?
Из скринов не ясно длительность импульсов
данные приходят на 27ю ноги
27 ноги кого?
balu_dark
14.09.2011, 12:08
27я нога ВГ93 :) об этом ясно даже из названия файла :)
сейчас буду сказать по картинке длительность. Но помоему исходя из картинки и значения развертки это 1 мили секунда. Суть в том что при прочих равных - в работающем фапче - за период проходит только один импульс а в неработающем - 2!!!
27я нога ВГ93 об этом ясно даже из названия файла
аа....
но это не то, я имел ввиду от дисковода сигнал а не от плис
длительность импульса на скриншоте 107нс примерно
период проходит только один импульс а в неработающем - 2!!
там на законных основаниях может быть период 2/4/6мкс
balu_dark
14.09.2011, 13:39
Кстати вопрос - а зависит ли этот клок от частоты тактирования вг? а то помнится с какойто целью делалось переключение тактовой частоты ВГ шки. по идее и фапч это как то должон учитывать?
В аттаче 2 скрина двух измерений - на последнем есть параметры сигналов.
по идее и фапч это как то должон учитывать?
Не должен, клок может переключаться только в одном случае, при операциях step
Я сырки пентевы особо не рассматривал, если там турбированый bdi клок переключается, но на чтение никак не влияет
balu_dark, частота переключается в момент позиционирования МГ, при чтении/записи на стандартном TR-DOS контроллере частота 1МГц.
balu_dark
14.09.2011, 13:50
у меня оно 2 Мгц даже в режиме ожидания! и при работе помоему тоже - всегда 2 мгц( переключения не видно никакого).
Гляньте я там положил скрины сигнала с дискогрыза.
balu_dark
14.09.2011, 13:58
Гхм - счас еще раз посмотрел - она сейчас постоянно 1мгц. ниче не понимаю :(
---------- Post added at 12:56 ---------- Previous post was at 12:55 ----------
Конфиг счас вроде недопцшный - ибо ниче не читает
---------- Post added at 12:58 ---------- Previous post was at 12:56 ----------
Не должен, клок может переключаться только в одном случае, при операциях step
Я сырки пентевы особо не рассматривал, если там турбированый bdi клок переключается, но на чтение никак не влияет
Почитал счас ваше общение на их форуме - может дело в инверсии клока?
может дело в инверсии клока?
может если rddat с дисковода длинный
balu_dark
14.09.2011, 15:06
ну rddat - глянь в одном из предыдущих сообщений в аттаче - я его на разьеме мерял.
вроде нормально, логического анализатора в духе usbee нет?
balu_dark
14.09.2011, 16:04
есть с этим осцилографом.
Тока че им сканить если вроде этот рдат не синхронный?
синхронность не причем
для диагностики хорошо бы было увидеть сет из
rddat от дисковода
rawr от вг93
rclk от Вг93
index
irq от вг93
ну и clk от вг93
и попробовать почитать дорожку, записать хотя бы пару секунд
выложить сюда запись и ссылку на программу смотрелку записи
balu_dark
14.09.2011, 16:19
Ты напиши какие сигналы интересуют и те которые на ВГ93 - дай номера пинов. Я вечерком сделаю сканы. только надо придумать в чем их сохранять и чем потом смотреть. Rigol вроде имеет свой формат но позволяет и конвертить во что-то.
---------- Post added at 15:19 ---------- Previous post was at 15:17 ----------
Опередил меня :) Сигналы смотреть по схеме эвы? а то на разных схемах все по разному зовется.
вообще перед извращениями хорошо бы посмотреть на поведение без лишней инверсии rddat
balu_dark
14.09.2011, 16:23
нене - я про то что они нашли левую инверсию в своих сырках - мне пока собирать нечем - посему могу только готовое тестить.
balu_dark
14.09.2011, 21:20
Так - я сорри но аналайзера не будет до воскресенья! :( блок анализатора со шлейфом и щупами завален счас коробками и влезть до вечера субботы туда нереально :( .
но аналайзера не будет до воскресенья!
попробуй бинарник с форума недопц, CHRV пофиксил rdat
balu_dark
14.09.2011, 23:42
я уже там отписалсо - к сожалению вопреки ожиданиям - не заработало :( Потруси Дмитрия - какой бинарник он мне последним присылал который работает? кто его создавал?
Если осцил двухлучевой - сними rdat и rawr с вг93, чтоб одновременно. А то так вы ничё не поймёте.
Потруси Дмитрия
Не надо меня трусить, после командировки и так трусит :) Во вложении архив с файлами из проекта под ревизию r439, сборку которой я тебе присылал.
такое ощущение что дисковод быстрее чем надо крутит, в этой версии сделан rclk чисто тестовый, бага в том что он короче чем нужен...
balu_dark, а ты на одном дисководе проверял? можно померить частоты сигнала index c дисковода
---------- Post added at 09:20 ---------- Previous post was at 08:46 ----------
Есть еще одно отличие, может даже более существенное, в новой pll длительность rawr 107нс (минимальная по даташиту), в той что работала у balu_dark 140нс, может из за разброса характеристик ВГ такой прикол.
Стяну квартус старый соберу бин
По просьбе Димы собрал 2 версии с фапчем на релизе 439, у кого есть возможность - протестируйте, сам смогу тока вечером.
По просьбе Димы собрал 2 версии с фапчем
А по моей просьбе слабо собрать мою вторую версию? (для проверки)
lisica, не слабо, но времени мало, да и на работе твоих модулей нет.
lisica, держи
Людиииии!!!!! Проверьте, плиз, а то месяц уже не проверен...
balu_dark
15.09.2011, 15:42
"Тащите все - магарычи на мой порог" (с) Сектор Газа
:)
Сейчас проверю все - без паники :)
---------- Post added at 14:42 ---------- Previous post was at 14:36 ----------
такое ощущение что дисковод быстрее чем надо крутит, в этой версии сделан rclk чисто тестовый, бага в том что он короче чем нужен...
balu_dark, а ты на одном дисководе проверял? можно померить частоты сигнала index c дисковода
---------- Post added at 09:20 ---------- Previous post was at 08:46 ----------
Есть еще одно отличие, может даже более существенное, в новой pll длительность rawr 107нс (минимальная по даташиту), в той что работала у balu_dark 140нс, может из за разброса характеристик ВГ такой прикол.
Стяну квартус старый соберу бин
Ну дисковод вряд ли гонит со скоростью - это TEAC 720k снятый со "Скорпион"а тоесть заведомо не замедленный 1.2М.
частоту индекса померюю но вечером - счас подготовка к сабантую тут. Прошивки я втихаря смогу потестить, а если включу осциллограф - получу по голове что не помагаю :)
Кстати а если сделать rawr не минимальным а чуть длиннее - ведь пограничные параметры это всегда не хорошо - на них всегда будут глюки. Сместить бы в средину диапазона.
Прошивки я втихаря смогу потестить, а если включу осциллограф - получу по голове что не помагаю
Эх.. знакомая ситуёвина :)
balu_dark
15.09.2011, 15:58
Первый результат : сразу говорю что тестил на том диске который отбраковал последний недо пцшный бин с фапчем - ошибки чтения с первых треков.
Lisica бин не заработал - теже глюки что и у недопц.
версия 3 заработала.
Остальное продолжим.
Сместить бы в средину диапазона.
я увеличил до 140нс, в середину плохо, шем шире rawr тем меньше места для маневра, потести v4 тогда будет ясно из за чего не работало
Потом я сделаю v5 проверим и я выложу сырки
balu_dark
15.09.2011, 16:25
или показалось или версия 4 стабильнее 3й - диск который не переводился на 3й - на 4й прошел нормально. Сейчас форматирую тестовый диск - тоже норма.
тогда получается трабла 100% была в длительности rawr
balu_dark
15.09.2011, 16:41
Осталось добавить триггер и фильтр доделать. :)
Lisica бин не заработал - теже глюки что и у недопц.
А можно осциграммы, желательно двумя лучами.(чтоб глянуть как и когда RCLK относительно RAWR)
balu_dark
15.09.2011, 16:52
Да. Только вечером.
триггер и фильтр доделать
фильтр это цепочка триггеров, так что только фильтр, я его нарисовал, гоняю на тестбенче загаженым помехами
balu_dark
15.09.2011, 18:14
Засрать помехами - лучше чем реальная дискета ничто не сможет :)
Фантазии может не хватить придумать помеху которая может образоваться на диске пролежавшем 15-20 лет :)
Засрать помехами - лучше чем реальная дискета ничто не сможет
если тестбенч не пройдет то дисковод темболее
а по поводу помех :) на скрин глян.
То что за*****е это типа поток от дисковода
Ewgeny7 погоняй на скорпэве, Дмитрий завтра появиться попробуем попросить его собрать бин для пентевы
`timescale 1ns/10ps
module pll28(
input wire clk, // 28mhz
input wire rddat_n,
output reg rclk,
output reg rawr_n
);
// filter
reg [3:0] sr;
reg rawr_sync;
always @ (posedge clk)
begin
sr <= { sr[2:0], rddat_n };
if (sr == 4'hF || sr == 4'h0)
rawr_sync <= sr[3];
end
// rawr
reg [4:0] rawr_sr;
always @ (posedge clk)
begin
rawr_sr <= { rawr_sr[3:0], rawr_sync };
rawr_n <= !(rawr_sr[4] && !rawr_sr[0] ); // rawr 140ns
end
// rclk
reg [5:0] counter = 0;
wire[5:0] delta = 27 - counter;
wire[5:0] shift = { delta[5], delta[5], delta[4:1] }; // sign div
wire[5:0] inc = rawr_sr[1:0] == 2'b10 ? shift : 1;
always @ (posedge clk)
begin
if (counter < 55)
counter <= counter + inc;
else
begin
counter <= 0;
rclk = ~rclk;
end
end
initial
rclk = 0;
endmodule
balu_dark
15.09.2011, 19:16
Оки - ждем до завтра. Лисице осцилограмки дам часов после 9 вечера.
Дмитрий завтра появиться попробуем попросить его собрать бин для пентевы
Завтра можете и попросить, а я сегодня сделаю :-P
ZEK, ты как всегда все переменные попереименовывал :)
balu_dark
15.09.2011, 21:21
Счас попозжа проверю - заканчиваю переводить диски в трд
v5 тоже работает, а вот сравнить разные версии пока не могу - дите требует внимания.
а вот сравнить разные версии пока не могу
Вы сравните, найдите диск который туго читается со второго, третьего раза, понадобятся для теста конвеерного pll
ZEK, есть диск, который туго читается вовсе :) сейчас доделываю свой плагин для RealCommander-а, который форматит и проверяет дискеты, причем он будет выдавать репорт с количеством попыток чтения каждого сектора (понадобился для проведения анализа качества работы ФАПЧей на разных клонах :) ).
balu_dark
16.09.2011, 01:25
Особых изменений на 5й версии не заметил если честно.
я просто делаю так - прошиваю конфиг и начинаю сливать фаталом с диска в трд.
диски которые читаются с ошибками откладываю в одну кучку - без ошибок - в другую.
с новой версией - беру пачку ошибочных и пробую опять. как правило ошибок становится либо меньше либо уходят совсем. в отвал опять уходят ошибочные диски -ждут новую версию ФАПЧ. И так по кольцу.
Лисица - я конечно сорри ( может уже упареный) но визуально - особой разницы не вижу между твоим фапчем и ZEKa .
Картинки в аттаче.
Вернее вижу 2 разницы - е него работает и клок есть всегда, а твой не работает и клок только во время чтения появляется.
P.P.S я конечно сорри за такой монолог одного актера (решил добавлять к старой месаге и не плодить кучу).
говорю же - был запарен - развернул чуть картинку и увидел что часть данных у тебя идет мимо кассы - смотри архив с названием глюк. Видно что часть импульсов проходит не в нужное время - когда клок в еденице. сейчас еще раз загрузу конфиг 5 и гляну что у него.
Да - у него все четко попадает при нуле на клоке. а у тебя часть импульсов идет в другое время.
не в нужное время - когда клок в еденице
они могут при любом состоянии клока приходить, там главное что бы rawr был как можно ближе к середине rclk, rclk задает битовый темп, 1 смена лог уровня клока на 1 бит
клок есть всегда,
WFDE, когда в 1 то блокирует его.
Видно что часть импульсов проходит не в нужное время - когда клок в еденице.
Так и должно быть
У меня RCLK на грамульку меньше (как в описаниях - 125мс). Может из за этого и не работает? Попробую увеличить его.
PS А самое лучшее проверять осцилом, записав на трек все 11111111, после все 000000000, потом 10101010. Есть утилитка такая что это умеет, у меня она обзывается ustir1.0, Я её немного переделал на ustir1.1, а то надоело за головкой гоняться по диску из за ошибок.
PPS
там главное что бы rawr был как можно ближе к середине
В диаграмме описано, что ближе к концу.:confused:
В диаграмме описано, что ближе к концу.
это пример, на этой диаграмме нарисовано 2 ситуации
В даташите на wd1793 написано что rclk должен отступать от rawr минимум на 40нс
если думать логически и отодвинуть максимально фронты rawr от rclk то получается что rawr должен находиться в середине rclk, думаем дальше - нам надо устойчивый фапч то есть что бы он мог реагировать на как можно большее отклонение rawr от положенного места, для этого rawr опять же надо поставить в середину что бы было как можно больше запаса для фазовых бросков как вперед так и назад.
блин, застопорился на времени rawr, никак не могу его чюточки увеличить...
balu_dark
16.09.2011, 18:10
так покажи свой код - попытаемся сравнить его с последним от ZEK. бо он тоже воевал с этим.
так покажи свой код - попытаемся сравнить его с последним от ZEK.
Попробуй сравнить vhdl и verilog...
Я, например, в ZEKовом коде ничё не понял...
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.numeric_std.ALL;
entity fapch is
port(
f28 : in std_logic;
rdat : in std_logic;
wf_de : in std_logic;
del1: buffer std_logic_vector(2 downto 0);
rclk : buffer std_logic;
rawr : buffer std_logic
);
end fapch;
architecture fapch_arch of fapch is
signal rd1: std_logic;
signal rd2: std_logic;
signal fa: std_logic_vector(4 downto 0);
signal del: std_logic_vector(1 downto 0);
signal f8: std_logic;
signal ff: std_logic;
--signal del1: std_logic_vector(2 downto 0);
begin
ff <= f28 xor fa(0);
f8 <= del(1);
process(ff)
begin
if (ff'event and ff='0') then
del <= del + 1;
end if;
end process;
process(f8,rdat,rd1)
begin
if (f8'event and f8='0') then
if rdat = '0' then
rd1 <= '1';
else
rd1 <= '0';
end if;
end if;
end process;
process(f8,rd1,rd2)
begin
if (f8'event and f8='0') then
if rd1 = '1' then
rd2 <= '0';
else
rd2 <= '1';
end if;
end if;
end process;
rawr <= '0' when wf_de = '0' and (rd1 = '1' and rd2 = '1') else '1';
process(f8,rawr)
begin
if (f8'event and f8='0') then
if rawr = '0' then
if fa(3 downto 0) < 3 then
fa(3 downto 0) <= fa(3 downto 0) + 4;
elsif fa(3 downto 0) < 5 then
fa(3 downto 0) <= fa(3 downto 0) + 3;
elsif fa(3 downto 0) < 7 then
fa(3 downto 0) <= fa(3 downto 0) + 2;
elsif fa(3 downto 0) = 7 then
fa(3 downto 0) <= fa(3 downto 0) + 1;
elsif fa(3 downto 0) > 12 then
fa(3 downto 0) <= fa(3 downto 0) - 3;
elsif fa(3 downto 0) > 9 then
fa(3 downto 0) <= fa(3 downto 0) - 2;
elsif fa(3 downto 0) > 8 then
fa(3 downto 0) <= fa(3 downto 0) - 1;
end if;
else
fa <= fa +1;
end if;
end if;
end process;
process(rclk)
begin
if wf_de = '0' then
rclk <= not fa(4);
else rclk <= '1';
end if;
end process;
end fapch_arch;
Вот, смотрите, жирным собсно формирование 125 мс как на схеме...
balu_dark
16.09.2011, 20:12
Ага - ок. распечатаю и сравню попозже - счас пока загружен работой.
Частота клока в этой машине как и у эвы - 28 Мгц?
Частота клока в этой машине как и у эвы - 28 Мгц?
Ага, вход 28мц
Сравнил последний свой фапч и твой
ну из того что бросается в глаза, у меня чуть шустрее выравнивает фазы, и при резких броска у тебя прилипает rawr к rclk, у меня делает отступ (по даташиту он обязателен).
Ну и длительность rawr
у меня чуть шустрее выравнивает фазы,
Ну, это поправимо.
при резких броска у тебя прилипает rawr к rclk, у меня делает отступ
А здесь как? Запоминать RDAT и выставлять его позже?
А вдруг это предыдущий опоздал, или следующий слишком рано прошёл в какую сторону двигать?
Или вы хотите окончательно нечитаемые дискеты чтоб заработали?
Лучше подскажите как импульс RAWR увеличить...
Лучше подскажите как импульс RAWR увеличить...
у меня просто, он формируется на сдвиговом регистре, чем длинней регистр тем длиннее rawr, сделай себе так же
Прошу Дмитрия сделать сборку для проверки.
Увеличил RAWR до 142нс и немного ускорил смещение к середине.
Исправил очепятку длины :)
Чёт совсем затихло. Дим, как там, собрал\проверил, или как?
WingLion
13.10.2011, 20:32
эх, давно не брал я в руки шашку...
Идея такая...
Счетчик/делитель на частоту считывания с дисковода, с фазовым корректором.
На VHDL это выглядит примерно так:
--- заголовки для ясности пропущены
constant phase_level : integer := 128; -- уровень привязки фазы - надо подбирать
constant NN : integer := 4; -- чувствительность -
-- число равное степени двойки, чтобы не усложнять схему.
-- 1 - жесткая привязка
-- 2 - средняя привязка
-- 4 - мягкая привязка
-- подбирать опытным путем или делать настраиваемо
constant frq : integer := 14; -- число считается как frq = Fread*256/Fclk
signal ct : integer range 0 to 255;
signal outCLK : integer range 0 to 1;
begin
process (clk) begin
IF clk'event and clk = vcc THEN
-- приходит импульс (его надо сузить до длины в один период clk)
IF impuls = vcc THEN
ct <= ct + frq + (Phase_Level - ct)/NN;
ELSE
ct <= ct + frq;
END IF;
outCLK <= ct / 128;
END IF;
end process;
end;
Прошил сегодня zxevo_fw_apll_v5.rar и перегнал около сотни дискет.
Субьективно ничего не изменилось, по прежнему спасает только правая рука и смена дисковода... (и то увы не всегда) .
Зависит от того с чем сравнивать
спасает только правая рука
гм... а что ты ей делаешь, простите за вопрос? ;)
SoftFelix
23.11.2011, 14:10
Сообщение от newart Посмотреть сообщение
спасает только правая рука
гм... а что ты ей делаешь, простите за вопрос?
Можно я отвечу? Спасибо. Я думаю, newart использует правую руку в этом процессе, так же, как и я (очень надеюсь, что и многие другие Спектрумисты). Нежно и ласково тереблю дискетку в дисководе, как бы чуть вынул, а потом чуть вставил.... И так многократно. Простые движения. Очень помогает скрасить досуг при чтении плохочитаемых дисков.
doorsfan
23.11.2011, 18:13
ещё практикуется кручение защёлки дисковода правой рукой
ещё практикуется кручение защёлки дисковода правой рукой
как я отстал от жизни... Или наоборот??? Я с 1997 года не крутил ручку дисковода... Только иногда нажимал кнопу на трёхдюймовике. Да и то последние года два забыл как дисковод выглядит :)
Зависит от того с чем сравнивать
По прежнему очень много бэдов, которых получается избежать дерганьем ручки дисковода.
Возможно ли это как то автоматизировать? Скажем взять вибратор от телефона и посадить сверху на головку?..
получается избежать дерганьем ручки дисковода
ты когда ручку дергаешь, диск на шпинделе в другом месте фиксируется, 0.5мм перекоса с головой достаточно что бы попасть на/мимо дорожки. Это косяк юстировки и фапч никакой не поможет
Это косяк юстировки
Ну вот я и размышляю, как бы его автоматизировать, что бы не сидеть пол дня с протянутой к дисководу рукой.
Ну вот я и размышляю, как бы его автоматизировать
а ни как
правильно надо юстировку крутить
CodeMaster
24.11.2011, 16:24
правильно надо юстировку крутить
А если диск уже с непрвильной записан?
А если диск уже с непрвильной записан?
вот для этого и надо крутить, пока не прочитает, и крутить лучше подключившись осцилом к усилку головки, и крутить пока максимальная амплитуда импульсов не вылезет
вот для этого и надо крутить, пока не прочитает, и крутить лучше подключившись осцилом к усилку головки, и крутить пока максимальная амплитуда импульсов не вылезет
Что бы потом нормальные диски перестали читаться? :)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot