April 21st, 2021

QuatCore

Тестируем захват ближ. дист. на "сбалансированном" QuatCore (2)

В прошлый раз обнаружили, что нужно "протянуть" в модуль QuatCoreMem не только шины PreDestAddr и PreDestStall, но ещё и PipeStall, так что эти PreDestAddr будут "защёлкиваться" в DestAddr и прочие регистры только при условии PipeStall = 0. Исправляется элементарно, было так:
always @(posedge clk) begin
	MemWrite <= DestSquareBrac & isDest;
	RegWrite <= (~DestSquareBrac) & isDest;
	DestCountSP <= isDest & PreDestAddr[5] & PreDestAddr[4] & PreDestAddr[1] & PreDestAddr[0];
	DestAddr <= PreDestAddr[5:0];
end


а стало так:
always @(posedge clk) if (~PipeStall) begin
	MemWrite <= DestSquareBrac & isDest;
	RegWrite <= (~DestSquareBrac) & isDest;
	DestCountSP <= isDest & PreDestAddr[5] & PreDestAddr[4] & PreDestAddr[1] & PreDestAddr[0];
	DestAddr <= PreDestAddr[5:0];
end


Как ни странно, размер проекта даже уменьшился, раньше он синтезировался в 541 ЛЭ, из которых 204 регистра, а теперь - в 536 ЛЭ, из которых 198 регистров. Оно и ясно, Quartus понял, что 6-битный DestAddr здесь - это в точности те же регистры, что и младшие 6 бит DestAddr в QuatCoreCodeROM, и лишние выкинул.

Запускаем симуляцию, и картинка сразу обнадёживает:


Collapse )
Отлично! Две самые отдалённые точки действительно были перенесены в конец массива, как и было задумано. Ну и процессор, похоже, не "испортился" от нашего вмешательства, работает корректно. И команду ijk проверили - пашет, очень удобно бывает. Только её работу "на глаз" оценивать неудобно, с толку сбивают 5-битные регистры.