PROYECTO CU6 - UNLPcatedra.ing.unlp.edu.ar/electrotecnia/islyd/seminario...SALTO CONDICIONAL SI ES...

Post on 06-Aug-2020

13 views 0 download

transcript

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

ALUR

ALUR

IMPLEMENTACIÓN DE “A + B + CARRY”

y “A – B – CARRY”

RECIÉN EN EL PROYECTO CU7

ALUR TEST-BENCH DE ALUR

ALUR

ALUR

ALUR

salidaalu <= A B A X”F00F” X”A0AF”

ALUR

salidaalu <= A + B A + B + C A – B A – B – C X”190BE” X”190BF” X”4F60” X”4F5F”

ALUR

salidaalu <= A NOT A SWAP A SLA SRA

ALUR

salidaalu <= A AND B A NAND B A OR B A NOR B A XOR B

MUXRX

MUXRX

MUXRX TEST-BENCH DE MUXRX

MUXRX

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.

CU6

CU6

CU6

CU6

CU6

TEST-BENCH PARA CU6

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, 0800 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

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.

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”09E0”) then proximoestado <= *el que sea+ X”0AX0” = 0000 1010 XXX0 0000 BIT CLR I, PORT A if (salidair >= X”0A00” and salidair <= X”0AE0”) then proximoestado <= *el que sea+

INSTRUCCIONES BIT SET I, PORTA y BIT CLR I, PORT A

selcoderegpa se conecta a salidair(7 downto 5) opselecregpa debe configurarse con: “100” para modo BIT SET “101” para modo BIT CLR

X”0800” = 0000 1000 0000 0000 STR RXL, PORT A if (salidair = X”0800”) then proximoestado <= *el que sea+ X”0B00” = 0000 1011 0000 0000 INC, PORT A if (salidair >= X”0A00” and salidair <= X”0AE0”) then proximoestado <= *el que sea+

INSTRUCCIONES STR RX, PORT A INC PORT A DEC PORT A

opselecregpa debe configurarse con: “010” para modo LDI RXL, PORT A “001” para modo INC PORT A “011” para modo DEC PORT A

REGPA

REGPA TEST-BENCH DE REGPA

REGPA

REGPA

REGPA

SIMULACIÓN COMPLETA

REGPA

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

REGPA

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

REGPA

SIMULACIÓN PARA LOAD, INC Y DEC PORT A

REGPB

REGPB SIMULACIÓN PARA REGISTRO REGPORTB

REGPB SIMULACIÓN PARA MUXMDRI

CU8

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

CU8 INSTRUCCIONES ESPECIFICADAS EN FORMA NEMOTÉCNICA

CU8 INSTRUCCIONES ESPECIFICADAS EN FORMA NEMOTÉCNICA

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.

CU8

INSTANCIACIÓN DE NUEVOS COMPONENTES

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

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 SET

CU8

VUELVE PARA BUSCAR NUEVA INSTRUCC.

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

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

EN LA PRÓXIMA FILMINA

CU8 RUTINAS PARA INSTRUCCIÓN “DEC PORTA”

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

CU8 RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B

CU8 RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B

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

SALTA A PRÓXIMA INSTRUCCIÓN

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

CU8

REPORTE DEL COMPILADOR

4% DE ELEMENTOS LÓGICOS Y

11% DE RAM DEDICADA UTILIZADOS EN ESTE ÚLTIMO

PROYECTO

CU8

STR RXL, PORT_A INC PORT_A DEC PORT_A

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

CU8 INSTRUCCIONES BIT SET I, PORTA

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

CU8 INSTRUCCIONES BIT CLR I, PORTA

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

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”

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

CU8 LDI RXL, PORTB

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