-
CU6PROYECTO CU6
DISEÑO EN VHDL DE MICROPROCESADOR ELEMENTAL CON UN REGISTRO INTERNO CON ACCESO DIRECTO A LAMEMORIA DE DATOS PARA REALIZAR LECTURA Y ESCRITURA DE LA MISMA Y OPERACIONES ARITMÉTICO-LÓGICAS ENTRE ELLA Y DICHO REGISTRO.
-
BUSDATAMEMIN
BUS DATAMEMOUT
BUS DIRMEM
MEM
OR
IA
uP16
BUS CONTROL
CLK
RST
CPU
MA
RM
DR
OM
DR
I
FPGACU6
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 0IR 15
00000000 = CLR RX00000001 = INC RX00000010 = LDI RX00000011 = DEC RX00000100 = NOP10000000 = RST00000101 = LDD RX00000110 = STR RX00000111 = OPERACIONES
ARITMÉTICO-LÓGICAS ENTRE MEMORIA DE DATOS Y REGISTRO “RX”.
01000 RX RX +MEM01001 RX RX + MEM +C01010 RX RX - MEM010 11 RX RX – MEM - C10001 RX NOT RX00101 RX SWAP RX10000 RX SLA RX10001 RX SRA RX10010 RX SLL RX10011 RX SRL RX11000 RX RX AND MEM11001 RX RX NAND MEM11010 RX RX OR MEM11011 RX RX NOR MEM11100 RX RX XOR MEM11101 RX RX XNOR MEM
EN “0”
-
FPGAALUR
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
-
ALURTEST-BENCH DE ALUR
-
ALUR
-
ALUR
-
ALUR
salidaalu
-
ALUR
salidaalu
-
ALUR
salidaalu
-
ALUR
salidaalu
-
MUXRX
-
MUXRX
-
MUXRXTEST-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 LASRUTINAS DE (1) EN LAS ACTIVIDADES DE (2) COMO SE HIZO EN ELPROYECTO ANTERIOR CON STR_RX/LDD_RX Y LDI_RX.
-
CU6
-
CU6
-
CU6
-
CU6
-
CU6
TEST-BENCH PARA CU6
-
CU6REPORTE DEL COMPILADOR
-
CU6CONTENIDO DEL ARCHIVO RAM.HEX PARA ESTE PROYECTO
Instruccionescargadas en RAM:
LDI RX, 000E
STR RX, 0800LDI RX, 0018STR RX, 0801 LDD RX, 0800RX + MEM, 0801LDI RX, F001SLL RXSRL RXSRL RXRX AND MEM, 0800NOT RXRST
-
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
-
CU7PROYECTO CU7
DISEÑO EN VHDL DE MICROPROCESADOR ELEMENTAL CON UN REGISTRO INTERNO CON ACCESO DIRECTO A LAMEMORIA 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.
-
BUSDATAMEMIN
BUS DATAMEMOUT
BUS DIRMEM
MEM
OR
IA
uP16
BUS CONTROLCPU
MA
RM
DR
OM
DR
I
FPGACU7
MEM
OR
IA
IR
PC
16
R
MU
XM
AR
RX
MUXRX
ALU CCR
CLK
RST
CLK_UP16
DIV_CLK0
1
01
Nota: Ahora MDRO se conecta a la salidade la ALU
-
CU7
14 13 12 11 10 9 8 7 6 5 4 3 2 1 0IR 15
00000000 = CLR RX00000001 = INC RX00000010 = LDI RX00000011 = DEC RX00000100 = NOP10000000 = RST00000101 = LDD RX00000110 = STR RX00000111 = OPERACIONES
ARITMÉTICO-LÓGICAS ENTRE MEMORIA DE DATOS Y REGISTRO “RX”.
00010000 = JMP PC, (MEMCODE+1)00010001 = JMP PC, IF Z00010010 = JMP PC, IF C00010011 = DEC RX, IF NOT Z
01000 RX RX +MEM01001 RX RX + MEM +C01010 RX RX - MEM010 11 RX RX – MEM - C10001 RX NOT RX00101 RX SWAP RX10000 RX SLA RX10001 RX SRA RX10010 RX SLL RX10011 RX SRL RX11000 RX RX AND MEM11001 RX RX NAND MEM11010 RX RX OR MEM11011 RX RX NOR MEM11100 RX RX XOR MEM11101 RX RX XNOR MEM
EN “0”
Dependendientes del CCR (CONDITION CODE REGISTER)*
*
-
CCR
-
CCR
-
CCRTEST-BENCH DE CCR
-
CCRREPORTE 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 PARAUSAR LAS INSTRUCCIONES“A+B+Carry” y “A-B-Carry”
-
CU7CONTENIDO DEL ARCHIVO RAM.HEX PARA ESTE PROYECTO
Instruccionescargadas en RAM:
JMP PC, 0004
LDI RX, 00FFLDI RX, 0003INC RXINC RX DEC RX IF Z JMP PC IF Z, 000CRSTLDI RX, 0022JMP PC IF Z, 0012JMP PC, 0013RSTLDI RX, FFFFSTR RX, 0900LDI RX, 0001 RX + MEM, 0900JMP PC IF C, 001ERSTDEC RXDEC RXRST
-
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
-
CU8PROYECTO 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.
-
RSTCLK
CU8
BUS DATA_IN
BUS ADDRESS
MEM
OR
IA
uP16
CPU
PC
16R
MA
R
RX
IR
MD
RO
MD
RI
MU
XM
AR
MUXRX
FPGA
CCRALU
BUS CONTROL
BUS DATA_OUT
PORT A PORT B
ENTRADAS A FPGASALIDAS DE FPGA
REGPAM
UX
MD
RI
REGPB
ENTR
AD
A S
A F
PG
A
-
CU8A FIN DE APROVECHAR LA PLACA DEMO DE CYCLONE IV, SE HA DISEÑADOEL “PORT A” COMO SALIDA DE 8 BITS A FIN DE MANEJAR DIRECTAMENTE LOS8 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 PORTDE FORMA INDEPENDIENTE, MANTENIENDO EL MISMOESTADO 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 FINDE DEFINIR UNA POSIBLE ACCIÓN.
-
CU8
REG
PA
CPU
RX
8
PO
RT
A
PA7PA6PA5PA4PA3PA2PA1PA0
FPGA
PORT B
PB
7P
B6
PB
5P
B4
PB
3P
B2
PB
1P
B0
MDRI
IMPLEMENTACIÓN PARA MANEJO DE PUERTOS E/S
ENTRADA
SALIDA
8
REGPB
MUXMDRI
RAM
16
1 6
-
CU814 13 12 11 10 9 8 7 6 5 4 3 2 1 0IR 15
X”0000” 00000000 = CLR RXX”0100” 00000001 = INC RXX”0200” 00000010 = LDI RXX”0300” 00000011 = DEC RXX”0400” 00000100 = NOPX”8000” 10000000 = RSTX”0500” 00000101 = LDD RXX”0600” 00000110 = STR RXX”070X” 00000111 = OPERACIONES
ARITMÉTICO-LÓGICAS ENTRE MEMORIA DE DATOS Y REGISTRO “RX”.
X”0800” 00001000 = STR RXL, PORT AX”09X0” 00001001 = BIT SET I, PORT AX”0AX0” 00001010 = BIT CLR I, PORT AX”0B00” 00001011 = INC PORT AX”0C00” 00001100 = DEC PORT AX”0D00” 00001101 = LDI RX, PORT BX”0E00” 00001100 = BTIJC, PORT BX”0F00” 00001101 = BTIJS, PORT BX”1000” 00010000 = JMP PC, DIRX”1100” 00010001 = JMP PC, IF Z, DIRX”1200” 00010010 = JMP PC, IF C, DIRX”1300” 00010011 = DEC RX, IF NZ
USO ESTOS BITS PARA ENTRAREL CÓDIGO DE IDENTIFICACIÓNDEL 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
-
REGPA
-
REGPATEST-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
-
REGPBSIMULACIÓN PARA REGISTRO REGPORTB
-
REGPBSIMULACIÓN PARA MUXMDRI
-
CU8
-
CU8
LDI RX, 000ASTR RXL, PORTA BIT CLR 2, PORTACLR RX BIT CLR 1, PORTALDI RX, 00FF BIT CLR 0, PORTADEC PORTA LDI RX, 00AADEC PORTA STR RXL, PORTAINC PORTA LDI RXL, PORTBCLR RX STR RXL, PORTABIT SET 0, PORTA BTIJS 0, 0024BIT SET 1, PORTA RSTBIT SET 2, PORTA LDI RX, 0055 BIT SET 3, PORTA STR RXL, PORTABIT SET 4, PORTA BTJIC, 002B BIT SET 5, PORTA LDI RX, 0001BIT SET 6, PORTA LDI RX, 00AABIT SET 7, PORTA STR RXL, PORTABIT CLR 7, PORTA RSTBIT CLR 6, PORTABIT CLR 5, PORTABIT CLR 4, PORTABIT CLR 3, PORTA
CONTENIDO DEL ARCHIVO RAM.HEX PARA ESTE PROYECTO
-
CU8INSTRUCCIONES ESPECIFICADAS EN FORMA NEMOTÉCNICA
-
CU8INSTRUCCIONES ESPECIFICADAS EN FORMA NEMOTÉCNICA
-
CU8
LAS INSTRUCCIONES BIT SET PORT A Y BIT CLR PORT A AUTOMÁTICAMENTELEEN 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 POSIBLEPRÓ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 PARALEER 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
-
CU8DECISIONES SOBRE INSTRUCCIONES CON “PORTA” Y LECTURA DE “PORTB”
-
CU8RUTINA 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 BUSCARNUEVA INSTRUCC.
RUTINA PARA INSTRUCCIONES DE “SET BIT” Y “CLEAR BIT” EN EL “PORTA”
-
CU8RUTINAS PARA INSTRUCCIONES “STR RX, PORTA” E “INC PORTA”
EN LA PRÓXIMAFILMINA
-
CU8RUTINAS PARA INSTRUCCIÓN “DEC PORTA”
-
CU8INICIO DE RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B
-
CU8RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B
-
CU8RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B
-
CU8FIN DE RUTINA PARA INSTRUCCIÓN DE LECTURA DEL PORT_B
SALTA A PRÓXIMAINSTRUCCIÓN
-
CU8
UTILIZA LOS BITS 7,6 Y 5 DE “IR”PARA DECODIFICAR EL BIT CARGADOEN LAS INSTRUCCIONES DE MANEJODE BIT EN PORTA Y PORTB
-
CU8
REPORTE DEL COMPILADOR
4% DE ELEMENTOS LÓGICOS Y
11% DE RAM DEDICADAUTILIZADOS 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
-
CU8INSTRUCCIONES BIT SET I, PORTA
DESDE INSTRUCCIÓN BITSET 0, PORTA (“0900”)HASTA INSTRUCCIÓN BITSET 7,PORTA (“09E0”)
-
CU8INSTRUCCIONES BIT CLR I, PORTA
DESDE INSTRUCCIÓN BITCLR 7, PORTA (“0AE0”)HASTA INSTRUCCIÓN BITCLR 0,PORTA (“0A00”)
-
CU8BIT 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
-
CU8LDI RXL, PORTB
EL BYTE ALTO DE “RX” SE “RELLENA” CON CEROS.