87
CU6 PROYECTO CU6 DISEÑO EN VHDL DE MICROPROCESADOR ELEMENTAL CON UN REGISTRO INTERNO CON ACCESO DIRECTO A LA MEMORIA DE DATOS PARA REALIZAR LECTURA Y ESCRITURA DE LA MISMA Y OPERACIONES ARITMÉTICO-LÓGICAS ENTRE ELLA Y DICHO REGISTRO.

Facultad de Ingeniería - UNLP - PROYECTO CU6catedra.ing.unlp.edu.ar/electrotecnia/islyd/Seminario... · 2016. 4. 25. · las instrucciones test bit jmp if clr y test bit jmp if set,

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • CU6 PROYECTO CU6

    DISEÑO EN VHDL DE MICROPROCESADOR ELEMENTAL CON UN REGISTRO INTERNO CON ACCESO DIRECTO A LA MEMORIA DE DATOS PARA REALIZAR LECTURA Y ESCRITURA DE LA MISMA Y OPERACIONES ARITMÉTICO-LÓGICAS ENTRE ELLA Y DICHO REGISTRO.

  • BUS DATA MEM IN

    BUS DATA MEM OUT

    BUS DIR MEM

    MEM

    OR

    IA

    uP16

    BUS CONTROL

    CLK RST

    CPU

    MA

    R

    MD

    RO

    M

    DR

    I

    FPGA CU6

    MEM

    OR

    IA

    IR

    PC

    16

    R

    MU

    XM

    AR

    RX

    MUXRX

    ALU

    CLK_UP16

    DIV_CLK

  • CU6

    14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IR 15

    00000000 = CLR RX 00000001 = INC RX 00000010 = LDI RX 00000011 = DEC RX 00000100 = NOP 10000000 = RST 00000101 = LDD RX 00000110 = STR RX 00000111 = OPERACIONES ARITMÉTICO- LÓGICAS ENTRE MEMORIA DE DATOS Y REGISTRO “RX”.

    01000 RX RX +MEM 01001 RX RX + MEM +C 01010 RX RX - MEM 010 11 RX RX – MEM - C 10001 RX NOT RX 00101 RX SWAP RX 10000 RX SLA RX 10001 RX SRA RX 10010 RX SLL RX 10011 RX SRL RX 11000 RX RX AND MEM 11001 RX RX NAND MEM 11010 RX RX OR MEM 11011 RX RX NOR MEM 11100 RX RX XOR MEM 11101 RX RX XNOR MEM

    EN “0”

  • FPGA ALUR

    clockalu

    entradaalu_a

    opselecalu (4..0)

    16

    16

    GENERADOR DE ESTÍMULOS

    DESDE TEST BENCH

    salidaalu

    ALU

    entradaalu_b

    16

  • Sergio Noriega - 2014

    ALUR

  • Sergio Noriega - 2014

    ALUR

    IMPLEMENTACIÓN DE “A + B + CARRY”

    y “A – B – CARRY”

    RECIÉN EN EL PROYECTO CU7

  • Sergio Noriega - 2014

    ALUR TEST-BENCH DE ALUR

  • Sergio Noriega - 2014

    ALUR

  • Sergio Noriega - 2014

    ALUR

  • ALUR

    salidaalu

  • ALUR

    salidaalu

  • ALUR

    salidaalu

  • ALUR

    salidaalu

  • MUXRX

  • MUXRX

  • MUXRX TEST-BENCH DE MUXRX

  • MUXRX

  • Sergio Noriega - 2014

    CU6

    (1) TRABAJOS CON INSTRUCCIONES SÓLO CON RX: --REALIZAR OPERACIÓN. --GRABAR RESULTADO EN EL REGISTRO. (2) TRABAJOS CON INSTRUCCIONES ENTRE RX Y MEM: --LEER DATO DE MEMORIA. --REALIZAR OPERACIÓN. --GRABAR RESULTADO EN EL REGISTRO. PARA OPTIMIZAR EL USO DE ESTADOS SE APROVECHA PARTE DE LAS RUTINAS DE (1) EN LAS ACTIVIDADES DE (2) COMO SE HIZO EN EL PROYECTO ANTERIOR CON STR_RX/LDD_RX Y LDI_RX.

  • Sergio Noriega - 2014

    CU6

  • Sergio Noriega - 2014

    CU6

  • Sergio Noriega - 2014

    CU6

  • Sergio Noriega - 2014

    CU6

  • Sergio Noriega - 2014

    CU6

    TEST-BENCH PARA CU6

  • Sergio Noriega - 2014

    CU6 REPORTE DEL COMPILADOR

  • CU6 CONTENIDO DEL ARCHIVO RAM.HEX PARA ESTE PROYECTO

    Instrucciones cargadas en RAM: LDI RX, 0200 STR RX, 0800 LDI RX, 0018 STR RX, 0801 LDD RX, RST RX + MEM, 0801 LDI RX, F001 SLL RX SRL RX SRL RX RX AND MEM, 0800 NOT RX RST

  • CU6

    TEST BENCH PARA VERIFICAR CONTENIDO DE RAM PARA ESTE PROYECTO

  • CU6

    LDI RX, 0800 LDI RX, 0801 LDD RX, 0800 RX + MEM SLL SRL RX AND MEM NOT RX

  • CU7 PROYECTO CU7

    DISEÑO EN VHDL DE MICROPROCESADOR ELEMENTAL CON UN REGISTRO INTERNO CON ACCESO DIRECTO A LA MEMORIA DE DATOS PARA REALIZAR LECTURA Y ESCRITURA DE LA MISMA Y OPERACIONES ARITMÉTICO-LÓGICAS ENTRE ELLA Y DICHO REGISTRO. SE ADICIONAN INSTRUCCIONES PARA IMPLEMENTAR REDIRECCIONAMIENTO CONDICIONAL E INCONDICIONAL Y OPERACIONES CONDICIONALES CON REGISTRO RX.

  • BUS DATA MEM IN

    BUS DATA MEM OUT

    BUS DIR MEM

    MEM

    OR

    IA

    uP16

    BUS CONTROL CPU

    MA

    R

    MD

    RO

    M

    DR

    I

    FPGA CU7

    MEM

    OR

    IA

    IR

    PC

    16

    R

    MU

    XM

    AR

    RX

    MUXRX

    ALU CCR

    CLK RST

    CLK_UP16

    DIV_CLK 0

    1

    0 1

    Nota: Ahora MDRO se conecta a la salida de la ALU

  • CU7

    14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IR 15

    00000000 = CLR RX 00000001 = INC RX 00000010 = LDI RX 00000011 = DEC RX 00000100 = NOP 10000000 = RST 00000101 = LDD RX 00000110 = STR RX 00000111 = OPERACIONES ARITMÉTICO- LÓGICAS ENTRE MEMORIA DE DATOS Y REGISTRO “RX”. 00010000 = JMP PC, (MEMCODE+1) 00010001 = JMP PC, IF Z 00010010 = JMP PC, IF C 00010011 = DEC RX, IF NOT Z

    01000 RX RX +MEM 01001 RX RX + MEM +C 01010 RX RX - MEM 010 11 RX RX – MEM - C 10001 RX NOT RX 00101 RX SWAP RX 10000 RX SLA RX 10001 RX SRA RX 10010 RX SLL RX 10011 RX SRL RX 11000 RX RX AND MEM 11001 RX RX NAND MEM 11010 RX RX OR MEM 11011 RX RX NOR MEM 11100 RX RX XOR MEM 11101 RX RX XNOR MEM

    EN “0”

    Dependendientes del CCR (CONDITION CODE REGISTER) *

    *

  • CCR

  • CCR

  • CCR TEST-BENCH DE CCR

  • CCR REPORTE DEL COMPILADOR

  • CCR

    C = 1 , Z=1

    C = 1 , Z=0

    C = 0 , Z=1

    C = 1 , Z=1

    RESET

  • CU7

  • CU7

  • CU7

    (zero = ‘1’ or salidarx = X”0000”)

  • CU7

    INCORPORACIÓN PARA USAR LAS INSTRUCCIONES “A+B+Carry” y “A-B-Carry”

  • CU7 CONTENIDO DEL ARCHIVO RAM.HEX PARA ESTE PROYECTO

    Instrucciones cargadas en RAM: JMP PC, 0004 LDI RX, 00FF LDI RX, 0003 INC RX INC RX DEC RX IF Z JMP PC IF Z, 000C RST LDI RX, 0022 JMP PC IF Z, 0012 JMP PC, 0013 RST LDI RX, FFFF STR RX, 0900 LDI RX, 0001 RX + MEM, 0900 JMP PC IF C, 001E RST DEC RX DEC RX RST

  • CU7

    JMP PC, 0004

    LDI RX, 0003 INC RX INC RX

    ME SALTEO «LDI RX, 00FF» DEBIDO A «JMP PC, 0004»

  • CU7

    DEC RX IF NOT ZERO

    Z=‘1’

    LDI RX, 0022

    SALTO CONDICIONAL SI ES CERO

  • CU7

    LDI RX, 0022

  • CU7

    STR RX, 0900 LDI RX, 0001

  • CU7

    RX + MEM, 0900 JMP PC IF Z, 001E

  • CU7

    DEC RX DEC RX RST

  • CU8 PROYECTO CU8 (CON AIRE DE MICROCONTROLADOR)

    DISEÑO EN VHDL DE MICROPROCESADOR ELEMENTAL CON UN REGISTRO INTERNO CON ACCESO DIRECTO A LA MEMORIA DE DATOS PARA REALIZAR LECTURA Y ESCRITURA DE LA MISMA Y OPERACIONES ARITMÉTICO-LÓGICAS ENTRE ELLA Y DICHO REGISTRO. ADEMÁS DISPONE DE INSTRUCCIONES PARA IMPLEMENTAR REDIRECCIONAMIENTO CONDICIONAL E INCONDICIONAL Y OPERACIONES CONDICIONALES CON REGISTRO RX. SE ADICIONA EN ESTE PROYECTO LA HABILIDAD DE MANEJAR DOS PUERTOS DE DATOS EXTERNOS A LA FPGA CON CONTROL INDEPENDIENTE DE OPERACIÓN EN CADA BIT.

  • RST CLK

    CU8

    BUS DATA_IN

    BUS ADDRESS

    MEM

    OR

    IA

    uP16

    CPU

    PC

    16R

    MA

    R

    RX

    IR

    MD

    RO

    M

    DR

    I

    MU

    XM

    AR

    MUXRX

    FPGA

    CCR ALU

    BUS CONTROL

    BUS DATA _OUT

    PORT A PORT B

    ENTRADAS A FPGA SALIDAS DE FPGA

    REGPA M

    UX

    MD

    RI

    REGPB

    ENTR

    AD

    A S

    A F

    PG

    A

  • Sergio Noriega - 2014

    CU8 A FIN DE APROVECHAR LA PLACA DEMO DE CYCLONE IV, SE HA DISEÑADO EL “PORT A” COMO SALIDA DE 8 BITS A FIN DE MANEJAR DIRECTAMENTE LOS 8 LEDS DISPONIBLES. EL “PORT B” COMO ENTRADA, TIENE ASOCIADOS PULSADORES Y DIP-SWITCHES. EL “PORT A” PUEDE TRABAJAR EN DOS MODALIDADES: NORMAL ESCRITURA DESDE REGISTRO RX. A NIVEL DE BIT BORRAR Ó AJUSTAR CADA UNO DE LOS 8 BITS DEL PORT DE FORMA INDEPENDIENTE, MANTENIENDO EL MISMO ESTADO DEL RESTO. EL “PORT B” PUEDE TRABAJAR EN DOS MODOS DIFERENTES: NORMAL LECTURA DE TODOS SUS BITS EN FORMA SIMULTÁNEA. TEST A NIVEL DE BIT ANALIZA EL ESTADO DE UN BIT EN PARTICULAR A FIN DE DEFINIR UNA POSIBLE ACCIÓN.

  • Sergio Noriega - 2014

    CU8

    REG

    PA

    CPU

    RX

    8

    PO

    RT

    A

    PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

    FPGA

    PORT B

    PB

    7

    PB

    6

    PB

    5

    PB

    4

    PB

    3

    PB

    2

    PB

    1

    PB

    0

    MDRI

    IMPLEMENTACIÓN PARA MANEJO DE PUERTOS E/S

    ENTRADA

    SALIDA

    8

    REGPB

    MUXMDRI

    RAM

    16

    1 6

  • CU8 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IR 15

    X”0000” 00000000 = CLR RX X”0100” 00000001 = INC RX X”0200” 00000010 = LDI RX X”0300” 00000011 = DEC RX X”0400” 00000100 = NOP X”8000” 10000000 = RST X”0500” 00000101 = LDD RX X”0600” 00000110 = STR RX X”070X” 00000111 = OPERACIONES ARITMÉTICO- LÓGICAS ENTRE MEMORIA DE DATOS Y REGISTRO “RX”. X”0800” 00001000 = STR RXL, PORT A X”09X0” 00001001 = BIT SET I, PORT A X”0AX0” 00001010 = BIT CLR I, PORT A X”0B00” 00001011 = INC PORT A X”0C00” 00001100 = DEC PORT A X”0D00” 00001101 = LDI RX, PORT B X”0E00” 00001100 = BTIJC, PORT B X”0F00” 00001101 = BTIJS, PORT B X”1000” 00010000 = JMP PC, DIR X”1100” 00010001 = JMP PC, IF Z, DIR X”1200” 00010010 = JMP PC, IF C, DIR X”1300” 00010011 = DEC RX, IF NZ

    USO ESTOS BITS PARA ENTRAR EL CÓDIGO DE IDENTIFICACIÓN DEL BIT A SELECCIONAR: PORT_A(BIT 0) = “000” PORT_A(BIT 1) = “001” . . . . PORT_A(BIT 6) = “110” PORT_A(BIT 7) = “111”

    RESERVADOS

  • X”09X0” = 0000 1001 XXX0 0000 BIT SET I, PORT A if (salidair >= X”0900” and salidair

  • X”0800” = 0000 1000 0000 0000 STR RXL, PORT A if (salidair = X”0800”) then proximoestado = X”0A00” and salidair

  • Sergio Noriega - 2014

    REGPA

  • Sergio Noriega - 2014

    REGPA TEST-BENCH DE REGPA

  • Sergio Noriega - 2014

    REGPA

  • Sergio Noriega - 2014

    REGPA

  • Sergio Noriega - 2014

    REGPA

    SIMULACIÓN COMPLETA

  • Sergio Noriega - 2014

    REGPA

    SIMULACIÓN PARA AJUSTE DE BIT DE PORT A (BIT SET)

  • Sergio Noriega - 2014

    REGPA

    SIMULACIÓN PARA BORRADO DE BIT DE PORT A (BIT CLR)

  • Sergio Noriega - 2014

    REGPA

    SIMULACIÓN PARA LOAD, INC Y DEC PORT A

  • Sergio Noriega - 2014

    REGPB

  • Sergio Noriega - 2014

    REGPB SIMULACIÓN PARA REGISTRO REGPORTB

  • Sergio Noriega - 2014

    REGPB SIMULACIÓN PARA MUXMDRI

  • Sergio Noriega - 2014

    CU8

  • Sergio Noriega - 2014

    CU8

    LDI RX, 000A STR RXL, PORTA BIT CLR 2, PORTA CLR RX BIT CLR 1, PORTA LDI RX, 00FF BIT CLR 0, PORTA DEC PORTA LDI RX, 00AA DEC PORTA STR RXL, PORTA INC PORTA LDI RXL, PORTB CLR RX STR RXL, PORTA BIT SET 0, PORTA BTIJS 0, 0024 BIT SET 1, PORTA RST BIT SET 2, PORTA LDI RX, 0055 BIT SET 3, PORTA STR RXL, PORTA BIT SET 4, PORTA BTJIC, 002B BIT SET 5, PORTA LDI RX, 0001 BIT SET 6, PORTA LDI RX, 00AA BIT SET 7, PORTA STR RXL, PORTA BIT CLR 7, PORTA RST BIT CLR 6, PORTA BIT CLR 5, PORTA BIT CLR 4, PORTA BIT CLR 3, PORTA

    CONTENIDO DEL ARCHIVO RAM.HEX PARA ESTE PROYECTO

  • Sergio Noriega - 2014

    CU8 INSTRUCCIONES ESPECIFICADAS EN FORMA NEMOTÉCNICA

  • Sergio Noriega - 2014

    CU8 INSTRUCCIONES ESPECIFICADAS EN FORMA NEMOTÉCNICA

  • Sergio Noriega - 2014

    CU8

    LAS INSTRUCCIONES BIT SET PORT A Y BIT CLR PORT A AUTOMÁTICAMENTE LEEN LA POSICIÓN DEL BIT A MODIFICAR, LEYENDO DESDE EL REGISTRO IR(7,6,5). LAS INSTRUCCIONES TEST BIT JMP IF CLR Y TEST BIT JMP IF SET, PARA PORT A, SON SIMILARES A LAS DE JMP PC IF Z Y JMP PC IF C, EN CARGAN EL DATO DE LA POSIBLE PRÓXIMA DIRECCIÓN DE PROGRAMA Y LUEGO SE RESUELVE SI DEBE SALTAR AHÍ Ó SEGUIR CON LA PRÓXIMA INSTRUCCIÓN CONSECUTIVA. STR RXL, PORT A ES SIMPLE YA QUE SÓLO HAY QUE ESCRIBIR EN REGPA. DADO QUE PORT A ES DE 8 BITS, SÓLO SE CARGA LA PARTE BAJA DE RX. LDI RXH, PORT B, DEBE RUTEAR EL DATO DE SALIDA DE PORT B HACIA RX. PARA ELLO, HAY QUE ESCRIBIR REGPB, DIRECCIONAR LA ENTRADA DE MDRI PARA LEER PORT B Y NO MEMORIA RAM (selmuxmdri = ‘1’). LUEGO SE ESCRIBE MDRI Y POR ÚLTIMO RX. DEBE VOLVERSE LUEGO (selmuxmdri = ‘0’) PARA DIRECCIONAR A LA RAM.

  • Sergio Noriega - 2014

    CU8

    INSTANCIACIÓN DE NUEVOS COMPONENTES

  • Sergio Noriega - 2014

    CU8 DECISIONES SOBRE INSTRUCCIONES CON “PORTA” Y LECTURA DE “PORTB”

  • Sergio Noriega - 2014

    CU8 RUTINA PARA INSTRUCCIONES DE SALTO CONDICIONAL SEGÚN EL PORT_B

    SE APROVECHA PARTE DEL HARDWARE DE “REGPA” (SALIDACODE) PARA DECODIFICAR EN LAS INSTRUCCIONES “BTIJC, PORT B” Ó “BTIJS, PORT B”, QUE BIT HAY QUE ANALIZAR. SE COMPARA CON LO LEÍDO EN “SALIDAREGPB” CON UNA FUNCIÓN “AND”: SI EL RESULTADO DÁ “CERO” EL BIT ANALIZADO ERA “0” Y VICEVERSA.

    NO SALTA

    SALTA

  • Sergio Noriega - 2014

    CU8

    VUELVE PARA BUSCAR NUEVA INSTRUCC.

    RUTINA PARA INSTRUCCIONES DE “SET BIT” Y “CLEAR BIT” EN EL “PORTA”

  • Sergio Noriega - 2014

    CU8 RUTINAS PARA INSTRUCCIONES “STR RX, PORTA” E “INC PORTA”

    EN LA PRÓXIMA FILMINA

  • Sergio Noriega - 2014

    CU8 RUTINAS PARA INSTRUCCIÓN “DEC PORTA”

  • Sergio Noriega - 2014

    CU8 INICIO DE RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B

  • Sergio Noriega - 2014

    CU8 RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B

  • Sergio Noriega - 2014

    CU8 RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B

  • Sergio Noriega - 2014

    CU8 FIN DE RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B

    SALTA A PRÓXIMA INSTRUCCIÓN

  • Sergio Noriega - 2014

    CU8

    UTILIZA LOS BITS 7,6 Y 5 DE “IR” PARA DECODIFICAR EL BIT CARGADO EN LAS INSTRUCCIONES DE MANEJO DE BIT EN PORTA Y PORTB

  • Sergio Noriega - 2014

    CU8

    REPORTE DEL COMPILADOR

    4% DE ELEMENTOS LÓGICOS Y

    11% DE RAM DEDICADA UTILIZADOS EN ESTE ÚLTIMO

    PROYECTO

  • Sergio Noriega - 2014

    CU8

    STR RXL, PORT_A INC PORT_A DEC PORT_A

    INSTRUCCIONES: STR_RXL, PORT_A ; DEC_ PORT A ; INC_PORT A

  • Sergio Noriega - 2014

    CU8 INSTRUCCIONES BIT SET I, PORTA

    DESDE INSTRUCCIÓN BITSET 0, PORTA (“0900”) HASTA INSTRUCCIÓN BITSET 7,PORTA (“09E0”)

  • Sergio Noriega - 2014

    CU8 INSTRUCCIONES BIT CLR I, PORTA

    DESDE INSTRUCCIÓN BITCLR 7, PORTA (“0AE0”) HASTA INSTRUCCIÓN BITCLR 0,PORTA (“0A00”)

  • Sergio Noriega - 2014

    CU8 BIT TEST 0, JUMP IF CLR, PORTB X”002E”

    COMO EL BIT “7” DE PORT B ES “0” (X”0F” = “00001111”) EL MICRO SALTA A LA POSICIÓN DE MEMORIA X“002B” Y EJECUTA LA INSTRUCCIÓN “LDI RX, 00AA” EN VEZ DE “LDI RX, 0001”. LUEGO CARGA EL PORTA CON DICHO DATO: “AA”

  • Sergio Noriega - 2014

    CU8

    COMO EL BIT “0” DE PORT B ES “1” (X”0F” = “00001111”) EL MICRO SALTA A LA POSICIÓN DE MEMORIA X“0024” Y EJECUTA LA INSTRUCCIÓN “LDI RX, 0055” (SALTEA LA DE “RST”) Y LUEGO STR RXL, PORT_A , DONDE PORT_A ADOPTA EL VALOR X“55”

    BIT TEST 0, JUMP IF SET, PORTB “0024” Y STR RXL, PORTB

  • Sergio Noriega - 2014

    CU8 LDI RXL, PORTB

    EL BYTE ALTO DE “RX” SE “RELLENA” CON CEROS.