(no subject)

Feb 19, 2014 22:00

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

Но у нас дизайн не просто асинхронный, а вообще непонятно как работающий. Регенерация может приспичить в момент активного цикла шины, который прервать нельзя и задерживать тоже не хотелось бы, поэтому флаг может трепыхаться на ветру довольно заметное время, пока цикл шины не закончится и можно будет перевести дыхание.
При этом на собственно регенерацию тоже требуется некоторое количество тактов tREFRESH.
Итогом всей этой неописуемой красоты является то, что вместо регламентируемого максимального времени между приступами регенерации в 7.81мкс мы имеем НЕМНОЖЕЧКО больше. Оно бы и ничего, если циклы шины идут неплотно; ну уменьшим чуть-чуть время между приступами, чтобы учесть эти задержки. Но когда циклы идут плотно, то рано или поздно эти НЕМНОЖЕЧКИ накопятся так, что очередной приступ случится позже, чем надо. В результате с большой долей вероятности будет полностью или частично попорчен весь memory row.



На слайде хорошо видно, что счетчик регенерации, досчитав до нуля, какое-то время пребывает в нем, затем коматозится в состоянии занесения в него заново константы REFRESH_COUNT. А время-то, оно ж на месте не стоит.
В общем, нужно что-то как-то придумывать.

dram, zorro, fpga, photo, amiga

Previous post Next post
Up