nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 06:30



Reply to topic  [ 193 posts ]  Go to page Previous  1 ... 7, 8, 9, 10, 11, 12, 13  Next
Самодельный процессор nedoRISC-0 (NEDONAND) 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos, а проверь на осциллографе, что у тебя там с самой длинной цепью -
сигнал действительно запаздывает, на столько, на сколько ты прикидывал теоретически,
или, может быть, реальный результат лучше?

_________________
iLavr


14 Mar 2016 11:32
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos, а проверь на осциллографе, что у тебя там с самой длинной цепью -
сигнал действительно запаздывает, на столько, на сколько ты прикидывал теоретически,
или, может быть, реальный результат лучше?


Я уже почти подобрался к этой задаче - обязательно отпишусь тут (надеюсь что с картинками сигналов), как разберусь вот с этой фиговиной :roll:

_________________
:dj: https://mastodon.social/@Shaos


14 Mar 2016 11:43
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
обязательно отпишусь тут (надеюсь что с картинками сигналов), как разберусь вот с этой фиговиной :roll:

У тебя ж вроде нормальный ослик есть... или полосы не хватает?

Моя "эта фиговина" попроще вроде, но в действии мне почему-то не понравилась... :osad:
"Неживая" какая-то.... :-?

_________________
iLavr


14 Mar 2016 12:44
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Да есть 2-лучевой 30-МГц старичок, но проблема если разрешение делать мелким, лучей почти не видно будет - до 2 МГц он ничё показывает, а всё что мельче - уже почти неразличимо...

_________________
:dj: https://mastodon.social/@Shaos


14 Mar 2016 14:02
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
А если на ждущей развертке с запуском от исходного сигнала?
Исходный - на первый луч, после задержки - на второй, аккурат задержку и должны увидеть...

_________________
iLavr


14 Mar 2016 14:21
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr wrote:
А если на ждущей развертке с запуском от исходного сигнала?
Исходный - на первый луч, после задержки - на второй, аккурат задержку и должны увидеть...

Ну опять же - надо подкручивать разрешение по времени, чтобы была видна задержка - а она менее 200 нс судя по всему (тестю пиком щас и пока на следующем шаге пика АЛУ уже всё посчитал, а это 200 нс в верхнем пределе), что значит надо гнать сигнал раза в два более быстрый чем 5 МГц, т.е. 10, а в 10 луч будет слабенький...

P.S. Ха, поподавал входные воздействия не подряд, а в разнобой (то 0x00, то 0xFF) и обнаружил, что в некоторых случаях 200 нс недостаточно чтобы АЛУ отработал и зафиксировал значения на выходах, но вот 400 нс похоже достаточно всегда! Выходит, что моя первоначальная оценка "на всём АЛУ - 4*31.5+4*3.5=140 нс (в худшем случае 180+20=200)" оказалась излишне оптимистичной и реальность несколько хуже худшего случая, но мне сейчас важно, чтобы оно не было хуже 300 нс, но проверить я это смогу только с помощью цифрового осциллоскопа...

_________________
:dj: https://mastodon.social/@Shaos


14 Mar 2016 18:00
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Вот программка для nedoCPU-16, которая перебирает все 4096 вариантов входных воздействий для 4-битного АЛУ и фиксирует по 5 значений на выходах со смещением по времени в 200 нс, 600 нс, 1000 нс, 1400 нс и 1800 нс (можно также пересобрать так, чтобы было 400 нс, 800 нс, 1200 нс и т.д. т.е. с первоначальным сдвигом в 200 нс - надо просто раскомментировать nop между записью в PORTB и первым чтением из PORTA):
 CODE
Code:
   processor pic16f870
   radix dec
   include "p16f870.inc"
   __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
   include "shaos-p16.inc"
        include "PDBLv1-2A2.inc"

; NN4 (bad one) -> nedoCPU-16
;-----------------------------
; 1) GND
; 2) D0 ~~~
; 3) D1 ~~~
; 4) D2 ~~~
; 5) D3 ~~~
; 6) COUT-> RA0 (flag C output)
; 7) VOUT-> RA1 (flag V output)
; 8) /O0    RA2 (wire to D0 output)
; 9) /O1    RA3 (wire to D1 output)
;10) /O2    RA4 (wire to D2 output)
;11) NC*    RA5 (wire to D3 output)
;12) VCC -> VCC
;13) --- -> GND
;14)     
;15) O0  -> RB0 (operation 0 input)
;16) O1  -> RB1 (operation 1 input)
;17) O2  -> RB2 (operation 2 input)
;18) C   -> RB3 (flag C input)
;19) A0  -> RB4 (argument A bit 0 input)
;20) A1  -> RB5 (argument A bit 1 input)
;21) A2  -> RB6 (argument A bit 2 input)
;22) A3  -> RB7 (argument A bit 3 input)
;23) B0 ~~~
;24) B1  -> RC0 (argument B bit 1 input)
;25) B2  -> RC1 (argument B bit 2 input)
;26) B3  -> RC2 (argument B bit 3 input)
;27)        RC3 (wire to B0 input)
;28)        RC4 (not connected)
;29)        RC5 (not connected)
;30)        RC6 (not connected - used for RS232)
;           RC7 (not connected - used for RS232)

; Variables

byte   equ   0x3C
prefix   equ   0x3D
store0   equ   0x40
store1   equ   0x41
store2   equ   0x42
store3   equ   0x43
store4   equ   0x44

; Reset vector
   ORG 00h
   goto Start

; Interrupt vector
   ORG 04h
   retfie

Start:

; Configure all I/O pins as digital
   _bank1
   _movlr 0x06,ADCON1

; Set direction of ports (A-inputs, B/C-outputs)
   _bank1
   _movlr b'11111111',TRISA
   _movlr b'00000000',TRISB
   _movlr b'11110000',TRISC

; Initialize output ports
   _bank0
   _movlr b'00000000',PORTA
   _movlr b'00000000',PORTB
   _movlr b'00000000',PORTC

; Setup interrupts
   _bank1
   clrf   INTCON ; disable all interrupts and clear all flags
   bcf   OPTION_REG,NOT_RBPU ; enable pull-ups
   bsf   OPTION_REG,INTEDG ; interrupt on rising edge
;   bsf   INTCON,INTE ; enable RB0 port change interrupt
;   bsf   INTCON,GIE ; enable interrupts

; Clear watch dog
   _bank0
   clrwdt

   goto   Main
go256:
        clrf    byte
go256loop:
   comf   PORTC,w
   movlw   255
   movwf   PORTB
   comf   PORTC,w
   nop

        movf    byte,w
        movwf   PORTB   ; 0.0us
;        nop ; to add 0.2us to everything below
        movf    PORTA,w ; 0.2us -> 0x40
        movwf   store0  ; 0.4us
        movf    PORTA,w ; 0.6us -> 0x41
        movwf   store1  ; 0.8us
        movf    PORTA,w ; 1.0us -> 0x42
        movwf   store2  ; 1.2us
        movf    PORTA,w ; 1.4us -> 0x43
        movwf   store3  ; 1.6us
        movf    PORTA,w ; 1.8us -> 0x44
        movwf   store4  ; 2.0us

        movf    prefix,w
        call serial_print_hex
        _serial_print_byte byte
        _serial_send_ ':'
        _serial_print_byte store0
        _serial_send_ ','
        _serial_print_byte store1
        _serial_send_ ','
        _serial_print_byte store2
        _serial_send_ ','
        _serial_print_byte store3
        _serial_send_ ','
        _serial_print_byte store4
        _serial_print_nl

        incfsz  byte,f
        goto    go256loop
        return

Main:
        _serial_print_nl
        _serial_send_ 'H'
        _serial_send_ 'E'
        _serial_send_ 'L'
        _serial_send_ 'L'
        _serial_send_ 'O'
        _serial_print_nl
MainLoop:
   _movlr   0,prefix
   _movlr   0,PORTC
   call   go256
   _movlr   1,prefix
   _movlr   8,PORTC
   call   go256
   _movlr   2,prefix
   _movlr   1,PORTC
   call   go256
   _movlr   3,prefix
   _movlr   9,PORTC
   call   go256
   _movlr   4,prefix
   _movlr   2,PORTC
   call   go256
   _movlr   5,prefix
   _movlr   10,PORTC
   call   go256
   _movlr   6,prefix
   _movlr   3,PORTC
   call   go256
   _movlr   7,prefix
   _movlr   11,PORTC
   call   go256
   _movlr   8,prefix
   _movlr   4,PORTC
   call   go256
   _movlr   9,prefix
   _movlr   12,PORTC
   call   go256
   _movlr   10,prefix
   _movlr   5,PORTC
   call   go256
   _movlr   11,prefix
   _movlr   13,PORTC
   call   go256
   _movlr   12,prefix
   _movlr   6,PORTC
   call   go256
   _movlr   13,prefix
   _movlr   14,PORTC
   call   go256
   _movlr   14,prefix
   _movlr   7,PORTC
   call   go256
   _movlr   15,prefix
   _movlr   15,PORTC
   call   go256

loop:
   goto   loop

   END

P.S. Вот пример того, что программа выводит в терминал:
Code:
16C:00,22,22,22,22
16D:00,22,22,22,22
16E:00,22,22,22,22
16F:02,22,22,22,22

Сначала идёт 12-битный код входного воздействия, а потом 5 шестнадцатиричных значений с выходов со смещением 0.2мкс, 0.6мкс, 1.0мкс, 1.4мкс и 1.8мкс...

_________________
:dj: https://mastodon.social/@Shaos


14 Mar 2016 19:46
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Пришли "неправильные" платки NEDONAND-4, немного подковырял как предполагалось выше:

Image

Image

Собрал тестовый "стэнд" для втыкания в него nedoCPU-16:

Image

Только наверное скорость особо 20-мегагерцовым пиком не померять т.к. он только 5 миллионов команд в секунду делает (это 200 нс)...


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

Image

_________________
:dj: https://mastodon.social/@Shaos


14 Mar 2016 19:56
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
поподавал входные воздействия не подряд, а в разнобой (то 0x00, то 0xFF) и обнаружил, что в некоторых случаях 200 нс недостаточно чтобы АЛУ отработал и зафиксировал значения на выходаха...

Попробуй еще 0xAA, 0x55 и 0xСС, 0x33 раз уж случилась такая "пьянка"... :wink:

_________________
iLavr


15 Mar 2016 01:18
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Вобщем написал на сях программку анализирующую лог файл с терминала с 200нс первым отступом и с 400нс первым отступом - в пером случае (200нс) иногда не успевало первый раз, во втором (400нс) - успевало всегда, вот исходник:
 CODE
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*

 This checker is only for older preliminary version of NEDONAND-4 board!

 Input:
 BBBBAAAACOOO

 Output:
 DDDDVC

*/

int main(int argc, char** argv)
{
 char n[100],s[256],u[8];
 int i,j,r[5],v,c;
 FILE *f;
 signed char a,b,d;

 if(argc<2) return -1;
 strcpy(n,argv[1]);
 f = fopen(n,"rt");
 if(f==NULL) return -1;
 fscanf(f,"%s\n",s);
 while(!feof(f))
 {
   fscanf(f,"%3X:%2X,%2X,%2X,%2X,%2X\n",&i,&r[0],&r[1],&r[2],&r[3],&r[4]);
//   printf("0x%4.4X:",i);
   v = -1;
   a = (i>>4)&15;
   b = (i>>8)&15;
   switch(i&7)
   {
     case 0:
        strcpy(u,"RRC");
        d = (i&8)|(a>>1);
        c = a&1;
        break;
     case 1:
        strcpy(u,"RLC");
        d = ((a&7)<<1)|((i&8)>>3);
        c = (a&8)>>3;
        break;
     case 2:
        strcpy(u,"NAN");
        d = (~(a&b))&15;
        c = 1;
        break;
     case 3:
        strcpy(u,"XOR");
        d = a^b;
        c = 1;
        break;
     case 4:
     case 5:
     case 6:
     case 7:
        strcpy(u,"ADD");
        d = a + b + ((i&8)>>3);
        c = (d&16)>>4;
        if(a&8) a|=0xF0;
        if(b&8) b|=0xF0;
        d = a + b + ((i&8)>>3);
        if((d<0 && !(d&8)) || (d>0 && (d&8)))
           v = 1;
        else
           v = 0;
        break;
   }
   for(j=0;j<5;j++)
   {
//      printf(" 0x%2.2X",r[j]);
     if((d&15)!=(r[j]>>2) ||
        c!=(r[j]&1) ||
        (v>=0 && ((r[j]&2)>>1)!=v))
     {
       printf("%s %3.3X[%i] %2.2X a=%i b=%i c=%i -> d=%i (%i) c=%i (%i)",u,i,j,r[j],a,b,(i&8)>>3,d,r[j]>>2,c,r[j]&1);
       if(v>=0) printf(" v=%i (%i)",v,(r[j]&2)>>1);
       printf("\n");
     }
   }
//   printf("\n");
 }

 fclose(f);
 return 0;
}


Результат работы программки по анализу лога с 4096 записями при первом отступе 200нс:
Code:
ADD 0EC[0] 3F a=-2 b=0 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD 0ED[0] 3F a=-2 b=0 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD 0EE[0] 3F a=-2 b=0 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD 0EF[0] 3F a=-2 b=0 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD 16C[0] 00 a=6 b=1 c=1 -> d=8 (0) c=0 (0) v=1 (0)
ADD 16D[0] 00 a=6 b=1 c=1 -> d=8 (0) c=0 (0) v=1 (0)
ADD 16E[0] 00 a=6 b=1 c=1 -> d=8 (0) c=0 (0) v=1 (0)
ADD 16F[0] 02 a=6 b=1 c=1 -> d=8 (0) c=0 (0) v=1 (1)
ADD 1EC[0] 20 a=-2 b=1 c=1 -> d=0 (8) c=1 (0) v=0 (0)
ADD 1ED[0] 20 a=-2 b=1 c=1 -> d=0 (8) c=1 (0) v=0 (0)
ADD 1EE[0] 20 a=-2 b=1 c=1 -> d=0 (8) c=1 (0) v=0 (0)
ADD 1EF[0] 20 a=-2 b=1 c=1 -> d=0 (8) c=1 (0) v=0 (0)
ADD 24C[0] 3E a=4 b=2 c=1 -> d=7 (15) c=0 (0) v=0 (1)
ADD 24D[0] 3E a=4 b=2 c=1 -> d=7 (15) c=0 (0) v=0 (1)
ADD 24E[0] 3E a=4 b=2 c=1 -> d=7 (15) c=0 (0) v=0 (1)
ADD 24F[0] 3E a=4 b=2 c=1 -> d=7 (15) c=0 (0) v=0 (1)
ADD 2CC[0] 1F a=-4 b=2 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD 2CD[0] 1F a=-4 b=2 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD 2CE[0] 1F a=-4 b=2 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD 2CF[0] 1F a=-4 b=2 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD 2DC[0] 03 a=-3 b=2 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD 2DD[0] 03 a=-3 b=2 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD 2DE[0] 03 a=-3 b=2 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD 2DF[0] 03 a=-3 b=2 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD 34C[0] 02 a=4 b=3 c=1 -> d=8 (0) c=0 (0) v=1 (1)
ADD 34D[0] 02 a=4 b=3 c=1 -> d=8 (0) c=0 (0) v=1 (1)
ADD 34E[0] 02 a=4 b=3 c=1 -> d=8 (0) c=0 (0) v=1 (1)
ADD 34F[0] 02 a=4 b=3 c=1 -> d=8 (0) c=0 (0) v=1 (1)
ADD 3CC[0] 20 a=-4 b=3 c=1 -> d=0 (8) c=1 (0) v=0 (0)
ADD 3CD[0] 22 a=-4 b=3 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 3CE[0] 22 a=-4 b=3 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 3CF[0] 22 a=-4 b=3 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 3D4[0] 03 a=-3 b=3 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD 3D5[0] 03 a=-3 b=3 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD 3D6[0] 03 a=-3 b=3 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD 3D7[0] 03 a=-3 b=3 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD 3DC[0] 07 a=-3 b=3 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD 3DD[0] 07 a=-3 b=3 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD 3DE[0] 07 a=-3 b=3 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD 3DF[0] 07 a=-3 b=3 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD 485[0] 32 a=-8 b=4 c=0 -> d=-4 (12) c=0 (0) v=0 (1)
ADD 48C[0] 36 a=-8 b=4 c=1 -> d=-3 (13) c=0 (0) v=0 (1)
ADD 48D[0] 36 a=-8 b=4 c=1 -> d=-3 (13) c=0 (0) v=0 (1)
ADD 494[0] 36 a=-7 b=4 c=0 -> d=-3 (13) c=0 (0) v=0 (1)
ADD 49F[0] 3A a=-7 b=4 c=1 -> d=-2 (14) c=0 (0) v=0 (1)
ADD 4A4[0] 3A a=-6 b=4 c=0 -> d=-2 (14) c=0 (0) v=0 (1)
ADD 4A5[0] 3A a=-6 b=4 c=0 -> d=-2 (14) c=0 (0) v=0 (1)
ADD 4A6[0] 3A a=-6 b=4 c=0 -> d=-2 (14) c=0 (0) v=0 (1)
ADD 4A7[0] 3A a=-6 b=4 c=0 -> d=-2 (14) c=0 (0) v=0 (1)
ADD 4AC[0] 3D a=-6 b=4 c=1 -> d=-1 (15) c=0 (1) v=0 (0)
ADD 4AD[0] 3D a=-6 b=4 c=1 -> d=-1 (15) c=0 (1) v=0 (0)
ADD 4AE[0] 3D a=-6 b=4 c=1 -> d=-1 (15) c=0 (1) v=0 (0)
ADD 4AF[0] 3D a=-6 b=4 c=1 -> d=-1 (15) c=0 (1) v=0 (0)
ADD 4B4[0] 3E a=-5 b=4 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 4B5[0] 3E a=-5 b=4 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 4B6[0] 3E a=-5 b=4 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 52C[0] 00 a=2 b=5 c=1 -> d=8 (0) c=0 (0) v=1 (0)
ADD 52D[0] 00 a=2 b=5 c=1 -> d=8 (0) c=0 (0) v=1 (0)
ADD 52E[0] 00 a=2 b=5 c=1 -> d=8 (0) c=0 (0) v=1 (0)
ADD 52F[0] 00 a=2 b=5 c=1 -> d=8 (0) c=0 (0) v=1 (0)
ADD 584[0] 36 a=-8 b=5 c=0 -> d=-3 (13) c=0 (0) v=0 (1)
ADD 585[0] 36 a=-8 b=5 c=0 -> d=-3 (13) c=0 (0) v=0 (1)
ADD 58F[0] 3A a=-8 b=5 c=1 -> d=-2 (14) c=0 (0) v=0 (1)
ADD 597[0] 3A a=-7 b=5 c=0 -> d=-2 (14) c=0 (0) v=0 (1)
ADD 59D[0] 3E a=-7 b=5 c=1 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 59E[0] 3E a=-7 b=5 c=1 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 59F[0] 3E a=-7 b=5 c=1 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 5A4[0] 3E a=-6 b=5 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 5A5[0] 3E a=-6 b=5 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 5A6[0] 3E a=-6 b=5 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 5A7[0] 3E a=-6 b=5 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 5AC[0] 22 a=-6 b=5 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 5AD[0] 22 a=-6 b=5 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 5AE[0] 22 a=-6 b=5 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 5AF[0] 22 a=-6 b=5 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 60C[0] 3C a=0 b=6 c=1 -> d=7 (15) c=0 (0) v=0 (0)
ADD 60D[0] 3C a=0 b=6 c=1 -> d=7 (15) c=0 (0) v=0 (0)
ADD 60E[0] 3C a=0 b=6 c=1 -> d=7 (15) c=0 (0) v=0 (0)
ADD 60F[0] 3C a=0 b=6 c=1 -> d=7 (15) c=0 (0) v=0 (0)
ADD 68C[0] 1F a=-8 b=6 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD 68D[0] 1F a=-8 b=6 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD 68E[0] 1F a=-8 b=6 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD 68F[0] 1F a=-8 b=6 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD 69C[0] 03 a=-7 b=6 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD 69D[0] 03 a=-7 b=6 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD 69E[0] 03 a=-7 b=6 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD 69F[0] 03 a=-7 b=6 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD 70C[0] 02 a=0 b=7 c=1 -> d=8 (0) c=0 (0) v=1 (1)
ADD 70D[0] 02 a=0 b=7 c=1 -> d=8 (0) c=0 (0) v=1 (1)
ADD 78C[0] 22 a=-8 b=7 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 78D[0] 22 a=-8 b=7 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 78E[0] 22 a=-8 b=7 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 78F[0] 22 a=-8 b=7 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 794[0] 03 a=-7 b=7 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD 795[0] 03 a=-7 b=7 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD 796[0] 03 a=-7 b=7 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD 797[0] 03 a=-7 b=7 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD 79C[0] 07 a=-7 b=7 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD 79D[0] 07 a=-7 b=7 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD 79E[0] 07 a=-7 b=7 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD 79F[0] 07 a=-7 b=7 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD 864[0] 3A a=6 b=-8 c=0 -> d=-2 (14) c=0 (0) v=0 (1)
ADD 865[0] 3A a=6 b=-8 c=0 -> d=-2 (14) c=0 (0) v=0 (1)
ADD 86C[0] 3F a=6 b=-8 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD 86D[0] 3F a=6 b=-8 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD 86E[0] 3F a=6 b=-8 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD 86F[0] 3F a=6 b=-8 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD 874[0] 3E a=7 b=-8 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 875[0] 3E a=7 b=-8 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 964[0] 3E a=6 b=-7 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 965[0] 3E a=6 b=-7 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 966[0] 3E a=6 b=-7 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 967[0] 3E a=6 b=-7 c=0 -> d=-1 (15) c=0 (0) v=0 (1)
ADD 96C[0] 22 a=6 b=-7 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 96D[0] 22 a=6 b=-7 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 96E[0] 22 a=6 b=-7 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 96F[0] 22 a=6 b=-7 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD 9EC[0] 03 a=-2 b=-7 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD 9ED[0] 03 a=-2 b=-7 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD 9EE[0] 03 a=-2 b=-7 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD 9EF[0] 03 a=-2 b=-7 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD A4C[0] 1F a=4 b=-6 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD A4D[0] 1F a=4 b=-6 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD A4E[0] 1F a=4 b=-6 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD A4F[0] 1F a=4 b=-6 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD A5C[0] 03 a=5 b=-6 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD A5D[0] 03 a=5 b=-6 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD A5E[0] 03 a=5 b=-6 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD A5F[0] 03 a=5 b=-6 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD ACC[0] 3D a=-4 b=-6 c=1 -> d=-9 (15) c=1 (1) v=1 (0)
ADD ACD[0] 3D a=-4 b=-6 c=1 -> d=-9 (15) c=1 (1) v=1 (0)
ADD ACE[0] 3D a=-4 b=-6 c=1 -> d=-9 (15) c=1 (1) v=1 (0)
ADD ACF[0] 3D a=-4 b=-6 c=1 -> d=-9 (15) c=1 (1) v=1 (0)
ADD B4C[0] 20 a=4 b=-5 c=1 -> d=0 (8) c=1 (0) v=0 (0)
ADD B4D[0] 22 a=4 b=-5 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD B4E[0] 20 a=4 b=-5 c=1 -> d=0 (8) c=1 (0) v=0 (0)
ADD B4F[0] 22 a=4 b=-5 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD B54[0] 03 a=5 b=-5 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD B55[0] 03 a=5 b=-5 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD B56[0] 03 a=5 b=-5 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD B57[0] 03 a=5 b=-5 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD B5C[0] 07 a=5 b=-5 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD B5D[0] 07 a=5 b=-5 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD B5E[0] 07 a=5 b=-5 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD B5F[0] 07 a=5 b=-5 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD BCC[0] 03 a=-4 b=-5 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD BCD[0] 03 a=-4 b=-5 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD BCE[0] 03 a=-4 b=-5 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD BCF[0] 23 a=-4 b=-5 c=1 -> d=-8 (8) c=1 (1) v=0 (1)
ADD C04[0] 33 a=0 b=-4 c=0 -> d=-4 (12) c=0 (1) v=0 (1)
ADD C05[0] 33 a=0 b=-4 c=0 -> d=-4 (12) c=0 (1) v=0 (1)
ADD C06[0] 33 a=0 b=-4 c=0 -> d=-4 (12) c=0 (1) v=0 (1)
ADD C07[0] 33 a=0 b=-4 c=0 -> d=-4 (12) c=0 (1) v=0 (1)
ADD C0C[0] 37 a=0 b=-4 c=1 -> d=-3 (13) c=0 (1) v=0 (1)
ADD C0D[0] 37 a=0 b=-4 c=1 -> d=-3 (13) c=0 (1) v=0 (1)
ADD C0E[0] 36 a=0 b=-4 c=1 -> d=-3 (13) c=0 (0) v=0 (1)
ADD C0F[0] 37 a=0 b=-4 c=1 -> d=-3 (13) c=0 (1) v=0 (1)
ADD C14[0] 37 a=1 b=-4 c=0 -> d=-3 (13) c=0 (1) v=0 (1)
ADD C15[0] 37 a=1 b=-4 c=0 -> d=-3 (13) c=0 (1) v=0 (1)
ADD C16[0] 37 a=1 b=-4 c=0 -> d=-3 (13) c=0 (1) v=0 (1)
ADD C17[0] 37 a=1 b=-4 c=0 -> d=-3 (13) c=0 (1) v=0 (1)
ADD C1C[0] 3B a=1 b=-4 c=1 -> d=-2 (14) c=0 (1) v=0 (1)
ADD C1D[0] 3B a=1 b=-4 c=1 -> d=-2 (14) c=0 (1) v=0 (1)
ADD C1E[0] 3B a=1 b=-4 c=1 -> d=-2 (14) c=0 (1) v=0 (1)
ADD C1F[0] 3B a=1 b=-4 c=1 -> d=-2 (14) c=0 (1) v=0 (1)
ADD C24[0] 3B a=2 b=-4 c=0 -> d=-2 (14) c=0 (1) v=0 (1)
ADD C25[0] 3B a=2 b=-4 c=0 -> d=-2 (14) c=0 (1) v=0 (1)
ADD C26[0] 3B a=2 b=-4 c=0 -> d=-2 (14) c=0 (1) v=0 (1)
ADD C27[0] 3B a=2 b=-4 c=0 -> d=-2 (14) c=0 (1) v=0 (1)
ADD C2C[0] 3D a=2 b=-4 c=1 -> d=-1 (15) c=0 (1) v=0 (0)
ADD C2D[0] 3D a=2 b=-4 c=1 -> d=-1 (15) c=0 (1) v=0 (0)
ADD C2E[0] 3D a=2 b=-4 c=1 -> d=-1 (15) c=0 (1) v=0 (0)
ADD C2F[0] 3F a=2 b=-4 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD C34[0] 3F a=3 b=-4 c=0 -> d=-1 (15) c=0 (1) v=0 (1)
ADD C35[0] 3F a=3 b=-4 c=0 -> d=-1 (15) c=0 (1) v=0 (1)
ADD C36[0] 3F a=3 b=-4 c=0 -> d=-1 (15) c=0 (1) v=0 (1)
ADD C37[0] 3F a=3 b=-4 c=0 -> d=-1 (15) c=0 (1) v=0 (1)
ADD D04[0] 37 a=0 b=-3 c=0 -> d=-3 (13) c=0 (1) v=0 (1)
ADD D05[0] 37 a=0 b=-3 c=0 -> d=-3 (13) c=0 (1) v=0 (1)
ADD D06[0] 37 a=0 b=-3 c=0 -> d=-3 (13) c=0 (1) v=0 (1)
ADD D07[0] 36 a=0 b=-3 c=0 -> d=-3 (13) c=0 (0) v=0 (1)
ADD D0C[0] 3B a=0 b=-3 c=1 -> d=-2 (14) c=0 (1) v=0 (1)
ADD D0D[0] 3B a=0 b=-3 c=1 -> d=-2 (14) c=0 (1) v=0 (1)
ADD D0E[0] 3B a=0 b=-3 c=1 -> d=-2 (14) c=0 (1) v=0 (1)
ADD D0F[0] 3B a=0 b=-3 c=1 -> d=-2 (14) c=0 (1) v=0 (1)
ADD D14[0] 3B a=1 b=-3 c=0 -> d=-2 (14) c=0 (1) v=0 (1)
ADD D15[0] 3B a=1 b=-3 c=0 -> d=-2 (14) c=0 (1) v=0 (1)
ADD D16[0] 3B a=1 b=-3 c=0 -> d=-2 (14) c=0 (1) v=0 (1)
ADD D17[0] 3A a=1 b=-3 c=0 -> d=-2 (14) c=0 (0) v=0 (1)
ADD D1C[0] 3F a=1 b=-3 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD D1D[0] 3F a=1 b=-3 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD D1E[0] 3F a=1 b=-3 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD D1F[0] 3F a=1 b=-3 c=1 -> d=-1 (15) c=0 (1) v=0 (1)
ADD D24[0] 3F a=2 b=-3 c=0 -> d=-1 (15) c=0 (1) v=0 (1)
ADD D25[0] 3F a=2 b=-3 c=0 -> d=-1 (15) c=0 (1) v=0 (1)
ADD D26[0] 3F a=2 b=-3 c=0 -> d=-1 (15) c=0 (1) v=0 (1)
ADD D27[0] 3F a=2 b=-3 c=0 -> d=-1 (15) c=0 (1) v=0 (1)
ADD D2C[0] 23 a=2 b=-3 c=1 -> d=0 (8) c=1 (1) v=0 (1)
ADD D2D[0] 22 a=2 b=-3 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD D2E[0] 22 a=2 b=-3 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD D2F[0] 22 a=2 b=-3 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD DAC[0] 03 a=-6 b=-3 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD DAD[0] 03 a=-6 b=-3 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD DAE[0] 03 a=-6 b=-3 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD DAF[0] 03 a=-6 b=-3 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD E0C[0] 1F a=0 b=-2 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD E0D[0] 1F a=0 b=-2 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD E0E[0] 1F a=0 b=-2 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD E0F[0] 1F a=0 b=-2 c=1 -> d=-1 (7) c=0 (1) v=0 (1)
ADD E1C[0] 03 a=1 b=-2 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD E1D[0] 03 a=1 b=-2 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD E1E[0] 03 a=1 b=-2 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD E1F[0] 03 a=1 b=-2 c=1 -> d=0 (0) c=1 (1) v=0 (1)
ADD E8C[0] 3D a=-8 b=-2 c=1 -> d=-9 (15) c=1 (1) v=1 (0)
ADD E8D[0] 3D a=-8 b=-2 c=1 -> d=-9 (15) c=1 (1) v=1 (0)
ADD E8E[0] 3D a=-8 b=-2 c=1 -> d=-9 (15) c=1 (1) v=1 (0)
ADD E8F[0] 3D a=-8 b=-2 c=1 -> d=-9 (15) c=1 (1) v=1 (0)
ADD F0C[0] 22 a=0 b=-1 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD F0D[0] 22 a=0 b=-1 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD F0E[0] 22 a=0 b=-1 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD F0F[0] 22 a=0 b=-1 c=1 -> d=0 (8) c=1 (0) v=0 (1)
ADD F14[0] 03 a=1 b=-1 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD F15[0] 03 a=1 b=-1 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD F16[0] 03 a=1 b=-1 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD F17[0] 03 a=1 b=-1 c=0 -> d=0 (0) c=1 (1) v=0 (1)
ADD F1C[0] 07 a=1 b=-1 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD F1D[0] 07 a=1 b=-1 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD F1E[0] 07 a=1 b=-1 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD F1F[0] 07 a=1 b=-1 c=1 -> d=1 (1) c=1 (1) v=0 (1)
ADD F8C[0] 03 a=-8 b=-1 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD F8D[0] 03 a=-8 b=-1 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD F8E[0] 03 a=-8 b=-1 c=1 -> d=-8 (0) c=1 (1) v=0 (1)
ADD F8F[0] 23 a=-8 b=-1 c=1 -> d=-8 (8) c=1 (1) v=0 (1)


Как видим не успевает только сложение (ADD) и только самый первый сэмпл [0], напомню, что эта версия АЛУ всегда делает сложение при коде операции 1XX). В большинстве случаев (если не во всех) это неготовность самого старшего бита результата (четвёртого) и/или флагов C/V. Радует, что к моменту 400нс оно всё успевает - надо ещё будет на оциллографе заснять эти задержки, чтобы понять реальный предел (хотелось бы меньше 300нс)...

P.S. Все логи и сырцы лежат на гитхабе: https://github.com/shaos/nedonand/tree/master/tester

_________________
:dj: https://mastodon.social/@Shaos


15 Mar 2016 15:30
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Вобщем решил собирать NEDONAND в виде гибрида - в качестве центральной будет wire-wrap платка поменьше (но с посадочными местами точно под DIP14), к которой приделана макетка куда будут припаяны разъёмы для втыкания вспомогательных платок (таких разъёмов с wire-wrap ногами не выпускают):

Image

Пару разъёмов получилось припаять к самой плате:

Image

Прикинул, что для реализации первой ступени конвейера (и демы "HELLO") мне понадобиться 17 микросхем 74F00 и некоторое количество NEDONAND-платок...

_________________
:dj: https://mastodon.social/@Shaos


15 Mar 2016 23:12
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Припаял разъёмы для регистров A,B,C,D,E,T, двух мультиплексоров 8x2:1 и ещё 2 регистров R и A' (аргументы ALU) и чуть ниже начал припаивать разъёмы покороче для мультиплексоров 8:1 пока они не закончились. Кроме того прикрутил 60-ногий разъёмчик (справа вверху) на котором будут встречаться припаянные и прикрученные проводки:

Image

Также поставил платку на ножки:

Image

_________________
:dj: https://mastodon.social/@Shaos


16 Mar 2016 21:23
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Что-то как-то проволоками "на соплях" две платы скрутил... :-?
В "раю для радиолюбителей" не нашлось пары винтов М3 с гайками и шайбочками? :roll:
Ну пусть хоть дюймовые, если в "раю" нет М3... :wink:

_________________
iLavr


17 Mar 2016 03:12
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr wrote:
Что-то как-то проволоками "на соплях" две платы скрутил... :-?
В "раю для радиолюбителей" не нашлось пары винтов М3 с гайками и шайбочками? :roll:
Ну пусть хоть дюймовые, если в "раю" нет М3... :wink:


Да у них дырки не совпадают, а новые сверлить - неохота ;)

_________________
:dj: https://mastodon.social/@Shaos


17 Mar 2016 06:24
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
Вот пример инкремента регистровой пары DE:
Code:
A=E ; no ALU
A=A+1 ; used ALU (2nd stage of pipeline)
NOP ; no ALU (required because A is not yet ready)
E=A ; no ALU
A=0 ; no ALU
ADC D ; used ALU (2nd stage of pipeline)
NOP ; no ALU (required because A is not yet ready)
D=A ; no ALU

8 циклов, причём только 2 из них используют вторую ступень конвейера, а в остальные 6 (NOP-ы могут быть заменены на другие более полезные команды, не задевающие аккумулятор) АЛУ может быть задействовано для чего-нибудь ещё...


Не нравятся мне эти дырки между операциями ALU и копированием аккумулятора куда-то. В-принципе, проц может распознать, что следом за командой, требующей ALU, идёт копирование из аккумулятора, и в результате проц может изменить поведение этой команды копирования, чтобы копировать НЕ аккумулятор, а результат работы ALU ! Причём результат ALU надо записать одновременно в 2 регистра - в регистра аккумулятора и в регистр куда аккумулятор скопировали - по идее должно срастись...


Для этого должна быть возможность при копировании регистров выдавать на их вход не только выходы регистра T (временный регистр, используемый при копировании регистров), но и выход АЛУ (который в обычном случае идёт только на вход аккумулятора, причём минуя всё это кольцо через T). Другой вопрос, что если после операции АЛУ идёт не копирование в регистр, а другая операция АЛУ, использующая аккумулятор в качестве аргумента? Например два сдвига подряд - RRC A, RRC A или что-то типа этого. В этом случае при копировании аргументов для второй RRC должен браться не регистр A, а выход АЛУ...

_________________
:dj: https://mastodon.social/@Shaos


17 Mar 2016 23:56
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 193 posts ]  Go to page Previous  1 ... 7, 8, 9, 10, 11, 12, 13  Next

Who is online

Users browsing this forum: No registered users and 26 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.