User Tag List

Страница 27 из 273 ПерваяПервая ... 232425262728293031 ... ПоследняяПоследняя
Показано с 261 по 270 из 2727

Тема: Цифровая археология: 1801 и все-все-все

  1. #261

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    "Еще десять тысяч ведер воды и золотой ключик у нас в кармане" (с) Тортилла .
    Ждем продолжения. Надо будет все-таки шины и именованные цепи осваивать, а то по схеме будет разобраться несильно проще чем по кристаллу.
    На самом деле, не так уж много работы. Один столбец - это день чистой работы, а там до 60 логических элементов. Всего таких столбцов 19. Итого 1100-1200 логических элементов. В транзисторах это будет... ну, умножим на 6-8. Итого 8-9 тысяч транзисторов. Впрочем, измерять трудоемкость подобной ПЛМ в транзисторах нет смысла, т.к. они преобразуются в библиотеку ЛЭ на первом же столбце.

  2. #262

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Перенес на верилог и потестировал модуль таймера:
    Код:
    //______________________________________________________________________________
    //
    // 1801VM1 timer module (rudimentary, VE1-style)
    //
    module vm1_timer
    (
       input          tve_clk,       // main system clock
       input          tve_ena,       // clock enable
       input          tve_reset,     // timer reset
       input          tve_sp,        // external timer clock
                                     //
       input  [15:0]  tve_din,       // input data
       output [15:0]  tve_dout,      // output data
                                     //
       input          tve_csr_oe,    // read timer control
       input          tve_cnt_oe,    // read timer counter
       input          tve_lim_oe,    // read timer limit
       input          tve_csr_wr,    // write timer control
       input          tve_lim_wr     // write timer limit
    );
    
    reg   [15:0]      tve_limit;     // timer reload & capture register
    reg   [15:0]      tve_count;     // timer counter register
    reg   [7:0]       tve_csr;       // timer control register
    reg   [6:0]       tve_pre;       // clock prescaler counter
    reg   [5:0]       tve_div;       // timer clock divisor
    reg   [2:0]       tve_edge;      // external falling edge detector
    reg               tve_tclk;      // selected timer clock
    reg               tve_tclk4;     // prescaler /4 output
    wire              tve_tclk128;   // prescaler /128 output
    reg   [1:0]       tve_intrq;     // hidden interrupt request
    
    wire              tve_zero;      // timer counter zero value
    wire              tve_load;      // timer counter load
    wire              tve_back;      // timer capture load
    
    //
    // Reading the timer registers content to the shared bus
    //
    assign   tve_dout = (tve_csr_oe ? {8'b11111111, tve_csr} : 0)
                      | (tve_cnt_oe ? tve_count : 0)
                      | (tve_lim_oe ? tve_limit : 0);
    
    //
    // Hidden clock prescaler, generates the /4 and /128 frequencies
    //
    assign   tve_tclk128 = (tve_pre[6:0] == 7'b1111111);
    
    always @(posedge tve_clk or posedge tve_reset)
    begin
       if (tve_reset)
       begin
          //
          // Asynchronous prescaler reset, no in original 1801VM1,
          // added here to provide the comfortable simulation
          //
          tve_pre     <= 7'b0000000;
          tve_div     <= 6'b0000000;
          tve_tclk4   <= 1'b0;
          tve_tclk    <= 1'b0;
          tve_edge    <= 3'b000;
       end
       else
       begin
          if (tve_ena)
          begin
             tve_pre     <= tve_pre + 7'b0000001;
             tve_tclk4   <= (tve_pre[1:0] == 2'b11);
    
             //
             // Documented divisor 1/4, 1/16, 1/64
             //
             if (tve_tclk128)
                tve_div     <= tve_div + 6'b000001;
    
             //
             // Timer clock selector
             //
             tve_tclk    <= ~tve_csr[0] & ~tve_csr[6] & ~tve_csr[5] & tve_tclk128
                          | ~tve_csr[0] &  tve_csr[6] & ~tve_csr[5] & tve_tclk128 & (tve_div[1:0] == 2'b11)
                          | ~tve_csr[0] & ~tve_csr[6] &  tve_csr[5] & tve_tclk128 & (tve_div[3:0] == 4'b1111)
                          | ~tve_csr[0] &  tve_csr[6] &  tve_csr[5] & tve_tclk128 & (tve_div[5:0] == 6'b111111)
                          |  tve_csr[0] & tve_edge[1] & ~tve_edge[2] & (tve_pre[1:0] == 2'b11);
             //
             // Falling edge detector (raising for the inverted input tve_sp)
             //
             if (tve_tclk4)
             begin
                //
                // Input metastability eliminator and synchronizer
                //
                tve_edge[0] <= tve_sp;
                tve_edge[1] <= tve_edge[0];
                tve_edge[2] <= tve_edge[1];
             end
          end
       end
    end
    
    assign   tve_zero = (tve_count == 16'h0000) & ~tve_csr[1];
    assign   tve_back = tve_csr[4] & tve_csr[1] & tve_edge[1] & ~tve_edge[2] & tve_tclk4;
    assign   tve_load = tve_zero & tve_tclk4 & ~tve_csr[1];
    //
    // Timer counter, preload/capture and control registers
    //
    always @(posedge tve_clk or posedge tve_reset)
    begin
       if (tve_reset)
       begin
          //
          // Asynchronous timer counter and preload reset, no in original 1801VM1,
          // added here to provide the comfortable simulation. The control timer
          // register reset is implemented in the original chip
          //
          tve_csr     <= 8'b00000000;
          tve_count   <= 16'h0000;
          tve_limit   <= 16'h0000;
          tve_intrq   <= 2'b00;
       end
       else
       begin
          if (tve_ena)
          begin
             //
             // Interrupt flags
             //
             if (tve_csr[2] & (tve_zero | tve_back))
                tve_intrq[0] <= 1'b1;
    
             if (~(tve_csr[2] & (tve_zero | tve_back)))
                tve_intrq[1] <= tve_intrq[0];
    
             //
             // Timer control register
             //
             // csr[0]   - selects external clock source
             // csr[1]   - selects capture mode
             // csr[2]   - enables interrupt request
             // csr[3]   - selects one-shot mode
             // csr[4]   - timer count enable
             // csr[5]   - 1/16 divider enable
             // csr[6]   - 1/4 divider enable
             // csr[7]   - interrupt overflow flag
             //
             if (tve_csr_wr)
                //
                // The prioritized CSR write from bus
                //
                tve_csr <= tve_din[7:0];
             else
             begin
                if (tve_zero & tve_csr[3])
                   //
                   // Reset the RUN bit in one-shot mode
                   //
                   tve_csr[4] <= 1'b0;
    
                if (tve_intrq[1] & tve_csr[2] & (tve_zero | tve_back))
                   //
                   // Set the interrupt overflow flag if enabled
                   //
                   tve_csr[7] <= 1'b1;
             end
    
             //
             // Timer preload and capture value register
             //
             if (tve_lim_wr)
                //
                // The prioritized register write from bus
                //
                tve_limit <= tve_din;
             else
                if (tve_back)
                   //
                   // Capture the current counter value
                   //
                   tve_limit <= tve_count;
    
             //
             // Decrementing counter register
             //
             if (tve_csr_wr | tve_load)
                //
                // Counter is written unconditionally at every CSR bus write
                //
                tve_count <= tve_limit;
             else
                if (tve_tclk & tve_csr[4])
                   //
                   // Count selected clock events if enabled
                   //
                   tve_count <= tve_count - 16'h0001;
          end
       end
    end
    endmodule
    По результатам тестирования заполнил главу про таймер
    Документация 1.0b

    Дальше конвертирую маленькую ПЛМ контроллера прерываний и буду смотреть начальный старт, там он крепко с многопроцессорностью связан.
    Последний раз редактировалось Vslav; 20.12.2014 в 01:41.

  3. #263

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Встроенный таймер К1801ВМ1 является рудиментарными остатками таймера однокристального
    микроконтроллера К1801ВЕ1, заводское тестирование схемы таймера не проводится и около 30 процентов
    процессоров имеют неработающий таймер.
    Откуда известно, что заводское тестирование не производится, и что 30 процентов брака?

    ---------- Post added at 03:24 ---------- Previous post was at 03:18 ----------


    Расшифровал схемы портов в 1515ХМ2-001:

    Они 3-х типов:

    1) Вход прямой + инверсный
    2) Вход прямой + инверсный + выход с открытым коллектором
    3) Вход прямой + инверсный + выход с открытым коллектором + открытым эмиттером
    Последний раз редактировалось Titus; 20.12.2014 в 04:41.

  4. #264

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Откуда известно, что заводское тестирование не производится, и что 30 процентов брака?
    Ну то что таймеры встречаются нерабочие это как бы широко известно. А так да, достоверно что и как там тестируют неизвестно, фраза некорректная, исправлю. ТУ и дополнений к ним на ВМ1 полностью нету открытых, к сожалению.

    Цитата Сообщение от Titus Посмотреть сообщение
    Откуда известно, что заводское тестирование не
    3) Вход прямой + инверсный + выход с открытым коллектором + открытым эмиттером
    Хм, открытытй эмиттер? Может быть просто двунаправленный, с переводом выхода высокоимпедансное состояние?

  5. #265

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

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Хм, открытытй эмиттер? Может быть просто двунаправленный, с переводом выхода высокоимпедансное состояние?
    Откуда эмиттер? Тут же вроди как не TTL а КМОП. Или там реально биполярные транзисторы стоят? Кстати как выглядят биполярные транзисторы на кристалле по сравнению с МОП (по идее достаточно на подложке влепить 3 "бассейна" дифузии один поверх другого)? И как сделать это высокоимпедансное состояние (это ж вроди как 100% изоляция выхода)?

  6. #266

    Регистрация
    26.04.2009
    Адрес
    г. Воронеж
    Сообщений
    6,481
    Спасибо Благодарностей отдано 
    310
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    217 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    Откуда эмиттер?
    А откуда коллектор?
    "Во времена всеобщей лжи говорить правду - это экстремизм" - афоризм.

  7. #267

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да ладно вам придираться

    Все понимают же что микросхема КМОП и тут стоки-истоки. Название "открытый коллектор" не совсем строгое в нашем случае, но вполне применимое ИМХО.

    TTL еще никакие не открывал, пока не знаю как биполярники выглядят "вживую".
    Высокоипедансное состояние выхода реализуется через одновременное закрытие верхнего и нижнего транзисторов выходного ключа.

    Матрицы ПЛМ в ВМ1 почему-то отключаемые от питания, интересно какой в этом глубокий смысл, снижать потребление в WAIT?
    Последний раз редактировалось Vslav; 20.12.2014 в 13:15.

  8. #268

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Да ладно вам придираться

    Все понимают же что микросхема КМОП и тут стоки-истоки. Название "открытый коллектор" не совсем строгое в нашем случае, но вполне применимое ИМХО.

    TTL еще никакие не открывал, пока не знаю как биполярники выглядят "вживую".
    Высокоипедансное состояние выхода реализуется через одновременное закрытие верхнего и нижнего транзисторов выходного ключа.
    Логическим элементом с открытым эмиттером я назвал верхний ключ в паре. Нижний я обозначил как ромбик с нижним подчеркиванием, а верхний, как ромбик с верхним подчеркиванием.

    ---------- Post added at 15:06 ---------- Previous post was at 14:46 ----------

    Вот как я обозначил двунаправленный порт с открытым коллектором:



    Вопрос: как мне ножке порта присвоить еще и название (скажем, Y1), и чтобы это не просто текст, который я могу написать рядом с ножкой, а текст привязанный к этой ножке, чтобы перемещая ножку по схеме, он таскался с нею)

  9. #269

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Перенес на верилог и потестировал модуль таймера
    У тестировавшегося мною ВЕ-таймера была такая особенность, что при счёте в режиме автоматической перезагрузки счётчика - в течении 5 тактов в регистре 177710 мог быть прочитан ноль.

    В результате такой код ( фрагмент теста VM1VE6.MAC ):

    Код:
    	Mov	#2, @#177706
    	Mov	#177710, R5
    
    	MTPS	#340
    
    	Mov	SP, $SP
    	Mov     #20, @#177712	 	; Start VE-timer
    
    	Mov	(R5), R0
    	Mov	(R5), R1
    	Mov	(R5), R2
    	Mov	(R5), R3
    	Mov	(R5), R4
    	Mov	(R5), SP
    	Mov	(R5), R5
    
    	Mov	SP, $Res5
    	Mov	$SP, SP
    
    	Mov	R0, $Res0
    	Mov	R1, $Res1
    	Mov	R2, $Res2
    	Mov	R3, $Res3
    	Mov	R4, $Res4
    	Mov	R5, $Res6
    
    	Mov     #0, @#177712
    	MTPS	#0

    Давал такой результат:
    Код:
    Test 2
    ------
    1  1  2  2  2  2  2
    1  1  0  2  2  2  2
    1  0  2  2  2  2  1
    2  2  2  2  2  1  1
    1  1  2  2  2  2  2
    2  2  2  1  1  1  1
    2  2  2  2  2  1  1
    2  2  2  1  1  1  1
    1  1  1  1  1  2  2
    1  1  1  1  1  2  2
    1  1  1  1  1  2  2
    1  1  1  1  2  2  2
    1  1  1  1  2  2  2
    0  2  2  2  2  1  1
    1  1  2  2  2  2  1
    2  1  1  1  1  1  2
    2  2  2  2  1  1  1
    2  2  1  1  1  1  1
    1  1  1  1  2  2  2
    2  1  1  1  1  1  2
    1  0  2  2  2  2  1
    2  2  2  2  2  1  1
    1  2  2  2  2  2  1
    2  2  2  1  1  1  1
    Последний раз редактировалось Patron; 20.12.2014 в 14:30.

  10. #270

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Вопрос: как мне ножке порта присвоить еще и название (скажем, Y1)
    Это аттрибут PinName, когда создаете компонент надо его ввести и поставить галочку чтобы оно было видимым. На самой схеме можно отметить только ножку компонента, ПКМ->Properties и управлять видимостью имени вывода на конкретном экземпляре компонента.
    Цитата Сообщение от Patron Посмотреть сообщение
    У тестировавшегося мною ВЕ-таймера была такая особенность, что при счёте в режиме автоматической перезагрузки счётчика - в течении 5 тактов в регистре 177710 мог быть прочитан ноль.
    Угу, есть такое, на модели воспроизводится. Только не 5 тактов, а 4. 5 там никак не может быть, потому что блок таймера тактируется частотой CLC/4, чистая CLC на него нигде не заводится.

Страница 27 из 273 ПерваяПервая ... 232425262728293031 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 7
    Последнее: 28.06.2014, 17:50
  2. Микросхемы МПК 580,1801,1810 и другие...
    от Alex_Vac в разделе Барахолка (архив)
    Ответов: 44
    Последнее: 07.04.2012, 08:03
  3. ЦИФРОВАЯ МУЗЫКА НА ZX
    от AAA в разделе Музыка
    Ответов: 98
    Последнее: 18.09.2011, 22:33
  4. Учебный стенд УМПК-1801
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 12.05.2010, 16:52
  5. Цифровая музыка от Вадима Ермеева
    от zxmike в разделе Музыка
    Ответов: 2
    Последнее: 06.08.2007, 23:13

Метки этой темы

Ваши права

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