Page 1 of 6

VG93 digital ФАПЧ by ZEK

PostPosted: 12 Sep 2011, 10:32
by CHRV
Интегрировал сабж. Огромное спасибо ZEK.
Всем кто пользуется ахтунг-дискетами особено 5.25 - тестирен нах!!!
vg93pll_zek3.zip
(39.95 KB) Downloaded 217 times

Re: VG93 digital ФАПЧ by ZEK

PostPosted: 12 Sep 2011, 11:13
by breeze
CHRV wrote:Интегрировал сабж.


В svn это уже есть? а то я собираю со своей конфигурацией клавы :smoke:

Re: VG93 digital ФАПЧ by ZEK

PostPosted: 12 Sep 2011, 12:27
by lvd
TS-Labs wrote:Было бы мегаинтересно глянуть в сорцы.

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

Re: VG93 digital ФАПЧ by ZEK

PostPosted: 12 Sep 2011, 16:29
by lvd
TS-Labs wrote:На АТМ-ах так же?

Как на атмах, читай у рюрикарюмика.

Re: VG93 digital ФАПЧ by ZEK

PostPosted: 12 Sep 2011, 18:52
by deathsoft
TS-Labs wrote:На АТМ-ах так же?

На АТМ2 автомат на озу (РУ2), там можно сделать как угодно.

Re: VG93 digital ФАПЧ by ZEK

PostPosted: 12 Sep 2011, 18:53
by deathsoft
lvd wrote:Как на атмах, читай у рюрикарюмика.

http://vtrdos.ru/book/DISKCONT.ZIP

Re: VG93 digital ФАПЧ by ZEK

PostPosted: 13 Sep 2011, 16:21
by ZEK
CHRV wrote:Интегрировал сабж.

Посмотрел в svn, там инвертирован rdat_n в строке
rawr_sr <= { rawr_sr[2:0], ~rdat_n };
у меня порты модуля по каралечному названы, суффиксы отрицательности сигнала не ставил
в общем модуль ожидает что rdat_n это отрицательные импульсы (какими приходят с дисковода), глянул в схему вроде полярность сигнала не меняется
инверсия лишняя и должно быть
[vg39.v:314]
rawr_sr <= { rawr_sr[2:0], rdat_n };

Re: VG93 digital ФАПЧ by ZEK

PostPosted: 13 Sep 2011, 20:32
by lvd
ZEK. если не возражаешь, приступим к разбору говнокода :)

1.
Code: Select all
   reg [5:0] counter = 0;

Это не говнокод, но такая запись играет роль только при СИМУЛЯЦИИ (например, в моделсиме), означает, что регистр устанавливается в 0 ещё до нулевого момента времени и выполнения всех initial'ов. При синтезе квартусом игнорится.

2.
Code: Select all
   wire[5:0] inc   = rawr_sr[1:0] == 2'b10 ? shift : 1;
...
   vg_rawr <= !(rawr_sr[3] && !rawr_sr[0] ); // rawr 100ns

Вот это уже говнокод. Дело в том, что сигнал rdat_n полностью асинхронный относительно клока, и потому перед использованием должен пересинхронизироваться. Пересинхронизация делается путём пропускания сигнала через ДВА (или больше) триггера. У тебя он используется после пропускания только через один триггер.

Ещё непонятно, что означает "rawr_sr[3] && !rawr_sr[0]". Почему нельзя написать просто rawr_sr[3] && !rawr_sr[2] (выделение нужного фронта)? Но может тут я просто не догоняю глубинного смысла...

И ещё. Чем не устраивает предварительный фильтр на сигнал rdat (в моём коде со слов digital filter и до assign rdat = )? Он позволяет не реагировать схеме на импульсы-помехи длительностью менее 4 тактов 28мгц. Или такое не нужно?

Re: VG93 digital ФАПЧ by ZEK

PostPosted: 13 Sep 2011, 21:33
by CHRV
ZEK wrote:Посмотрел в svn, там инвертирован rdat_n в строке

Сорри, это я накосячил.
Вы это разберитесь с lVD, чую клево все будет :).

Re: VG93 digital ФАПЧ by ZEK

PostPosted: 13 Sep 2011, 23:31
by ZEK
CHRV wrote: чую клево все будет

мелочи, 10 строк кода можно обсуждать 2 недели, особенно когда в одной синтаксической конструкции по несколько вложенных смыслов.
lvd wrote:Это не говнокод, но такая запись играет роль только при СИМУЛЯЦИИ (например, в моделсиме)

ну так я не спорю, у меня эвы нет я в Active-HDL на тестбенче (в котором кода раз в 30 больше чем в модуле) гонял.
lvd wrote:пересинхронизация делается путём пропускания сигнала через ДВА (или больше) триггера.

ога, первый триггер вгоняет в клоковый домен остальные просто задерживают, я сигнал делаю синхронным и заодно двигаю по сдвиговому регистру, а гистересизы и прочая лабуда в данном конкретном месте вообще ни на что не влияет, да и клоковый домен в по цепи прохождения сигнала только один. Хотя положа руку на сердце скажу что можно в сдвиговый регистр добавить еще пару бит, что бы в самых тяжелых случаях отодвинуть rawr от rclk больше чем на 40нс (так хочет wd1793 по даташиту)

это говнокнструкция в которую вложено пару смысловых нагрузок (синхронизация, выделение фрона)

lvd wrote:что означает "rawr_sr[3] && !rawr_sr[0]". Почему нельзя написать просто rawr_sr[3] && !rawr_sr[2] (выделение нужного фронта)?

а это очень просто
смотри по времени на сдвиговый регистр в момент прихода rddat (каждая строка новый клок 28мгц), регистр двигается влево
rawr_sr = 4'b1111; rawr_sr[3] && !rawr_sr[0] = 0
rawr_sr= 4'b1110; rawr_sr[3] && !rawr_sr[0] = 1
rawr_sr = 4'b1100; rawr_sr[3] && !rawr_sr[0] = 1
rawr_sr= 4'b1000; rawr_sr[3] && !rawr_sr[0] = 1
rawr_sr= 4'b0000; rawr_sr[3] && !rawr_sr[0] = 0
....
rawr_sr= 4'b0001; rawr_sr[3] && !rawr_sr[0] = 0

получаем получем из сдвигового регистра 3 смысловую нагрузку, формирователь rawr длительность 3 такта 28Мгц, что чуть больше 100нс

lvd wrote:Чем не устраивает предварительный фильтр на сигнал rdat

ни чем не неустраиват, я его нигде не выкусывал
lvd wrote:длительностью менее 4 тактов 28мгц.
,
а вот 4 такта мне кажется много, по дисководам разброс rdat от 100нс до 1.5мкс 2(мож даже 3) такта 28мгц самый раз (хотя лично сам даташиты на дисководы не перебирал, мож рюмику или атаривскому сайту сильно доверился)

как то так