Как стать автором
Обновить
27
0

Пользователь

Отправить сообщение
Дописал загрузчик, теперь я уверен, что он из процессора точно ничего не выкидывает при трансляции проекта:
Финальный отчет

Заодно отвечу на комментарий:
Сколько MIPS и на какой частоте заработает на вашей FPGA?

Проваленная временная константа — это из-за высокой заданой частоты на входе. При заданой частоте в 50МГц (стандартная для стартер кита для Spartan3E) он[транслятор ISE :)] не особо старается упаковывать проект и максимально возможную частоту работы не показывает.
Максимальная частота работы получилась 79.5Мгц для кристала Spartan3E xc3s500. Самая длинная линия на умножителе. Следом за ней идут линии на сумматоре и компараторе.
Простор для оптимизации есть — сейчас процессор такт выборки команды просто простаивает, в этот такт можно вынести какие-либо предварительные вычисления.

MIPS будет в 2 раза ниже частоты, на которой работает процессор.
В результате трансляции проекта получается файл, который можно залить в ПЛИС(раз, два).

Взгляд на проект с высоты птичьего полета:
один
два

Можно протестировать уже на вполне реальном железе, а потом отдать на перевод в кремний (и впоследствии «китаю» на производство).
Чего я и боялся. :)
Хотелось и уместиться в объем статьи, и при этом сделать что-то более-менее законченное.

Хм, как всегда хорошая мысля, приходит опосля. Надо было начать статью с рассказа о конечных автоматах и раскрутить их идею до уровня процессора.
Я там только АЛУ начинал строить. Забросил на моменте, когда понял, что будет куча «копипаста» вручную по одному блоку. Хотя, проблему копипаста можно решить через моды админки.
Лучше. Можно бы еще точки чуть побольше сделать, чтобы не нужно было всматриваться.
function BinarySearch(value: integer; arr: PIntegerArray; size: integer): integer;
var
  mask: cardinal;
  index: cardinal;
begin
  mask := $80000000;
  while mask > size do
    mask := mask shr 1;

  index := 0;
  while mask > 0 do
  begin
    index := index or mask;
    if (index >= size) or (arr[index] > value) then
      index := index and not mask;
    if arr[index] = value then
      Exit(index);
    mask := mask shr 1;
  end;
  Result := -1;
end;

Заодно проверил время выполнения. В несколько раз больше времени выполнения классического алгоритма. Понял, что я полный нуб и мне еще учиться и учиться. :)
function BinarySearch(value: integer; arr: PIntegerArray; size: integer): integer;
var
  mask: cardinal;
  index: cardinal;
begin
  mask := $80000000;
  while mask > size do
    mask := mask shr 1;

  index := 0;
  while mask > 0 do
  begin
    index := index or mask;
    if (index >= size) then
      index := index and (not mask)
    else if arr[index] > value then
      index := index and (not mask)
    else if arr[index] = value then
      break;

    mask := mask shr 1;
  end;

  if (index < size) and (arr[index] = value) then
    Result := index
  else
    Result := -1;
end;

Решил попробовать использовать не деление массива на 2 части, а постепенный спуск по маске. Скорее всего, это работает медленнее, чем уже приведенные решения.
Написано не сходу. Первые 2-3 прогона вычислял глюки (не искало нулевой элемент). Дальше еще несколько прогонов улучшал читаемость.
Даже близко не приблизился к 10%, которые могут сходу без тестовых прогонов и отладки написать решение.

В качестве развлечения и развеивания скуки на работе отлично подошло.
А чтобы напрячься на несколько секунд, нужно сделать синий экран с надписью «Panic!».
Можно сообщать о баге.
Интересно, сколько времени ей понадобится, чтобы научиться играть в Го?
То, что она передана в метро, не означает же, что она в метро и написана.
Вот лично я телепатией не обладаю. И когда давным-давно регистрировался, не мог предположить, что ответ на секретный вопрос будет нужен для чего-то кроме восстановления пароля, который я забывать не собирался, а ответ на секретный вопрос считал лазейкой для взлома.
3 дня позже ввели. Предположительно, против голдселлеров, у которых была схема «купил» игру — покричал в дженерал чате — словил бан — отозвал деньги — «купил» игру — …
Я, конечно, еще только новичок. Изучал по githowto консоль. После изучения попробовал поставить пару gui-систем. Не понравились. Какой-то костыльный дизайн у них был (похоже, сначала делалась консоль, а потом пытались сделать gui).
Так и остался с консолью. Продолжаю изучать и пополнять список alias'ов в своем PortableGit.

Возможно, найду еще удобную gui, но позже, а сейчас даже желания нет… :)
Я тоже githowto проходил. Тоже самое, что в этом курсе, но «с чувством, с толком, с расстановкой». Объяснено все подробнее, проходится, конечно, уже не за 15 минут, а за несколько часов, но оно стоит этого времени.
Это шикарный трюк.
Сделать что-то на публику за 15 минут. Но перед этим учиться несколько лет.
Указал Опере «Представляться как IE». Заработало.
У меня в опере вообще белый экран.
А мне дедлайн понравился :)

Информация

В рейтинге
Не участвует
Откуда
Владимирская обл., Россия
Дата рождения
Зарегистрирован
Активность