|
|
  |
Порекомендуйте какое-нибудь softcore, Для Altera |
|
|
|
Jun 10 2009, 19:28
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Написал компилятор и упростил ядро - при большом регистровом файле на памяти развитая система адресации оказалась неэффективной. Новое ядро заметно меньше, и немного быстрее. В железе пока не пробовал, тестирую в функциональном эмуляторе - скорость эмуляции ~2 МГц тактовой, можно и большие/сложные программы гонять. N-ферзей компилируется в ~100 слов (код + данные без учета 80 слов, занимаемых массивами), исполняется без ошибок (в эмуляторе). CODE 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 - Jun 20 2009, 15:08
|
|
|
|
|
Jun 15 2009, 05:58
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Хотелось-бы посмотреть результаты компиляции(размер кода, листинг, если есть, и такты) для NIOS-2, MicroBlaze(EDK не установлен),и др софт-процессоров, для сравнения. Исходники N-ферзей можно отсюда: http://electronix.ru/forum/index.php?showt...mp;#entry516828На Си давно уже не пишу, не хотелось-бы только для сравнения ставить, разбираться... А Паскаля для софт-процессоров нет.
Сообщение отредактировал Leka - Jun 15 2009, 05:53
|
|
|
|
|
Jun 16 2009, 12:51
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Мысли вслух... 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]. Цитата(blackfin @ Jun 15 2009, 10:54)  На BF537-600 при N=13 код выполняется за ~213 млн. тактов, те за ~0,36 сек (CPU_CLOCK = 600МГц). Исходники N-ферзей отсюда: http://electronix.ru/forum/index.php?showt...mp;#entry516828Наверно, надо подправить типы, чтобы не было операций приведения типов.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|