Итак, во все мои модели процессоров встроен "дульный компенсатор" - специальный блок позволяет имитировать работу ядра на низкой частоте, при этом внешняя шина Wishbone продолжает работать на общей (высокой) частоте SoC, позволяя периферии (например, SDRAM) не замедляться.
Там есть такие сигналы:
// - vm_clk_p - processor core positive clock, also feeds the wishbone buses
// - vm_clk_n - processor core negative clock, should be vm_clk_p 180 degree phase shifted
// - vm_clk_ena - slow clock simulation strobe, enables clock at vm_clk_p
// - vm_clk_slow - clock mode selector, enables clock slowdown simulation,
// the external I/O cycles is launched with rate of vm_clk_ena
vm_clk_p - позитивный клок процессорного ядра, сюда постоянно подается высокая частота (50-100MHz), и на ней работает системная шина (Wishbone)
vm_clk_n - негативный клок процессорного ядра, для внутренних нужд, просто инвертированный vm_clk_p (я предпочитаю снимать с PLL с фазой 180)
vm_clk_slow - это селектор режимов, если низкий уровень, то это "turbo", дульный компенсатор отключен, все блоки ничего не ждут, работа на максимальной частоте. Если уровень высокий, то включается специальный блок замедления. Есть специальный двунаправленный счетчик, он считает такты высокой частоты на сложение и низкой частоты (задается входом, описанным ниже) на вычитание, в момент когда ядро хочет выполнить ввод-вывод на шине - оно останавливается и счетчик перестает считать высокую частоты на сложение, работает ТОЛЬКО вычитание. По достижению счетчиком нуля - ядро разблокируется и выполнятся цикл ввода-вывода. Снаружи это выглядит так, как циклы эмитированы процессором, работающим на малой частоте. Сам ввод-вывод выполняется на полной скорости, не внося проблем в работу SoC.
vm_clk_ena - разрешение такта низкой частоты. Это не клок, это разрешение тактов. Например, мы хотим имитировать ВМ2 на 5МГц внутренней частоты (10 внешней). И основная тактовая SoC у нас 100MHz. На вход vm_clk_ena в течение 19 тактов высокой частоты 100MHz должен подаваться низкий уровень, и один такт высокий, скважность 1/19. Такой подход также позволяет имитировать любые частоты с использованием фазового аккумулятора (можно, например 5.33MHz или 99MHz). В моей репке cpu11 тестовые проекты поддерживают режим замедления, там есть переключатель, все тестировалось и проверялось.




Ответить с цитированием