Важная информация

User Tag List

Страница 24 из 86 ПерваяПервая ... 202122232425262728 ... ПоследняяПоследняя
Показано с 231 по 240 из 856

Тема: PDP-11 на FPGA

  1. #231
    Guru
    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    2,321
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    177 сообщений
    Mentioned
    17 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    В том же объектном модуле все коды уже лежат готовыми кусками - собираем их в буфер, кое-где подправляем относительные адреса на основании RLD-записей, и готово.
    В LDA-файле еще лучше. Те же готовые куски, только адреса там уже исправлены на абсолютные. Записи там всего двух типов: (1) данные и (2) конец программы, там же пусковой адрес. А если программа расположена компактно, то еще проще взять .SAV-файл, ему просто обрезать незначащие начало и конец, тут и программу обработки-преобразования сочинять не надо.

    Цитата Сообщение от Hunta Посмотреть сообщение
    Плюс при парсинге листинга я могу в mif вставить исходник - что позволяет мелкий ремонт делать прямо в mif-е.
    С этим, конечно, не поспоришь. С одной стороны. С другой - а на фига править прямо в mif-е, если есть эмулятор? Поправил исходник, запустил в эмуляторе батник... Отставить! .COM-файл, потом в винде из полученного бинарника батником делаем mif и вперед!
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  2. #232
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,964
    Спасибо Благодарностей отдано 
    284
    Спасибо Благодарностей получено 
    626
    Поблагодарили
    527 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AFZ Посмотреть сообщение
    С другой - а на фига править прямо в mif-е, если есть эмулятор?
    Потому что
    Цитата Сообщение от AFZ Посмотреть сообщение
    Поправил исходник, запустил в эмуляторе батник... Отставить! .COM-файл, потом в винде из полученного бинарника батником делаем mif и вперед!
    куча лишних телодвижений. И плюс достаточно хорошее знание команд PDP-11, что бы сыграть роль MACRO-11

    Но для меня главное, что глядя в один (готовый) файл - можно видеть - и что располагается по каким адресам и что оно там делает
    Я, конечно, в начале работы над FPGA запускаю несколько FAR-ов и даже могу расположить 4 из окна на мониторе, чтобы видеть всё и не переключаться между окнами, но когда одно-два окна, в которые надо смотреть - оно удобнее
    Последний раз редактировалось Hunta; 31.08.2018 в 08:31.

  3. #233
    Activist
    Регистрация
    27.11.2015
    Адрес
    г. Самара
    Сообщений
    341
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Hunta,
    Выложите исходники. У меня похожая плата - DE10-nano. На ней нет SDRAM, но у меня модулем она подключена. Опыт работы с SDRAM у меня большой. Можно будет совместно развивать.

  4. #234
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,964
    Спасибо Благодарностей отдано 
    284
    Спасибо Благодарностей получено 
    626
    Поблагодарили
    527 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Saar, как такового - готового проекта нет. Основное, что я сделал - оторвал тактовый генератор процессора от того, что выдаёт SDRAM (или SRAM, если на плате нет SDRAM) в проц. Ну и плюс сильно недоделанный сигнал типа Ready, поступающий от всего (ну или должный поступать от всего в идеале) на шине при обращении проца.
    Я пока больше развлекаюсь с попыткой подстроится под особенности работы проца с памятью (но чувствую - надо сделать нормально эту работу), а так же с BRAM и занесением инфы в неё из прошивки - в режиме - а ещё я так vhdl учу, потому как пока в голове не отложилось - что насинтезируется железного из моих описаний...
    Ну и пока у меня таймаут из-за других дел.. Недели две уже как...

  5. #235
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,964
    Спасибо Благодарностей отдано 
    284
    Спасибо Благодарностей получено 
    626
    Поблагодарили
    527 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    После долгого перерыва опять вернулся к FPGA. Точнее, к скрипту, который переделывает листинг в MIF файл. Добил до вариант, прогон которого уже позволяет (правда, пока ещё делается некоторое количество правок руками как в исходном листинге, так и в MIF файле) получившийся результат использовать в синтезе. Как выглядит:
    Код:
    -- begin_signature
    -- m9312l
    -- end_signature
    WIDTH=16;
    DEPTH=256;
    
    ADDRESS_RADIX=UNS;
    DATA_RADIX=OCT;
    
    CONTENT BEGIN
    	0 :	165000;  -- 165000 165000                  data0:   .word data0       ; test data structures
    	1 :	165000;  -- 165002 165000                           .word data0       ;
    	2 :	100000;  -- 165004    000     200          data1:   .byte 000, 200    ;
    	3 :	177777;  -- 165006 177777                  data2:   .word 177777      ;
    	4 :	165006;  -- 165010 165006                           .word data2       ;
    	5 :	165006;  -- 165012 165006                           .word data2       ;
    	6 :	000500;  -- 165014 000500                           .word memloc+0    ;
    	7 :	000501;  -- 165016 000501                           .word memloc+1    ;
    	                 --                                ;         .=base+20                   
    	                 --                                DIAG: ; PRIMARY DIAGNOSTIC ENTRY POINT
    	8 :	005003;  -- 165020 005003                  T1:      clr   r3          ; R3=000000 C=0
    	9 :	005203;  -- 165022 005203                           inc   r3          ; R3=000001 C=0
    	10 :	005103;  -- 165024 005103                           com   r3          ; R3=177776 C=1
    	11 :	006203;  -- 165026 006203                           asr   r3          ; R3=177777 C=0
    	12 :	006303;  -- 165030 006303                           asl   r3          ; R3=177776 C=1
    	13 :	006003;  -- 165032 006003                           ror   r3          ; R3=177777 C=0
    	14 :	005703;  -- 165034 005703                           tst   r3          ; R3=177777 C=0
    	15 :	005403;  -- 165036 005403                           neg   r3          ; R3=000001 C=1
    	16 :	005303;  -- 165040 005303                           dec   r3          ; R3=000000 C=1
    	17 :	005603;  -- 165042 005603                           sbc   r3          ; R3=177777 C=1
    	18 :	006103;  -- 165044 006103                           rol   r3          ; R3=177777 C=1
    	19 :	005503;  -- 165046 005503                           adc   r3          ; R3=000000 C=1
    	20 :	000303;  -- 165050 000303                           swab  r3          ; R3=000000 C=0
    	21 :	001377;  -- 165052 001377                           bne   .           ; br . if FAIL
    	22 :	012702;  -- 165054 012702                  T2:      mov   #data0,r2   ; R2=165000
    	23 :	165000;  --        165000
    
    --здесь текст вырезал, особого смысле полностью приводит не вижу - всё вырезанное примерно такое же...
    
    	250 :	014304;  -- 165764 014304                  T8D:     mov   -(r3),r4       ; memory FAIL, put bad data to R4    
    	251 :	010300;  -- 165766 010300                           mov   r3,r0          ; put bad addr to R0                 
    	252 :	005006;  -- 165770 005006                           clr   sp             ; zap SP                             
    	253 :	000000;  -- 165772 000000                           halt                 ; and DIE                            
    	254 :	040460;  -- 165774    060     101          verson:  .ascii   "0A"        ; version ID         
    	255 :	123162;  -- 165776 123162                  crc16:   .word <123162>       ; CRC-16 will go here
    END;
    Работа над ним продолжается

  6. #236
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,964
    Спасибо Благодарностей отдано 
    284
    Спасибо Благодарностей получено 
    626
    Поблагодарили
    527 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Перодически, по мере свободного времени, продолжаю копаться в PDP-11 на FPGA. Вчера случайно забабахал в модуль проца предвыборку слова из следующего адреса. Но поскольку случайно - оно как бэ не совсем работает. То есть на однословных командах (не переходах) просто Зупер, но поскольку получилось случайно - в целом проц не работает

    ROM BRAM сейчас работает 200 МГц тактовой, но каждый цикл чтения - три такта. В планах - поднять до 400 МГц и/или сделать работу однотактовой.

    Ну и проц всё таки вернуть в рабочий вид

  7. #237
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,964
    Спасибо Благодарностей отдано 
    284
    Спасибо Благодарностей получено 
    626
    Поблагодарили
    527 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Случайно научился задержки выдачи сигнала по полтакта, то есть типа - данные выдаются по фронту, готовность - по (следующему) срезу, а на следующем фронте - сигнал готовности без задержки относительно фронта клока. Может, где и описан - но я ж книжек не читаю, метод обучения - исключительно битьём головой об стол В общем, когда видишь готовый результат - ЭХ, КАК ЖЕ Я РАНЬШЕ ТО НЕ ДОДУМАЛСЯ!!!

    - - - Добавлено - - -

    В целом, сейчас воюю с заставлением проца работать с BROM, которая работает на произвольной частоте В силу своеобразного дизайна проца... Тяжело идёт Но резать проц по крупному ишо не готов Надо мышление натренировать на железячное

    - - - Добавлено - - -

    А, да, предвыборку пришлось покоцать. Рано исчо с этим воевать

  8. #238
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    Случайно научился задержки выдачи сигнала по полтакта, то есть типа - данные выдаются по фронту, готовность - по (следующему) срезу, а на следующем фронте - сигнал готовности без задержки относительно фронта клока. Может, где и описан - но я ж книжек не читаю, метод обучения - исключительно битьём головой об стол В общем, когда видишь готовый результат - ЭХ, КАК ЖЕ Я РАНЬШЕ ТО НЕ ДОДУМАЛСЯ!!!
    эх не понял ниче, но чувствую что там чтото интересное... может какой кусочек кода небольшой чтоб понять как обычно делают и как по новому можна делать?

  9. #239
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,964
    Спасибо Благодарностей отдано 
    284
    Спасибо Благодарностей получено 
    626
    Поблагодарили
    527 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    кусочек кода небольшой
    Ок, вечером.

  10. #240
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,964
    Спасибо Благодарностей отдано 
    284
    Спасибо Благодарностей получено 
    626
    Поблагодарили
    527 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    entity SysROM is
      port
      (
          BaseAddr : in    std_logic_vector((bus_addr_width-1) downto 0)
    
        ; FromBus  : in    typeFromBus18
        ; ToBus      : out   typeToBus
    
        ; mem_clk  : in    std_logic
      );
    end SysROM;
    
    architecture implementation of SysROM is
    
      component ROM
        PORT
        (
          address : IN STD_LOGIC_VECTOR ((addr_width-1) DOWNTO 0);
          clock     : IN STD_LOGIC  := '1';
          rden      : IN STD_LOGIC  := '1';
          q           : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
        );
      end component;
    
    begin
    
      sdram: ROM
      port map
      (
          address => RomCurrAddr((addr_width-1) downto 0)
        , clock     => mem_clk
        , rden      => isReadEnable
        , q           => Data
      );
    
      isAddrMatch       <= (BaseAddr((bus_addr_width-1) downto addr_width) = FromBus.Addr((bus_addr_width-1) downto addr_width)) and FromBus.Common.isAddrReady;
    
      isDataReady       <=       isAddrMatch
                                    and FromBus.Common.isGetData
                                    and (CurrAddr = FromBus.Addr)
                                    and (CurrMemState = memIdle);
    
      ToBus.isAddrMatch <= isAddrMatch;
    
      ToBus.Data            <= Data                 when isDataReady else
                                        (others => '0');
    
      ToBus.DataReady   <= '1'  when isDataReady else
                                        '0';
     
      process(mem_clk)
      begin
        if rising_edge(mem_clk) then
    
          case CurrMemState is
    
            when memIdle =>
    
              if     isAddrMatch
                 and FromBus.Common.isGetData
                 and (CurrAddr /= FromBus.Addr) then
    
                RomCurrAddr   <= FromBus.Addr;
                isReadEnable   <= '1';
                NextMemState <= memLoadAddr;
    
              else
    
                isReadEnable <= '0';
    
              end if;
    
            when memLoadAddr =>
    
              CurrAddr         <= RomCurrAddr;
              NextMemState <= memWaitRead;
    
            when memWaitRead =>
    
              isReadEnable   <= '0';
              NextMemState <= memDataReady;
    
            when memDataReady =>
              NextMemState <= memIdle;
    
            when others =>
    
              isReadEnable   <= '0';
              NextMemState <= memIdle;
    
          end case;
    
        end if;
      end process;
    
      process(mem_clk)
      begin
        if falling_edge(mem_clk) then
    
          CurrMemState <= NextMemState;
    
        end if;
      end process;
    
    end implementation;
    Задача - ToBus.DataReady должен быть выставлен после того, как ToBus.Data устаканились.
    Можно, конечно, на следующем rising_edge(mem_clk), но это потеря такта Интересней - на falling_edge(mem_clk).
    Но снимать его надо без задержки - на rising_edge(mem_clk)

Страница 24 из 86 ПерваяПервая ... 202122232425262728 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. PDP-11/83 -- дошли руки...
    от form в разделе ДВК, УКНЦ
    Ответов: 470
    Последнее: 27.04.2021, 15:22
  2. Эмуляторы PDP-11
    от form в разделе ДВК, УКНЦ
    Ответов: 99
    Последнее: 15.03.2021, 14:53
  3. посьба к ГУРУ pdp-11
    от bigral в разделе ДВК, УКНЦ
    Ответов: 11
    Последнее: 13.09.2014, 23:53
  4. PDP-11 литература
    от bigral в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 26.03.2013, 07:54

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •