Самодельный процессор nedoRISC-0 (NEDONAND)

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Lavr »

Shaos, а проверь на осциллографе, что у тебя там с самой длинной цепью -
сигнал действительно запаздывает, на столько, на сколько ты прикидывал теоретически,
или, может быть, реальный результат лучше?
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Lavr wrote:Shaos, а проверь на осциллографе, что у тебя там с самой длинной цепью -
сигнал действительно запаздывает, на столько, на сколько ты прикидывал теоретически,
или, может быть, реальный результат лучше?
Я уже почти подобрался к этой задаче - обязательно отпишусь тут (надеюсь что с картинками сигналов), как разберусь вот с этой фиговиной :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Lavr »

Shaos wrote:обязательно отпишусь тут (надеюсь что с картинками сигналов), как разберусь вот с этой фиговиной :roll:
У тебя ж вроде нормальный ослик есть... или полосы не хватает?

Моя "эта фиговина" попроще вроде, но в действии мне почему-то не понравилась... :osad:
"Неживая" какая-то.... :-?
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Да есть 2-лучевой 30-МГц старичок, но проблема если разрешение делать мелким, лучей почти не видно будет - до 2 МГц он ничё показывает, а всё что мельче - уже почти неразличимо...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Lavr »

А если на ждущей развертке с запуском от исходного сигнала?
Исходный - на первый луч, после задержки - на второй, аккурат задержку и должны увидеть...
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

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

P.S. Ха, поподавал входные воздействия не подряд, а в разнобой (то 0x00, то 0xFF) и обнаружил, что в некоторых случаях 200 нс недостаточно чтобы АЛУ отработал и зафиксировал значения на выходах, но вот 400 нс похоже достаточно всегда! Выходит, что моя первоначальная оценка "на всём АЛУ - 4*31.5+4*3.5=140 нс (в худшем случае 180+20=200)" оказалась излишне оптимистичной и реальность несколько хуже худшего случая, но мне сейчас важно, чтобы оно не было хуже 300 нс, но проверить я это смогу только с помощью цифрового осциллоскопа...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Вот программка для nedoCPU-16, которая перебирает все 4096 вариантов входных воздействий для 4-битного АЛУ и фиксирует по 5 значений на выходах со смещением по времени в 200 нс, 600 нс, 1000 нс, 1400 нс и 1800 нс (можно также пересобрать так, чтобы было 400 нс, 800 нс, 1200 нс и т.д. т.е. с первоначальным сдвигом в 200 нс - надо просто раскомментировать nop между записью в PORTB и первым чтением из PORTA):

 CODE

Code: Select all

	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: Select all

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мкс...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0

Post by Shaos »

Shaos wrote:Пришли "неправильные" платки NEDONAND-4, немного подковырял как предполагалось выше:

Image

Image

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

Image

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

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Lavr »

Shaos wrote:поподавал входные воздействия не подряд, а в разнобой (то 0x00, то 0xFF) и обнаружил, что в некоторых случаях 200 нс недостаточно чтобы АЛУ отработал и зафиксировал значения на выходаха...
Попробуй еще 0xAA, 0x55 и 0xСС, 0x33 раз уж случилась такая "пьянка"... :wink:
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Вобщем написал на сях программку анализирующую лог файл с терминала с 200нс первым отступом и с 400нс первым отступом - в пером случае (200нс) иногда не успевало первый раз, во втором (400нс) - успевало всегда, вот исходник:

 CODE

Code: Select all

#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: Select all

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
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Вобщем решил собирать NEDONAND в виде гибрида - в качестве центральной будет wire-wrap платка поменьше (но с посадочными местами точно под DIP14), к которой приделана макетка куда будут припаяны разъёмы для втыкания вспомогательных платок (таких разъёмов с wire-wrap ногами не выпускают):

Image

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

Image

Прикинул, что для реализации первой ступени конвейера (и демы "HELLO") мне понадобиться 17 микросхем 74F00 и некоторое количество NEDONAND-платок...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Припаял разъёмы для регистров A,B,C,D,E,T, двух мультиплексоров 8x2:1 и ещё 2 регистров R и A' (аргументы ALU) и чуть ниже начал припаивать разъёмы покороче для мультиплексоров 8:1 пока они не закончились. Кроме того прикрутил 60-ногий разъёмчик (справа вверху) на котором будут встречаться припаянные и прикрученные проводки:

Image

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

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Lavr »

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

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Lavr wrote:Что-то как-то проволоками "на соплях" две платы скрутил... :-?
В "раю для радиолюбителей" не нашлось пары винтов М3 с гайками и шайбочками? :roll:
Ну пусть хоть дюймовые, если в "раю" нет М3... :wink:
Да у них дырки не совпадают, а новые сверлить - неохота ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Shaos wrote:
Shaos wrote:Вот пример инкремента регистровой пары DE:

Code: Select all

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, а выход АЛУ...
Я тут за главного - если что шлите мыло на me собака shaos точка net