Перейти к содержанию
    

Порекомендуйте какое-нибудь softcore

Вы для Lattice PAR делали? Или оценка по какому-нить Precision? Если PAR не делали, то эту оценку надо выкинуть на свалку.

PAR после Synplify (не Synplify-Pro), все настройки по умолчанию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PAR после Synplify (не Synplify-Pro), все настройки по умолчанию.

Тогда сорри. Просто сам когда-то проходил, что без PAR (isplever) оценки синтезаторов слишком оптимистичны, у синплифи еще более менее, а у Precision просто неадекватны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Написал компилятор и упростил ядро - при большом регистровом файле на памяти развитая система адресации оказалась неэффективной. Новое ядро заметно меньше, и немного быстрее.

В железе пока не пробовал, тестирую в функциональном эмуляторе - скорость эмуляции ~2 МГц тактовой, можно и большие/сложные программы гонять. N-ферзей компилируется в ~100 слов (код + данные без учета 80 слов, занимаемых массивами), исполняется без ошибок (в эмуляторе). :)

 

module queens
 N, N2, count, poss, place, val, pos, pos1, i, j
 arow:20, aleft:20, aright:20, aposs:20
begin 
 for N:=1 to 16
count := 0
j := 1
for i := 1 to N
  j := j * 2
end
val := j - 1
pos := 1
arow[1] := 0
aleft[1] := 0
aright[1] := 0
j := val
N2 := N / 2 
for i := 1 to N2
  j := j / 2
end
aposs[1] := j
poss := aposs[1]
while pos <> 0
  if poss <> 0 
	place := poss & - poss
	poss := poss & ~ place 
	if  pos == 1 and poss == 0 and N & 1 <> 0		
	  count := count * 2 
	end	
	if pos <> N 
	  pos1 := pos + 1
	  aposs[pos] := poss			   
	  arow[pos1] := arow[pos] | place 
	  aleft[pos1] := (aleft[pos] | place) * 2
	  aright[pos1] := (aright[pos] | place) / 2
	  poss := ~ (arow[pos1] | aleft[pos1] | aright[pos1]) & val
	  pos := pos1			 
	else 
	  count := count + 1
	end
  else
	pos := pos - 1   
	poss := aposs[pos]
  end
end
if (N & 1) == 0
  count := count * 2
end
out := count //вывод результата в порт
 end
end

 

 

~Исходник на Си:

http://electronix.ru/forum/index.php?showt...st&p=516828

Изменено пользователем Omen_13

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел такты - при N=13 (ответ 73712) код выполняется за ~200 млн. тактов, те за ~2 сек на Спартане3(~100МГц). Аналогичный код на Delphi(консоль) ~2ГГц x86(AMD) считает

за ~0,04 сек, те в 50 раз быстрее(хотя тактовая больше в ~200 раз).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотелось-бы посмотреть результаты компиляции(размер кода, листинг, если есть, и такты) для NIOS-2, MicroBlaze(EDK не установлен),и др софт-процессоров, для сравнения. Исходники N-ферзей можно отсюда:

http://electronix.ru/forum/index.php?showt...mp;#entry516828

 

 

На Си давно уже не пишу, не хотелось-бы только для сравнения ставить, разбираться... А Паскаля для софт-процессоров нет.

Изменено пользователем Leka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел такты - при N=13 (ответ 73712) код выполняется за ~200 млн. тактов, те за ~2 сек на Спартане3(~100МГц). Аналогичный код на Delphi(консоль) ~2ГГц x86(AMD) считает

за ~0,04 сек, те в 50 раз быстрее(хотя тактовая больше в ~200 раз).

На BF537-600 при N=13 код выполняется за ~213 млн. тактов, те за ~0,36 сек (CPU_CLOCK = 600МГц).

 

Исходники N-ферзей отсюда: http://electronix.ru/forum/index.php?showt...mp;#entry516828

Изменено пользователем blackfin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Любопытно, для N-ферзей пока получается ~одинаковое количество тактов для двух архитектур:

1) BF: 1 такт на инструкцию, и 8 32-разрядных(или 16 16-разрядных) РОН + адресные, индексные, и др специальные регистры. Если не путаю.

2)моя текущая: 2..3 такта на инструкцию: 3 такта на load/store(a:=b, b:=a), 2 такта на все остальные, и 1К 32-разрядных РОН. В среднем для задач с массивами ~2.5 такта/инструкция, те ~40 MIPS для 100 МГц тактовой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мысли вслух... a[ i ] - фактически ((a)+(i)), поэтому a[ i ] эквивалентно i[ a ] (в безтиповом языке), a a[ i ][ j ][ k ] эквивалентно k[ j[ i[ a ] ] ]. Т.е. многомерный массив - частный случай одномерного. Кроме того, k[ j[ i[ a ] ] ] требует меньше инструкций и тактов, чем a[i*n+j*m+k].

 

На BF537-600 при N=13 код выполняется за ~213 млн. тактов, те за ~0,36 сек (CPU_CLOCK = 600МГц).

 

Исходники N-ферзей отсюда: http://electronix.ru/forum/index.php?showt...mp;#entry516828

Наверно, надо подправить типы, чтобы не было операций приведения типов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...