June 30th, 2020

QuatCore

QuatCoreImmTable - по-простому

Описанный вчера алгоритм пока не реализовал, больно он мудрёный, для начала "подготовил для него почву", т.е реализовал пока самый дурацкий алгоритм, и хочу убедиться, что весь код генерируется верно, хоть и не очень эффективно. А именно, сейчас генерится такой вот модуль:

//таблица непосредственных значений, сгенерированная под конкретный исполняемый код
module QuatCoreImmTable (input [7:0] SrcAddr, output [15:0] Q);
	wire[5:0] adr = SrcAddr[5:0];
	assign Q = 
		(adr==5'h00)?	16'h005D:
		(adr==5'h01)?	16'h0018:
		(adr==5'h02)?	16'h0000:
		(adr==5'h03)?	16'h0003:
		(adr==5'h04)?	16'h0001:
		(adr==5'h05)?	16'h0019:
		(adr==5'h06)?	16'h0017:
		(adr==5'h07)?	16'h00F0:
		(adr==5'h08)?	16'h001A:
		(adr==5'h09)?	16'h001C:
		(adr==5'h0A)?	16'h001E:
		(adr==5'h0B)?	16'h0031:
		(adr==5'h0C)?	16'h00C7:
		(adr==5'h0D)?	16'h2B02:
		(adr==5'h0E)?	16'h0016:
		(adr==5'h0F)?	16'h00F2:
		(adr==5'h10)?	16'h4000:
		(adr==5'h11)?	16'h00CD:
		(adr==5'h12)?	16'h0013:
		(adr==5'h13)?	16'h54FE:
		(adr==5'h14)?	16'hAA80:
		(adr==5'h15)?	16'h00EC:
		(adr==5'h16)?	16'h00CB:
		(adr==5'h17)?	16'h00EE:
		(adr==5'h18)?	16'h001B:
				16'hxxxx;
endmodule


То есть, мы просто выкладываем значения одно за другим, вместо того, чтобы долго и упорно придумывать их расположение в доступных 128 ячейках. Хорошо хоть, программе хватает ума понять, что из 7 бит SrcAddr, "отданных" под непосредственные значения, достаточно взять 5, что несколько снизит расходы логических элементов.

И как ни странно, такое безобразие синтезируется в 32 ЛЭ - не шибко хорошо, но и не шибко плохо, жить можно...

Collapse )

Какая-то прямо Agile-методология получается - ломать, но аккуратно, чтобы в течение недели восстановить функционирование, но уже с дополнительными "пряниками" :)

Но сразу возникает желание отложить экономию 40 ЛЭ на потом, как бы запомнить, что "здесь можно сделать существенно лучше", а пока взяться за программу обработки видео в реальном времени.

Вообще, даже сейчас обмен вышел довольно выгодный: мы поменяли 10 слов кода и данных = 160 бит, на лишние 31 ЛЭ (до всей эпопеи с переделкой счётчика инструкций и таблицы непосредственных команд, ядро занимало 519 ЛЭ, а сейчас 550). Но можно-то вообще шикарно, и даже понятно, как :)
Poll #2103007 Суперский алгоритм составления таблицы QuatCoreImmTable

Стоит ли его реализовывать прямо сейчас?

Да
0(0.0%)
Нет
0(0.0%)