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.
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.