Informe - Escuela de Ingeniería Eléctrica

Anuncio
Universidad de Costa Rica
Facultad de Ingeniería
Escuela de Ingeniería Eléctrica
IE – 0502 Proyecto Eléctrico
Síntesis y optimización de la CPUCR en la librería
AMI 0.5 micrones con herramientas de Synopsys
Por:
Alejandro Mora Lizano 982423
Henry Rojas Fonseca A03672
Diciembre del 2004
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
ii
Síntesis y optimización de la CPUCR en la
librería AMI 0.5 micrones con herramientas de
Synopsys
Por:
Alejandro Mora Lizano
Henry Rojas Fonseca
Sometido a la Escuela de Ingeniería Eléctrica
de la Facultad de Ingeniería
de la Universidad de Costa Rica
como requisito parcial para optar por el grado de:
BACHILLER EN INGENIERÍA ELÉCTRICA
Aprobado por el Tribunal:
___________________
Ing. Roberto Rodríguez
Profesor Guía
___________________
Ing. Enrique Coen
Profesor Lector
___________________
Ing. Federico Ruiz
Profesor Lector
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas iii
de Synopsys
ÍNDICE GENERAL
ÍNDICE DE FIGURAS ___________________________________________________v
ÍNDICE DE TABLAS ___________________________________________________ vi
NOMENCLATURA ____________________________________________________ vii
RESUMEN ___________________________________________________________ viii
CAPÍTULO 1: Introducción ______________________________________________ 1
1.1 Objetivos _______________________________________________________________ 3
1.1.1 Objetivos Específicos:_________________________________________________________ 3
1.2 Metodología ____________________________________________________________ 3
CAPÍTULO 2: Marco teórico _____________________________________________ 4
2.1 Diseño en VLSI__________________________________________________________ 4
2.1.1 Métodos de diseño en VLSI ____________________________________________________ 7
2.1.2 Síntesis lógica _______________________________________________________________ 8
2.2 Herramientas de Synopsys ________________________________________________ 9
2.2.1 Librerías de celdas __________________________________________________________ 11
CAPÍTULO 3: Guía para el uso de Design Analyzer en la síntesis de circuitos
integrados ____________________________________________________________ 14
3.1
Ventana del Design Analyzer __________________________________________ 14
3.1.1 Barra de menú ______________________________________________________________ 15
3.2 Síntesis de un nuevo proyecto _____________________________________________ 18
3.2.1 Síntesis manual _____________________________________________________________ 18
3.2.1.1 Ventana de comandos ____________________________________________________ 18
3.2.1.2 Especificación de la librería _______________________________________________ 20
3.2.1.3 Lectura del diseño _______________________________________________________ 21
3.2.1.4 Definición del entorno____________________________________________________ 22
3.2.1.5 Definir las restricciones___________________________________________________ 22
3.2.1.5 Optimización del diseño __________________________________________________ 24
3.2.1.6 Análisis y resolución de problemas de diseño__________________________________ 24
3.2.1.7 Salvar la base de datos del diseño ___________________________________________ 26
3.2.2 Síntesis por medio de un script _________________________________________________ 27
CAPÍTULO 4: Síntesis de la CPUCR con el Design Analyzer __________________ 29
4.1 Problemas en la síntesis de la CPUCR ______________________________________ 30
4.2 Problemas del código de la CPUCR conductual _____________________________ 33
4.2.1 Descripción de los problemas en las simulaciones __________________________________ 34
4.3 Análisis de resultados____________________________________________________ 39
4.3.1 Posibles problemas __________________________________________________________ 41
CAPÍTULO 5: Conclusiones y recomendaciones_____________________________ 45
5.1 Conclusiones ___________________________________________________________ 45
5.2 Recomendaciones ______________________________________________________ 46
BIBLIOGRAFÍA ______________________________________________________ 47
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
iv
Libros ___________________________________________________________________ 47
Manuales _________________________________________________________________ 47
Páginas web ______________________________________________________________ 47
Información digital ________________________________________________________ 47
APÉNDICES _________________________________________________________ 48
Apéndice A. Script utilizado para la síntesis de la CPUCR ________________________ 48
Apéndice B. Script original __________________________________________________ 48
Apéndice C. Instrucciones de la CPUCR _______________________________________ 50
Apéndice D. Diagramas de temporización del modelo estructural obtenido de la CPUCR
_________________________________________________________________________ 51
Apéndice E. Bitácora de la sesión del Design Analyzer ___________________________ 62
Apéndice F. Modelo conductual original _______________________________________ 68
cpucr_rarr.v ____________________________________________________________________ 68
Dec_Inst.v _____________________________________________________________________ 83
Apéndice G. Modelo conductual modificado____________________________________ 84
Apéndice H. Modelo estructural obtenido en la síntesis con el Design Analyzer _______ 99
ANEXOS____________________________________________________________ 142
Anexo 1. Características de una celda Flip-Flop D de la librería AMI 0.5 __________ 142
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
v
ÍNDICE DE FIGURAS
Figura 2.1. Evolución de la complejidad lógica en circuitos integrados. __________________________ 4
Figura 2.2. Ilustración de la ley de Moore. _________________________________________________ 5
Figura 2.3. Inversor y sus perspectivas. ____________________________________________________ 6
Figura 2.4. Visualización de los métodos de diseño en VLSI. ___________________________________ 8
Figura 2.5. Design Compiler dentro del flujo de diseño. ______________________________________ 10
Figura 2.6. Ilustración de un transistor NMOS. _____________________________________________ 13
Figura 2.7. Ilustración de la Leff. ________________________________________________________ 13
Figura 3.1. Ilustración de la ventana del Design Analyzer. ____________________________________ 14
Figura 3.2. Submenú de atributos resaltado. _______________________________________________ 17
Figura 3.3. Ventana de comandos._______________________________________________________ 19
Figura 3.4. Esquema para la síntesis de un proyecto en el Design Analyzer. ______________________ 20
Figura 4.1. Simulación programa de prueba 1. _____________________________________________ 35
Figura 4.2. Simulación programa de prueba 2. _____________________________________________ 35
Figura 4.3. Simulación programa de prueba 3. _____________________________________________ 36
Figura 4.4. Simulación programa de prueba 4. _____________________________________________ 36
Figura 4.5. Simulación programa de prueba 5. _____________________________________________ 37
Figura 4.6. Simulación programa de prueba 6. _____________________________________________ 37
Figura 4.7. Simulación programa de prueba 7. _____________________________________________ 38
Figura 4.8. Simulación programa de prueba 8. _____________________________________________ 38
Figura 4.9. Simulación programa de prueba 9. _____________________________________________ 39
Figura 4.10. Lógica de tercer estado inferida con el comando assign. ___________________________ 42
Figura 4.11. Lógica de buffer de tercer estado con registros. __________________________________ 43
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
vi
ÍNDICE DE TABLAS
Tabla 2.1 Pasos del diseño en VLSI. ______________________________________________________ 6
Tabla 3.1. Formatos aceptados por el Design Analyzer. ______________________________________ 26
Tabla 4.1. Dispositivos inferidos por el Design Analyzer. _____________________________________ 40
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas vii
de Synopsys
NOMENCLATURA
VLSI
AMI
DA
DC
CI
HDL
CMOS
CAD
ASIC
Integración a muy gran escala
AMI semiconductor
Design Analyzer
Design Compiler
Circuitos integrados
Lenguaje de descripción de hardware
Silicio óxido metálico complementario
Diseño asistido por computadora
Circuito integrado para una aplicación específica
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas viii
de Synopsys
RESUMEN
El presente trabajo trata sobre el uso de las herramientas de Synopsys en la síntesis de un
diseño en VLSI y su posterior aplicación en la síntesis con la librería AMI 0.5 de la
CPUCR.
Para esto, se dividió el trabajo en tres partes:
1. Una breve explicación del diseño en VLSI, con un poco de su historia y
una reseña con los diferentes métodos que existen, resaltando el diseño
utilizando librerías estándar.
2. Un manual de uso para la síntesis por medio de librerías estándar
utilizando las funciones básicas de las herramientas, propiamente del
Design Analyzer
3. La síntesis de la CPUCR y el análisis de la misma, explicando los
inconvenientes que se presentaron y las soluciones aplicadas. Además, se
dejan abiertas varias posibilidades para la corrección de algunos errores
propios de la elaboración del código en su forma conductual, para lograr
una síntesis sin problemas posteriores.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
1
CAPÍTULO 1: Introducción
Los circuitos integrados (CI) día con día evolucionan y literalmente se van integrando a
la vida cotidiana del ser humano, se utilizan en estructuras de la simplicidad de un reloj
hasta en la complejidad de las súper computadoras. Este rango de aplicación tan extenso
ubica a los circuitos integrados como una herramienta dinámica fundamental que facilita
el trabajo diario del hombre.
El desarrollo de los CI ha estado dominado tradicionalmente por las grandes potencias
mundiales, en especial Japón, Estados Unidos, Alemania y Francia; aunque su
manufactura muchas veces se da en países subdesarrollados, tales como Costa Rica.
Además, las universidades de los países desarrollados destinan altas sumas de dinero a la
enseñanza del diseño de CI llevándolos no sólo a la investigación teórica, sino también a
la práctica. Dentro de esta realidad, la Escuela de Ingeniería Eléctrica de la Universidad
de Costa Rica (UCR), por medio de su Departamento de Automática y Sistemas
Digitales, desea llevar a la práctica los conocimientos teóricos adquiridos por sus
estudiantes, por lo que ha comenzado una etapa de diseño de circuitos integrados y su
posterior fabricación gracias a compañías de bajo costo que ayudan a universidades con
el fin de nivelar la formación académica de sus estudiantes con la formación que se
imparte en la universidades del primer mundo.
Para esto, se ha escogido a la CPUCR; una unidad central de procesamiento que dispone
de un bus de direcciones de 16 líneas, un BUS de datos bidireccional de 8 bits y un bus
de control de 12 líneas. Esto por cuanto ya se cuenta con un diseño teórico realizado en
la UCR a nivel de un lenguaje HDL (Hardware Description Language)1. Además, este
componente ha sido ampliamente estudiado en la escuela, para citar algunos estudios:
•
Análisis y revalidación del diseño de la CPUCR. José Pablo Arguedas, Lochi
Yu Lo (2002)
1
Lenguaje de descripción de Hardware
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
•
2
Conclusión del diseño físico y construcción de la CPUCR. Enrique Martin
Acuña Acosta (1993)
•
Depuración del diseño de la CPUCR. Frantz Aimé Gamboa, Ramón Mena
Licairac (2001)
•
Diseño físico de la CPUCR. José Campos Briceño, Luis Golcher Balguil,
Jorg Sander Mangel (1991)
•
Modelado y síntesis de la CPUCR. Roberto Arellano Cartín, José Antonio
Cruz Pastora (2003)
•
Síntesis en VLSI de la CPUCR. Javier Gonzáles Hidalgo, Luis Diego León
Hoffman (2001)
Para poder lograr avanzar en el área de diseño de circuitos integrados se debe disponer de
la ayuda de herramientas de cómputo que permitan realizar compilaciones y síntesis de
grandes proyectos digitales. Para este efecto se utilizan las herramientas de la familia de
Synopsys, específicamente el software Design Compiler y Design Analyzer. Con éstas se
desea obtener una síntesis de la CPUCR, también se pretende optimizar el modelo de
manera que quede en una forma simplificada, lo más veloz posible.
Debido a la importancia de promover el desarrollo de este tipo de tecnologías, se
considera de gran importancia elaborar, paralelamente a la síntesis, un manual para la
utilización del software de síntesis (Design Compiler de Synopsys), el cual servirá de guía
para la aplicación de la herramienta en la síntesis de otros circuitos integrados diseñados
por la Escuela de Ingeniería Eléctrica.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
3
1.1 Objetivos
●
Síntesis y Optimización de la CPUCR en la librería AMI 0.5 micrones, utilizando las
herramientas de Synopsys.
1.1.1 Objetivos Específicos:
●
Generación de documentos y manuales de utilización de las herramientas en el flujo de
diseño de circuitos integrados.
●
Concreción del diseño del microprocesador CPUCR.
1.2 Metodología
Tal y como se desprende de los objetivos del proyecto, este cuenta de dos partes
esenciales, la creación de un manual o guía para la utilización de la herramienta
(software) de Synopsys y la síntesis en sí de la CPUCR, éste último sería poner en
práctica el primero.
Para el primer punto, se requiere realizar una investigación de la herramienta y aplicarla
en el flujo de diseño de circuitos integrados, esto se procederá a documentar paso a paso
de manera tal que sirva como guía para futuras experiencias con la misma.
Para el segundo punto, sería poner en práctica los resultados del punto uno en el flujo de
diseño, ahora sí, específicamente de la CPUCR. De igual forma se necesita documentar
el procedimiento, pero esta vez ya se cuenta con la información registrada en el punto
anterior.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
4
CAPÍTULO 2: Marco teórico
2.1 Diseño en VLSI
Desde el comienzo de la electrónica moderna con el descubrimiento de los transistores
primitivos hasta el día de hoy, los científicos se han centrado en la disminución del
tamaño de los mismos para su posterior integración junto con millones más en los
circuitos integrados, con el fin de hacerlos más versátiles, compactos y baratos. De esta
premisa viene lo que se conoce como VLSI (Very Large Scale Integration)2, que es un
nivel de integración que comprende de arreglos de más de 2000 a 20000 compuertas3.
Para esto, normalmente se utiliza la tecnología CMOS (Complementary Metal Oxide
Silicon)4, basada en transistores MOSFET (Metal Oxide Semiconductor Field Effect
Transistors)5. Aunque hay otras familias de transistores más rápidas, los arreglos que se
obtienen con los MOSFET consumen menos potencia y son más fáciles de fabricar. Su
bajo consumo de potencia se debe a que prácticamente sólo consumen potencia durante
los períodos de transición de un estado en alto a uno en bajo o viceversa.
ERA
FECHA
COMPLEJIDAD
Transistor sencillo
1959
menos de 1
Unidad lógica (una compuerta)
1960
1
Multifunción
1962
2-4
Función compleja
1964
5 - 20
Integración a mediana escala
1967
20 - 200
(MSI)
Integración a gran escala
1972
200 - 2000
(LSI)
Integración a muy gran escala
1978
2000 - 20000 (VLSI)
Integración a ultra gran escala
1989
20000 - ?
(Número de compuertas lógicas por CHIP)
(ULSI)
Figura 2.1. Evolución de la complejidad lógica en circuitos integrados3.
2
Integración a muy gran escala
http://lsiwww.epfl.ch/LSI2001/teaching/webcourse/ch01/ch01.html
4
Silicio complementario óxido metálico
5
Transistores de efecto de campo de semiconductor óxido metálico
3
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
5
Los circuitos integrados VLSI juegan un papel clave en el desarrollo de sistemas
electrónicos. Desde 1960 el número de transistores de los circuitos integrados se ha
duplicado aproximadamente cada dos años. Gracias a esta ciencia es que los circuitos
integrados han ido evolucionando, claro ejemplo de ello se da en los microprocesadores
modernos, los cuales contienen más de 40 millones de transistores integrados en un solo
chip. Aunque a esto se le conoce como ULSI o ultra large scale integration, es claro que
esta se deriva de la VLSI. Todo este fenómeno fue predicho por la ley de Moore, la cual
se puede ver más claro en la figura 1. Gordon Moore expuso en 1965 que la densidad de
los circuitos integrados se duplicaba cada 18 meses.
Figura 2.2. Ilustración de la ley de Moore6.
Las metas de esta técnica, están en aumentar la confiabilidad y reducir el costo de
sistemas digitales complejos. El desafío está en diseñarlos en tiempos cada vez más
cortos. Para ello se cuenta con programas especialmente creados para la síntesis de los
modelos dados; claros ejemplos de la tecnología CAD (Computer Aided Design)7. Estos
6
7
http://www.ee.duke.edu/~krish/teaching/Lectures/Intro.pdf
Diseño asistido por computadora
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
6
tipos de programas son también ampliamente utilizados en otras ramas de la ingeniería.
En otras palabras, los programas tipo CAD ayudan, en el caso particular del diseño de
circuitos integrados, a pasar de un modelo lógico computacional, a un modelo estructural,
y por último llegar al diseño físico, como se ilustra en figura 2.
Figura 2.3. Inversor y sus perspectivas.
Para lograr este paso de un modelo a otro, se debe seguir una cierta jerarquía de diseño, la
cual se puede observar en la tabla 2.1.
Tabla 2.1 Pasos del diseño en VLSI.
1
Especificaciones del
↔ Concepto inicial.
sistema
2
Modelo abstracto en
↔ Diseño y verificación del sistema.
HDL
3
Síntesis Lógica
↔ Diseño y verificación de la lógica: Se convierte el diseño
a compuertas y modelos primitivos.
4
Diseño del circuito
↔ Diseño y verificación CMOS: Se transfiere el diseño a
través de transistores.
5
Diseño físico
↔ Diseño y verificación lógica en silicio: Se crean las
diferentes capas del silicio.
6
Manufactura
7
CHIP
↔ Producción en masa, prueba y ensamblaje
↔ Mercadeo
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
7
2.1.1 Métodos de diseño en VLSI
Hay varios estilos de diseño en VLSI, caracterizados esencialmente por el medio en que
se desarrollan. Tenemos los siguientes métodos:
a) Circuitos integrados programables
Principalmente se utilizan “Field Programmable Gate Arrays” (FPGA),
los chips FPGA contienen miles de compuertas lógicas sin conectar, las
cuales se conectan de acuerdo a la función que se requiere.
b) Circuitos integrados “semi custom8”
Entre estos destacan los “Gate Arrays” (GA), los cuales se producen con
máscaras estándar en obleas de silicio, pero sin definir sus conexiones
metálicas, las cuales se pueden definir luego para realizar la función
requerida por el chip.
c) Circuitos integrados “full custom9”
En este método destacan dos tendencias:
•
Diseño a base de celdas estándar: Este método se basa en la
realización de máscaras nuevas a partir de librerías de celdas ya
establecidas y caracterizadas.
•
Diseño completo: A diferencia del anterior, en este se parte de
cero, caracterizando las celdas que se van a requerir para la
realización del circuito.
8
9
Diseño usando máscaras estándar
Diseño total, incluyendo el diseño de las máscaras
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
8
Figura 2.4. Visualización de los métodos de diseño en VLSI10.
En las síntesis de la CPUCR anteriores, se ha utilizado el método empleando los FPGA,
esto debido a su bajo costo de producción así como su disponibilidad.
Este proyecto está enfocado en la síntesis lógica de la CPUCR utilizando el método del
diseño total del circuito a nivel de transistores a base de celdas estándar usando la librería
AMI 0.5 micrones. Por esto, es importante estudiar con más detalle este punto. De aquí
en adelante, se toma como válido el diseño en Verilog propuesto por el profesor Roberto
Rodríguez, el cual a su vez está basado en el diseño descrito por Roberto Arellano y José
Antonio Cruz.
2.1.2 Síntesis lógica
La síntesis lógica provee un enlace entre un HDL (Verilog o VHDL) y una descripción
del circuito en términos de una librería basada en una tecnología específica de manera
análoga a como un compilador C enlaza al código C con el lenguaje de máquina.
10
http://lsiwww.epfl.ch/LSI2001/teaching/webcourse/ch01/Figure-1.26.mini.gif
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas
de Synopsys
9
El lenguaje HDL no fue diseñado para su uso con herramientas de síntesis lógica, sino
que fue diseñado como un lenguaje de simulación y el VHDL como un lenguaje de
documentación y descripción. Estos lenguajes fueron desarrollados a principios de los
ochenta, mucho antes de la comercialización de los programas de síntesis lógica. Debido
a que estos formatos se han expandido hacia la síntesis, y no sólo a la simulación, el
conjunto de instrucciones sintetizables de un HDL es más bien un subconjunto del total
de instrucciones simulables. Además, no existe un estándar acerca de las instrucciones
que son sintetizables, por lo tanto, cada sintetizador define ese subconjunto, por lo que
todos los sintetizadores son ligeramente diferentes.
Para realizar la síntesis lógica de un sistema, primero un diseñador debe crear un modelo
por comportamiento del sistema. Puede ser una máquina de estados como en la CPUCR,
en HDL, el cual no contiene ninguna referencia acerca de la lógica de celdas a utilizar en
la síntesis del mismo.
Una vez que este modelo en HDL está completo, con sus
respectivas pruebas, se requieren dos herramientas: un sintetizador lógico (software y
documentación), para nuestro caso usamos herramientas de Synopsys, y una librería de
celdas, que en este caso sería la librería AMI 0.50 micrones. Una vez definidas estas
herramientas, se utiliza el sintetizador lógico para generar un netlist, que es un modelo
estructural, el cual contiene referencias a la lógica de celdas. Después de creado el
modelo, este se vuelve a simular y el resultado se debe comparar con la simulación
obtenida con la versión por comportamiento.
2.2 Herramientas de Synopsys
Uno de los principales fabricantes de programas para el diseño con semiconductores es
Synopsys Incorporated. Dentro de esta línea de programas se encuentran el Design
Compiler11 (DC) y el Design Analyzer12 (DA), los cuales han sido desarrollados para la
síntesis lógica del diseño.
11
12
Compilador del diseño
Analizador del diseño
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 10
de Synopsys
El DC, traduce el modelo por comportamiento en HDL a una visualización a nivel de
compuertas y posteriormente de transistores. Una vez con este nuevo modelo, el DC
permite hacer optimizaciones de temporización, de potencia, de área y de las rutas de
datos. Todo esto se puede observar en el flujo de diseño de la figura 2.4. Además, se
utilizan diferentes librerías de tecnologías de transistores de acuerdo a las
especificaciones que se requieran.
Esto permite el cambio de un mismo diseño a
diferentes tecnologías con tan sólo variar la librería.
Figura 2.5. Design Compiler dentro del flujo de diseño13.
El Design Analyzer, es la interfaz gráfica para muchas de las herramientas de síntesis de
Synopsys, entre ellas el Design Compiler. Gracias a esto, Design Analyzer tiene las
siguientes características14:
a. Dar valores de variable de sistema como el nombre de la biblioteca de
tecnología.
13
14
http://www.synopsys.com
Synopsys online documentation. Volume 1
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 11
de Synopsys
b. Leer y escribir diseños en múltiples formatos como EDIF, PLA, Verilog y
VHDL.
c. Elegir constantes y atributos gráficos en diseños, celdas, pines, buses y relojes.
d. Trabajar con diseños jerárquicos:
o Ver y moverse a través de las jerarquías.
o Ver diseños y subdiseños como cajas negras con puertos con
etiquetados.
o Agrupar gráficamente celdas y subdiseños.
e. Sintetizar circuitos digitales:
o Definir las condiciones de operación de los circuitos.
o Sintetizar circuitos jerárquicos, manteniendo las fronteras del diseño y
subdiseño mientras se hacen optimizaciones globales.
o Extraer máquinas de estado finitas de la lógica secuencial, definir
orden y codificaciones del estado, hacer optimizaciones de las
máquinas de estado y sintetizar un circuito secuencial equivalente.
f. Generar, ver y dibujar esquemáticos.
g. Mostrar la temporización de todos los elementos.
h. Resaltar rutas en esquemáticos.
i. Generar una variedad de reportes.
2.2.1 Librerías de celdas
Tal y como se ha mencionado anteriormente, las librerías de celdas son parte fundamental
a la hora de la síntesis del modelo del sistema. Estas consisten en familias de celdas, por
ejemplo compuertas NAND, inversores, NOR, o más complicadas como Flip-Flops, todas
debidamente caracterizadas y relacionadas con algún proceso de fabricación, esto con el
fin de acelerar el proceso de diseño de un circuito integrado.
Entre las principales propiedades descritas en los modelos de las celdas se encuentran:
•
La función que realizan (NAND, NOR, NOT, etc.)
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 12
de Synopsys
•
Todo tipo de características de temporización, tales como retardos, tiempos de
subida, tiempos de bajada, etc.
•
Potencia (Estática y dinámica)
•
Capacitancias
•
Área
Además de estas propiedades, también podemos encontrar otras características en los
modelos:
•
Esquemáticos del circuito
•
Un icono para cada celda
•
Un modelo físico
Ahora bien, las librerías son llamadas de acuerdo a la compañía que hizo la
caracterización, así como al proceso al que está dirigida. Entonces, para este caso, la
librería AMI 0.5 significa que fue realizada por la compañía AMI Semiconductor para el
proceso de fabricación a 0.5 micrómetros (micrones), este último número es mejor
conocido como el doble de λ. Este número λ, indica la mitad de la distancia mínima entre
la fuente y el drenaje del transistor para la cual el fabricante garantiza que no habrá un
cortocircuito entre la fuente y el drenaje, en la figura 2.7 se ilustra esta distancia. En
otras palabras, este valor de 0.5 micrones, garantiza que la distancia eficaz entre la fuente
y el drenaje después del proceso de fabricación será mayor a cero. Esto pues, durante el
proceso de fabricación, el chip se ve envuelto en una serie de pasos que requieren altas
temperaturas, lo que produce un cambio físico en el material con que se hace el drenaje y
la fuente, como se detalla en la figura 2.8, donde la distancia eficaz está denotada como
Leff.. Para la figura 2.7:
λ = L/2
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 13
de Synopsys
Figura 2.6. Ilustración de un transistor NMOS15.
Figura 2.7. Ilustración de la Leff15.
Para poder tener una mejor idea de lo que se incluye en las librerías de celdas, se puede
observar en el anexo 1 la representación de la compuerta Flip-Flop tipo D en la librería
AMI 0.5.
Entre las principales características16 de esta librería se encuentran:
•
Voltaje de operación: 3 V, 5 V y 12 V
•
Soporta de 2 a 3 capas de metal
•
Utiliza polisilicio de alta resistencia
•
Abarca un promedio de 4200 compuertas por mm2
•
Puede operar de -55 a 125 °C de temperatura
Los archivos de la librería vienen en varios formatos, entre estos se encuentran los
archivos con extensión “.lef” el cual contiene información física de las compuertas
(dimensiones, área, materiales) y otro con extensión “.tlf” que contiene información más
específica de las características de funcionamiento de la tecnología.
El archivo de la librería con extensión “.db” es el que se utiliza a la hora de llamar a esta
desde el Design Analyzer.
15
16
http://www.ee.duke.edu/~krish/teaching/Lectures/MOS-theory-2004.pdf
http://www.amis.com/pdf/C5_process_spec.pdf
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 14
de Synopsys
CAPÍTULO 3: Guía para el uso de Design Analyzer en la
síntesis de circuitos integrados
3.1
Ventana del Design Analyzer
Como ya se ha mencionado antes, el Design Analyzer es la interfaz gráfica de varias
herramientas de Synopsys incluyendo al Design Compiler.
Figura 3.1. Ilustración de la ventana del Design Analyzer.
Para iniciar el Design Analyzer, primero se debe iniciar una interfaz gráfica para el
sistema operativo Linux. Una vez realizado este paso se puede iniciar el programa de dos
maneras:
•
Abrir una ventana de comandos y digitar “design_analyzer”
•
Se busca, por medio de un manejador de archivos, el directorio donde se
encuentra el archivo ejecutable de design analyzer, una vez encontrado,
ejecutarlo dando doble clic al mouse.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 15
de Synopsys
Una vez que se ejecute el programa, se abrirá una ventana como la mostrada en la figura
3.1. La ventana principal del design analyzer consiste en una barra de menú, cuatro
botones de vista, dos botones de nivel, dos barras de movimiento, un área de texto y una
ventana.
3.1.1 Barra de menú
La barra de menú cuenta con ocho submenúes; los cuales contienen la mayoría de las
funciones del design analyzer con lo que se facilita el uso del programa.
Los submenúes se ilustran en la figura 3.2. Las funciones de cada submenú se describen
a continuación:
SETUP (Configuración)
•
Definir los caminos de búsqueda, las librerías asociadas.
•
Ajustar variables del sistema:
a. En este submenú se encuentran todas las variables del DA,
para activar o desactivar una variable se debe definir su
estado en true (verdadero) o false (falso).
b. Todas las variables tienen una definición por defecto,
algunas se encuentran en verdadero y otras en falso. Esto
para realizar síntesis básicas; cuando se requiera se pueden
modificar.
•
La ejecución de scripts.
•
Desplegar la ventana de comandos.
FILE (Archivo)
•
Leer archivos de descripción del diseño.
•
Analizar y elaborar archivos y diseños HDL.
•
Importar información física y de temporización de un cluster.
•
Salvar el diseño en distintos formatos.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 16
de Synopsys
•
Salvar la información de las restricciones, temporización y configuración para
herramientas externas.
•
Dibujar diseños.
•
Salir del design analyzer.
EDIT (Editar)
•
Insertar almohadillas (pads) en diseños en FPGA.
•
Editar la jerarquía del diseño creando y modificando los subdiseños.
•
Unificar las instancias del diseño.
•
Remover todos los atributos y constantes.
•
Encontrar objetos en el diseño según su función, tales como puertos, celdas,
redes o pines.
VIEW (Vista)
•
Ver la jerarquía del diseño, sus símbolos mostrando los puertos y sus
esquemáticos.
•
Cambiar la vista del diseño.
•
Cambiar las hojas del diseño.
•
Crear una nueva ventana de vista.
•
Recrear y refrescar un esquemático.
ATTRIBUTES (Atributos)
•
Especificar los relojes y sus propiedades.
•
Especificar:
ƒ
Retardos en la entrada y salida
ƒ
Carga
ƒ
Condiciones de operación
ƒ
Carga de las conexiones
ƒ
Rango de tiempo
ƒ
Características varias
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 17
de Synopsys
•
Especificar constantes de diseño (metas) incluyendo área, potencia y
velocidad.
•
Caracterizar un subdiseño en el contexto del diseño actual.
•
Especificar opciones y directrices para las herramientas de síntesis del design
compiler.
ANALYSIS (Análisis)
•
Asociar al diseño actual.
•
Revisar los errores del diseño actual.
•
Actualizar las estimaciones de temporización usando el timing analyzer, el
cual es otro programa de Synopsys que viene incluido en el paquete.
•
Mostrar valores de temporización.
•
Resaltar los caminos (paths) máximo, mínimo y críticos.
•
Obtener diferentes tipos de reportes del diseño actual.
TOOLS (Herramientas)
•
Sintetizar y optimizar el diseño.
•
Crear y optimizar un diseño de una máquina de estados finita.
•
Crear y optimizar diseños en FPGA.
•
Añadir estructuras de prueba y obtener reportes de estas pruebas.
HELP (Ayuda)
•
Obtener descripciones de la funciones del design analyzer.
•
Ver documentación en línea.
Figura 3.2. Submenú de atributos resaltado17.
17
Material de referencia de Synopsys
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 18
de Synopsys
3.2 Síntesis de un nuevo proyecto
Una vez que se cuenta con un diseño en un lenguaje de descripción de hardware,
entonces se procede a utilizar al DA para la síntesis del mismo, para esto se pueden
seguir dos caminos:
•
Manual: Ejecutando paso a paso las instrucciones requeridas para la síntesis
de acuerdo a nuestro criterio. Este camino a su vez tiene dos posibilidades:
ƒ
Utilizar las instrucciones que vienen dadas en los submenúes
del Design Analyzer.
ƒ
•
Escribir las instrucciones una a una en la ventana de comandos.
Por medio de un script18: Elaborando un script con las instrucciones que
deseamos, al igual que se hace con la barra de comandos, sólo que este nos
queda para volverlo a correr ahorrando el tiempo de la ejecución paso a paso,
una y otra vez.
3.2.1 Síntesis manual
Como la utilización de los submenúes del DA con sus respectivas opciones requieren que
el usuario conozca la función de las instrucciones, se puede decir que si el usuario sabe
utilizar la ventana de comandos, podrá entender fácilmente los comandos que vienen en
los submenúes.
3.2.1.1 Ventana de comandos
Para la ejecución de instrucciones, se debe invocar a la ventana de comandos a través del
submenú SETUP en la barra de menú. Aparecerá una ventana idéntica a la de la figura
3.3. Sobre el cuadro que le sigue a la frase “design_analyzer >” es donde se escriben los
comandos a emplear.
Aparte de ejecutar los comandos, la ventana de comandos también despliega gran
cantidad de información relacionada con cada instrucción ejecutada. Esta información
queda almacenada en la ventana dando lugar a una bitácora de la síntesis. Entre esta
18
Script es un programa ejecutable con extensión “.scr”
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 19
de Synopsys
información destacan los mensajes de advertencia y error, los cuales vienen con una
breve descripción del problema seguida de una abreviatura con un número. Este código
permite buscar la violación incurrida en los discos de referencia de Synopsys.
Figura 3.3. Ventana de comandos.
El Design Analyzer cuenta con cientos de comandos y variables lo cual hace tedioso el
aprenderse la forma correcta del uso de cada uno, por esto, en el submenú “AYUDA”, en
la opción “Comandos”, el DA ofrece una guía de cada comando señalando su función,
sus opciones y su forma correcta de uso. Esta guía también está contenida en los discos
de referencia de Synopsys.
La mejor manera para llevar un diseño ordenado, es utilizando el esquema de la figura
3.4, en el cual se parte del modelo del sistema a sintetizar en alguno de los lenguajes de
descripción de hardware (HDL).
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 20
de Synopsys
Esquema para la
síntesis
Especificar las librerías
Leer el diseño
Definir el entorno
Definir las
restricciones
Optimizar el diseño
Analizar y resolver
los problemas de
diseño
Salvar la base de
datos del diseño
Figura 3.4. Esquema para la síntesis de un proyecto en el Design Analyzer.
3.2.1.2 Especificación de la librería
Una vez que se cuenta con el modelo HDL, el siguiente paso es especificar la tecnología
que vamos a emplear por medio de las librerías de celdas, para esto se utilizan las
siguientes instrucciones:
•
“link_library”: Especifica la librería a enlazar.
•
“target_library”: Especifica la librería de la tecnología a utilizar en el diseño.
•
“symbol_library”: Especifica la librería de los símbolos a utilizar en el
esquemático.
El DA, también da la opción de definir preferencias entre celdas que implementen la
misma función pertenecientes a una misma librería, esto se logra mediante el comando
“set_prefer” seguido de: (nombre de la librería)/(nombre de la celda).
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 21
de Synopsys
Cuando no se especifica alguna librería, el DA automáticamente interpreta que debe
utilizar una librería genérica (sin caracterizar), esta librería está ubicada en el mismo
programa.
Además, se debe definir un directorio de trabajo que actuará como librería del diseño a
realizar, para esto se emplea la instrucción “define_design_lib” seguida del nombre del
directorio y su ubicación.
3.2.1.3 Lectura del diseño
Durante la lectura, el DA lee el archivo HDL y lo traduce al formato “.db”,
almacenándolo en la memoria interna asociada al DC.
Para esto se utiliza el comando “read” seguido del formato a leer y por último el nombre
del archivo.
También se puede utilizar los comandos:
•
“analyze”: Analiza los archivos HDL y los almacena en el formato intermedio
para la descripción en HDL en la librería especificada.
•
“read_file”: Lee el diseño o librerías hacia la memoria interna del Design
Compiler.
•
“elaborate”: Construye un diseño desde el formato intermedio. Elabora el
esquemático.
Una vez leído el archivo, se puede definir un nombre para el diseño en ejecución, para
esto se emplea el comando “current_design” seguido del nombre del módulo de mayor
jerarquía dentro del archivo HDL.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 22
de Synopsys
3.2.1.4 Definición del entorno
El entorno abarca todas aquellas variables que se encuentran fuera del diseño en sí, tales
como:
•
Carga que se va a suplir
•
Temperatura de operación
•
El tipo de proceso de fabricación
•
El voltaje de operación
Las últimas tres, se conocen como condiciones de operación; estas se pueden definir por
la instrucción “set_operation_conditions”.
Las condiciones de operación vienen en
librerías, por lo que el comando “set_operation_conditions” lo que hace es hacer un
enlace entre el diseño y la librería que contiene las condiciones.
Por ejemplo, si tenemos la librería:
“Operating_conditions (“BBB”) {
Process: 0.6;
Temperature: 20;
Voltage: 5.25;
}”
Luego, para implementar esta librería se emplearía el comando:
Set_operation_conditions BBB
Para definir las cargas en un puerto o red, se utiliza el comando “set_load” seguido del
valor de la carga y del nombre del puerto.
3.2.1.5 Definir las restricciones
Las restricciones son los límites que el diseñador fija como constantes para su diseño, tal
como puede ser una potencia máxima, un reloj mínimo o un área máxima.
Estas se pueden clasificar en dos grupos:
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 23
de Synopsys
•
Restricciones de reglas de diseño: en general, este tipo de restricciones son
aquellas restricciones específicas de la tecnología que deben ser alcanzadas
para que el diseño funcione correctamente.
Entre estas destacan la
capacitancia máxima, el máximo tiempo de transición y el máximo número de
salidas o “fanout” que puede alimentar. Para estas se utilizan los comandos
“set_max_transition”,
“set_max_capacitance”
y
“set_max_fanout”
respectivamente. Igualmente se utilizan los mismo comandos pero cambiando
max por min, en cuyo caso restringen los casos mínimos en vez de los
máximos.
•
Restricciones de optimización del diseño: estas restricciones reflejan metas de
diseño menos críticas que son deseables pero no cruciales para el
funcionamiento del diseño. Dentro de estas la principal es la definición del
reloj. Además se pueden contar los retardos de entrada (“set_input_delay”) y
salida
(“set_output_delay”), así como la optimización del área o
“set_max_area”.
El definir el máximo tiempo de transición permisible previene la posibilidad de
transiciones muy lentas en conexiones largas, lo cual produciría retardos mayores.
Para el reloj, comúnmente se utilizan los siguientes comandos:
•
“create_clock”: Sirve para crear un reloj, se utiliza create_clock nombre del
puerto –name nombre del reloj –period período del reloj en nanosegundos.
•
“set_dont_touch_network”: Se utiliza para que el compilador no modifique el
“fanout” de una red, esto con el fin de que no modifique la del reloj.
•
“set_clock_skew”: Se utiliza para definir las diferencias de temporización
entre varias “copias” de un mismo reloj, por ejemplo, “set_clock_skew –
rise_delay 1”, lo cual estaría definiendo la diferencia del retardo de subida del
reloj en un nanosegundo.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 24
de Synopsys
3.2.1.5 Optimización del diseño
Para la optimización del diseño se utiliza la instrucción “compile”. Esta realiza una
síntesis a nivel de lógica y compuertas, a la vez que realiza una optimización del diseño
en ejecución basado en las restricciones definidas por el usuario. La compilación del DA
siempre, por regla, trata de dar el diseño más pequeño y rápido posible. Existen varias
banderas relacionadas con la función compile, entre ellas destacan:
•
-map_effort: Define el grado de esfuerzo del programa para realizar el arreglo
estructural del diseño, esta se puede definir como low (bajo), medium
(mediano) o high (alto).
•
-incremental_mapping: Especifica que sólo se hagan optimizaciones de forma
incremental.
Las partes del diseño que ya han sido optimizadas no se
modifican.
•
-ungroup_all: Une a todos los niveles de jerarquía en el diseño excepto a
aquellos que han sido protegidos por el atributo “dont_touch”.
Además del comando compile, hay otros comandos de uso menos frecuente que también
ayudan a optimizar un diseño desde otros puntos de vista. Un ejemplo de estos es el
comando “set_flatten” el cual reduce toda la red de lógica a una representación de suma
de productos de dos niveles (compuertas “Y” y “O”) al remover variables intermedias,
esto es lo que se conoce como aplanar al diseño.
3.2.1.6 Análisis y resolución de problemas de diseño
El Design Analyzer realiza una comprobación del diseño para asegurar que sea
consistente. Cuando el DA encuentra inconsistencias, estas se reflejan en mensajes de
advertencias o errores. Las advertencias son de carácter informativo y no necesariamente
indican problemas en el diseño, sin embargo, es muy recomendable su investigación para
saber el origen de la misma. Por otra parte, los mensajes de error señalan problemas
graves que impiden la compilación del diseño. Como se mencionó anteriormente, las
advertencias y los errores van seguidos de una abreviatura con el fin de buscar su
descripción en la referencia de Synopsys.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 25
de Synopsys
Se utiliza el comando “check_design” normalmente sin más argumentos, pero también se
cuenta con algunas opciones para esta instrucción, tales como:
•
-no_warnings: esto indica que se supriman los mensajes de advertencias,
entonces sólo se muestran los mensajes de errores.
•
-summary: este argumento le indica al DA que muestre, en un solo mensaje,
un sumario de las advertencias, en vez de un mensaje por advertencia.
Además, también el DA genera varios reportes con el fin que el usuario obtenga toda la
información necesaria para el análisis del diseño. Para generar dichos reportes, se utiliza
el comando “report” seguido de una “_” y a continuación el tipo de reporte que se quiere,
por ejemplo report_area. El DA genera más de 30 tipos diferentes de reportes, los de
mayor relevancia son:
•
Area: Reporta el área total utilizada por todo el diseño. Además, también
reporta el número total de celdas, puertos y referencias usadas en el diseño.
Las referencias son las celdas de la librería utilizadas.
•
Power: Hace un reporte de la potencia tanto estática como dinámica del
diseño.
•
Cell: Reporta las celdas de la librería utilizadas en el diseño.
•
Timing: Señala el camino con la temporización más lenta y a su vez determina
el tiempo que dura algún dato desde que entra a esta hasta que sale.
•
Clock: Muestra todas las características del reloj del diseño.
•
Constraint: Reporta todas las restricciones definidas en el diseño.
Para que el DA guarde los reportes en archivos que se puedan leer, se debe hacer uso de
la siguiente sintaxis:
report_(tipo de reporte) > (nombre aleatorio del archivo).rep
El formato “.rep” indica que el archivo es un reporte, y es de fácil lectura en cualquier
programa editor de textos de Windows o Linux.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 26
de Synopsys
3.2.1.7 Salvar la base de datos del diseño
Una vez que se llega a este punto, lo que se quiere es guardar la síntesis obtenida por la
herramienta. Para esto se utiliza el comando “write”, el cual escribe el netlist o el
esquemático del diseño en un archivo. El design analyzer soporta varios formatos, para
ello se puede observar la tabla 3.1.
El formato por defecto es el “.db”, el cual es un formato interno de Synopsys. Este
formato puede ser utilizado para ser usado en cualquier otra herramienta de Synopsys.
Tabla 3.1. Formatos aceptados por el Design Analyzer.
Formato
Descripción
Extensión
Database
Formato interno de base de datos de Synopsys
.db
EDIF
Formato de intercambio de diseño electrónico
.edif
Equation
Formato de ecuación de Synopsys
.eqn
LSI
Formato de netlist de la corporación LSI Logic
.NET
Mentor
Formato NETED de Mentor (sólo de escritura)
.neted
MIF
Formato intermedio de Mentor
.mif
PLA
Formato PLA de Berkeley
.pla
State table
Formato de tabla de estados de Synopsys
.st
TDL
Formato netlist del lenguaje de diseño Tegas
.tdl
Verilog
Lenguaje de descripción de hardware
.v
XNF
Formato de netlist de Xilinx
.xnf
VHDL
Lenguaje de descripción de hardware VHSIC
.vhdl
Existe cierto tipo de información que el DA por defecto no escribe en los archivos antes
citados.
Para definir ciertos parámetros sobre la información que se guarda en los
archivos tipo “v” o “vhdl”, se utilizan los comandos “verilogout_(argumento)” y
“vhdlout_(argumento)”. Entre los argumentos para los archivos “.v”, se encuentran:
•
Mostrar los pines sin conexión: “show_unconnected_pins”.
•
Mostrar los pines de poder: “show_power_pins”.
•
Mostrar los archivos incluidos en el diseño: “include_files”.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 27
de Synopsys
•
Declarar las redes de tercer estado como “wire19” en lugar de “tr20i”:
“no_tri”.
3.2.2 Síntesis por medio de un script
Al tener un esquema básico para la síntesis de un diseño, en este se definen los comandos
generales a utilizar en la síntesis. Siguiendo este esquema, se puede editar un script que
contenga a estos comandos, el cual se puede ejecutar posteriormente en el Design
Analyzer.
La principal ventaja de este script radica en la reducción del tiempo necesario en la
digitación de los comandos para varias modificaciones de un mismo diseño; pues si se
requiere cambiar algún argumento de un comando, se cambia este en el script y se vuelve
a correr la síntesis en el DA, evitando así el tener que volver a digitar cada uno de los
comandos necesarios para la síntesis. Además, es una manera ordenada de llevar un
registro de las instrucciones ejecutadas en el DA, ya que aunque la ventana de comandos
lleva este registro, viene en forma desordenada, mientras que en el script todas las
instrucciones se encuentran fácilmente.
Es importante tener en cuenta que el design analyzer ejecuta al script de manera serial y
no en paralelo, esto quiere decir que las instrucciones son ejecutadas en el mismo orden
en el que se encuentran en el script. En el caso de la síntesis, esto es de gran relevancia,
pues, por ejemplo, no es lo mismo primero utilizar la función “compile” y luego definir el
reloj, que primero definir el reloj y luego hacer la compilación. Esto pues la compilación
trata de hacer la optimización del diseño con las restricciones dadas, así, si al ejecutar
“compile” no se tiene la restricción del reloj, esta no se optimiza.
La ejecución del script por parte del DA se realiza instrucción por instrucción, gracias a
esto, a la hora de presentarse errores, el DA interrumpe la ejecución del script y abre una
19
20
Esta declaración le asigna el atributo de cable a una señal en formato Verilog.
La declaración “tri” se refiere a un búfer de tercer estado en formato Verilog.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 28
de Synopsys
pequeña ventana con el mensaje de “error”, seguido de una explicación del mismo, y a la
vez, le pregunta al usuario si desea continuar la ejecución del script. Así pues, queda a
discreción del usuario la gravedad del error. Las advertencias, al no ser tan críticas como
los errores, no tienen el mismo procedimiento, sino que estas aparecen en la ventana de
comandos en la bitácora de la síntesis que realiza el DA, tal como se explicó en la sección
3.2.1.1. A la hora de hacer un script, este debe hacerse siguiendo los pasos de la guía
dada en el esquema de la figura 3.4.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 29
de Synopsys
CAPÍTULO 4: Síntesis de la CPUCR con el Design
Analyzer
Siguiendo los pasos sugeridos en el capítulo anterior, se trató de sintetizar el diseño por
comportamiento de la CPUCR dado por el profesor Roberto Rodríguez, con nombre
cpucr_rarr.v, el cual incluye a su vez al archivo Dec_Inst.v que define los valores de las
instrucciones de la CPUCR. Ambos archivos se encuentran en el apéndice F.
Para este fin se creó un archivo tipo script para luego ejecutarlo en el Design Analyzer y
poder hacer esta síntesis. El contenido de este archivo se puede observar claramente en el
apéndice A.
Para nuestro diseño, utilizamos como base un script suministrado por el profesor Enrique
Coen realizado por Johannes Grad, el cual se puede observar en el apéndice B.
A este último script, se le realizaron las siguientes modificaciones para adaptarlo a la
síntesis de nuestro diseño:
a) Se le agregó un reloj.
b) Se incrementó el esfuerzo de mapeo en la instrucción compile de medium
a high, para realizar una compilación más exhaustiva.
c) Se eliminaron las líneas para crear los pads del diseño, pues no se
requieren.
d) Para escribir el formato en lenguaje de hardware, se cambió el formato de
“.vh” a “.v” para facilitar la simulación en Verilogger21.
e) Se agregó el reporte de área.
f) Se eliminó el comando “quit”, pues este le indica al Design Analyzer que
se desea cerrar el programa, lo cual no es cierto, por lo que simplemente se
omitió este comando y el DA de forma automática deja de ejecutar el
script cuando ya no lee más instrucciones.
21
Verilogger es una herramienta de simulación de hardware de la compañía Synapticad.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 30
de Synopsys
Se le agregó el reloj utilizando las siguientes instrucciones:
“create_clock CLK –name RELOJ –period 6
set_dont_touch_network RELOJ”
Para llegar al periodo de 6 nanosegundos mostrado, primero se realizaron pruebas
comenzando desde 1 nanosegundo y aumentando de uno en uno hasta llegar a 6, el cual
era el mínimo que cumplía con la meta de tiempo. Esto se hizo gracias a los reportes de
temporización, los cuales indican si el modelo sintetizado cumple con las expectativas de
tiempo.
Una vez llegado al resultado antes mencionado, se comprobó por medio de la hoja de
características de la tecnología dada por el fabricante22 que el reloj recomendado para
esta librería es de 6 nanosegundos.
4.1 Problemas en la síntesis de la CPUCR
Dentro de los problemas en la síntesis de la CPUCR, se incluyen los problemas que
impidieron una síntesis correcta del diseño, o sea, sin errores ni advertencias. Entre estos,
errores en el código que impiden la correcta interpretación del diseño por parte del
compilador.
Para los significados de las instrucciones propias de la CPUCR referirse al apéndice C.
El primer problema encontrado luego de realizar la primera síntesis fue la inferencia de
flip-flops genéricos por parte del compilador en el registro del estado presente llamado
“EstPresente”. El código de transferencia del registro de la máquina de estados, utilizada
en el modelo de la CPUCR que se suministró originalmente, se muestra a continuación:
22
http://www.amis.com/databooks/ami500xxxxREV_2.book.pdf
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 31
de Synopsys
“always @(negedge CLK or negedge RPS)
begin
if (!RPS)
EstPresente <= Estado_0;
else
EstPresente <= ProxEst;
end”
Esta forma de código infiere flip-flops tipo D de flanco negativo con reset asíncrono
activado en bajo por la señal de reposición (RPS). La librería AMI 0.5 con la que cuenta
el Departamento de Automática y Sistemas Digitales de la Escuela de Ingeniería Eléctrica
de la UCR, no cuenta con flip-flops con reset de ningún tipo. De hecho solo cuenta con
flip-flops tipo D comunes, activados por flanco sea positivo o negativo.
Para la solución de este problema, lo que se hizo fue cambiar el código para que el
compilador interpretara el registro de la máquina de estados como flip-flops D contenidos
en la librería, a expensas del cambio en el funcionamiento. Este cambio consistió en
quitar la señal RPS de la lista de sensitividad y de este modo generar un reset sincrónico.
El código modificado se simuló en Verilogger en su versión 7.2 para comprobar que el
diseño modificado se ajustara al funcionamiento del original. El resultado fue idéntico al
obtenido con el código original desde el principio, excepto que la señal de reposición
(RPS) debe mantener su señal válida por lo menos hasta que pase un flanco negativo del
reloj, quedando por lo tanto con reposición sincrónica.
Al realizar la síntesis del nuevo modelo con reset sincrónico, se generó un estructural
completo hecho con todas las celdas de la librería AMI 0.5. En la simulación del
comportamiento de éste se encontró que no se comporta como el conductual ya que
generaba errores de valores indeterminados, en todas sus salidas, a partir de cierto punto.
Además se obtuvieron ciertas advertencias, las cuales indican errores de sintaxis del
código de la CPUCR.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 32
de Synopsys
Se presentaron advertencias con respecto a la directiva “//synopsys parallel_case”, esta
directiva afecta la forma como se genera la lógica para la declaración case. Una
declaración case genera la lógica de un decodificador de prioridad; al usar la directiva
“parallel_case“se fuerza al compilador HDL a generar una lógica de multiplexor. Se
dieron advertencias en los case donde se evalúa el registro RI, ya que para usar esta
directiva los branches23 del case deben ser mutuamente excluyentes y estos al parecer no
lo son. Esto se eliminó de varias formas:
1. Suprimiendo esta directiva del código.
2. Desactivando la variable “hdlin_check_user_parallel_case”. Ésta variable
lo que hace es que el compilador reconozca o no la directiva //synopsys
parallel_case.
3. Sustituyendo el case por una serie de “if-else” anidados. Esta forma es un
poco tediosa, pero el resultado es el mismo que en los case no paralelos.
También se generó otra advertencia en uno de los case que evalúa al registro RI, ubicado
en el Estado_2. Se dio el error “statement unreachable”24, la cual se da debido a un
pequeño error en el código pues en el mismo case se tenía repetidas dos instrucciones: la
de salto indirecto (JMPind) y la de salto a subrutina (JSRind). Al eliminar esta repetición
de instrucciones la advertencia desapareció.
Otra advertencia señalaba que la señal HALT debía ir dentro de la lista de sensitividad de
la lógica combinacional que cambia las señales de salida de control de la CPUCR. Esta
señal debía incorporarse a esta lista de sensitividad en el código del modelo por
comportamiento en Verilog de la siguiente forma:
“always @(EstPresente or INT or SDMA or WAIT or RI or S[2] or HALT)”
Con solo esta inclusión se logró eliminar este problema.
23
24
Ramas del case
Declaración inalcanzable
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 33
de Synopsys
Se generaron advertencias que indicaban que el DA había deshabilitado automáticamente
un arco de tiempo entre los pines de una celda (U6) para eliminar un lazo de tiempo.
Esto no genera ningún problema, y no afecta en nada la síntesis. Se puede decir que esta
advertencia es de carácter informativa.
Luego de cada uno de los cambios antes mencionados se procedió a simular en
Verilogger para comprobar el correcto funcionamiento de la lógica de la nueva versión
conductual, y en todos los casos no se presentó ningún cambio con respecto al
comportamiento original.
La realización de todas las pruebas en Verilogger se lograron gracias a la utilización de
los programas de prueba hechos por Ernesto Guevara Víquez en su proyecto
“Implementación de un ensamblador para la CPUCR en PERL”, los cuales se encuentran
en el anexo 2.
4.2 Problemas del código de la CPUCR conductual
Una vez que se logró una síntesis sin ningún error ni advertencia significativa que pudiera
afectar el comportamiento lógico del modelo estructural, se procedió a hacer las pruebas
respectivas al modelo estructural obtenido para poder comparar los resultados de ambos
modelos.
Al realizar las simulaciones, tanto del modelo conductual como del modelo estructural, se
presentó un nuevo problema, pues en algunos programas de prueba ambos modelos
fallaban, pues no coincidía el resultado de la simulación con las instrucciones dadas en el
programa. Por esto, se procedió a buscar algún otro modelo conductual de la CPUCR
con el fin de analizar posibles errores en el modelo conductual utilizado.
Se encontró un modelo conductual hecho por Roberto Arellano y José Cruz, por lo que se
procedió a la simulación y comparación entre ambos modelos conductuales,
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 34
de Synopsys
encontrándose un incongruencia entre los resultados, pues el modelo de Arellano y Cruz
si simulaba correctamente. Debido a esto, se revisó el código una vez más, pero no sólo
de manera que sintetizara bien, sino que funcionara toda la lógica.
Al revisar el código, se encontró que la instrucción STA no se encontraba en la lista de
instrucciones que contiene el case del Estado_2, del proceso de la máquina de estados.
Esto se reconoció porque en varios programas que utilizan dicha instrucción se daba una
oscilación en la salida de la señal HALT, lo cual indica que se tenía una instrucción no
reconocida, pues si esto se da, se va al estado 31, el cual pone a oscilar a la señal HALT.
Se corrigió el problema de comportamiento simplemente al incluir esta instrucción en la
lista, de esta forma el modelo conductual realizó los programas sin ningún problema.
Después de corregidos todos estos problemas se sintetizó un modelo estructural de la
CPUCR, el cual teóricamente debía funcionar, pero lamentablemente, aunque mejoró, no
mostró un comportamiento adecuado.
Los diagramas de tiempo de las pruebas
realizadas, el código conductual modificado y el código del modelo estructural obtenido
gracias al DA se muestran en el apéndice D, G y H respectivamente.
4.2.1 Descripción de los problemas en las simulaciones
Programa 1 y 2
Estos programas simulan bien, contienen instrucciones de tipo: inmediatas, relativas y de
control, no hay problemas con las instrucciones de salto condiconal, además no se hace
ninguna escritura a memoria ni a la pila.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 35
de Synopsys
Figura 4.1. Simulación programa de prueba 1.
Figura 4.2. Simulación programa de prueba 2.
Programa 3
Después de una instrucción de PLS va a la pila pero carga un dato con algunos bits en
alta impedancia y otros en cero, después se pierde el procesador cuando se encuentra una
instrucción BVC.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 36
de Synopsys
Figura 4.3. Simulación programa de prueba 3.
Programa 4
Al igual que el anterior se hace un PLS luego se va a la pila pero el dato en el bus de
datos tiene algunos bits en alta impedancia y el resto en cero. Se pierde cuando llega a
una instrucción BPL. Antes de esto se dan operaciones en las cuales se escribe en la
memoria con la instrucción PHA absoluto.
Figura 4.4. Simulación programa de prueba 4.
Programa 5
Al hacer un LDA absoluto se va a la dirección pero carga un dato con bits en alta
impedancia. Al hacer una AND absoluta el bus de datos también tiene bits en alta
impedancia. Finalmente el procesador se pierde al encontrar un BNE. Antes de esto se
dan operaciones en las cuales se escribe en la memoria con STA absoluto.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 37
de Synopsys
Figura 4.5. Simulación programa de prueba 5.
Programa 6
Primero se da un LDA inmediato el cual tiene varios bits en alta impedancia, después el
procesador se pierde con un BNE. Antes de esto se dan operaciones en las cuales se
escribe en la memoria STA absoluto.
Figura 4.6. Simulación programa de prueba 6.
Programa 7
Similar al caso anterior.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 38
de Synopsys
Figura 4.7. Simulación programa de prueba 7.
Programa 8
Con un LDA absoluto se va a la dirección y se obtiene un operando con bits en alta
impedancia. Luego con un STA indirecto cuando carga la parte alta de la dirección
efectiva el bus de datos esta en alta impedancia. Luego con un SUB absoluto va a la
dirección y finalmente se pierde con un BNE.
Figura 4.8. Simulación programa de prueba 8.
Programa 9
Similar al anterior, con un LDA indirecto que carga la parte alta de la dirección efectiva
con valores en alta impedancia.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 39
de Synopsys
Figura 4.9. Simulación programa de prueba 9.
De este mismo modo se dieron errores similares en los programas restantes. Para mayor
claridad se puede consultar el apéndice D, en el cual aparecen los diagramas de
temporización obtenidos de la simulación de todos los programas.
4.3 Análisis de resultados
Después de preparar el script, con todos los comandos, restricciones y reportes, y tras
realizar la síntesis de la CPUCR, solucionando los problemas que se presentaron con el
código y las advertencias del DA, se realizaron las pruebas de simulación de la misma y
con estos resultados se hizo un análisis crítico del comportamiento que presentó el
modelo estructural sintetizado, así como de las posibles soluciones a los errores
generados.
Pudo notarse que hay cierto patrón de comportamiento en los programas. Si se da un
error con una instrucción que aparezca varias veces en un mismo programa, éste se repite
de forma idéntica.
Se notó que hay un fallo en la lógica que controla el bus de datos. Ya que en muchos
casos se presentan bits en alta impedancia al leer de este bus, cuando se dan instrucciones
de tipo absolutas e indirectas, o en aquellas en las cuales se varía al registro de status. Es
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 40
de Synopsys
como si se bloqueara el acceso a lo datos de memoria, dejando en alta impedancia ciertos
bits los cuales debieron tener un valor lógico de uno. Aún cuando se dio este tipo de
errores, no se perdió el curso de la lógica que calcula la próxima dirección, excepto
cuando se carga una dirección con datos con algunos bits en alta impedancia, caso en el
cual se dirige a una posición indeterminada para luego volver a la siguiente instrucción.
El procesador se perdió definitivamente (poniendo todas sus salidas en valores
indeterminados), cuando se encuentra alguna instrucción de salto condicional que causa
que la siguiente dirección sea indeterminada, provocando el colapso del proceso del
programa. Esto parece lógico ya que los saltos condicionales dependen de las banderas
del registro status, que a su vez dependen de la condición del acumulador, de modo que si
el acumulador tiene un valor indeterminado, al ser leído con algunos bits en alta
impedancia o en cero, se va a afectar el efecto de las instrucciones de salto.
Por otro lado se obtuvo el reporte de inferencia de dispositivos del DA, y se construyó la
tabla 4.1. Esta muestra todos los dispositivos que el compilador infirió a partir de la
síntesis, la bitácora completa obtenida se incluyó en el apéndice E. Estos nombres se
usan para declarar las celdas del modelo estructural, y se generan a partir de los nombres
dados a los registros de la versión conductual. Se notó que todos los registros inferidos
concuerdan con los utilizados en el proceso de transferencia de registros del código. Lo
mismo sucede con la inferencia de los buffers de tercer estado.
Además, no se generaron latches indeseados. De modo que la síntesis en este sentido
pudo considerarse como satisfactoria.
Tabla 4.1. Dispositivos inferidos por el Design Analyzer.
Nombre del registro
Tipo
Número de bits
Temp_reg
Flip-flop
1
LE_PA_reg
Flip-flop
1
P_reg
Flip-flop
8
PC_reg
Flip-flop
16
RI_reg
Flip-flop
8
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 41
de Synopsys
LE_reg
Flip-flop
1
RDR_tri_enable_reg Flip-flop
16
RDR_reg
Flip-flop
16
Temp1_reg
Flip-flop
1
TB_reg
Flip-flop
8
BUSPC_reg
Flip-flop
16
S_reg
Flip-flop
8
LE_S_reg
Flip-flop
1
A_reg
Flip-flop
8
LE_PB_reg
Flip-flop
1
LE_A_reg
Flip-flop
1
LE_tri_enable_reg
Flip-flop
1
EstPresente_reg
Flip-flop
5
BUSDAT_tri
Tri-State Buffer25 8
BUSDAT_tri2
Tri-State Buffer
8
BUSDAT_tri3
Tri-State Buffer
8
BUSDAT_tri4
Tri-State Buffer
8
CM_tri
Tri-State Buffer
1
M_tri
Tri-State Buffer
1
RDR_tri
Tri-State Buffer
16
LE_tri
Tri-State Buffer
1
4.3.1 Posibles problemas
Como se indicó anteriormente, la lógica de manejo y control del bus de datos está
fallando. Esto puede ser debido a que el compilador interpretó una lógica a partir del
código, la cual genera buffers de tercer estado que bloquean las lecturas de la memoria o
de la pila. La tabla 4.1 muestra los dispositivos que infirió el compilador al hacer la
síntesis. En ésta tabla se notó la presencia de cuatro buffers de tercer estado de ocho bits:
25
Buffer de tercer estado.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 42
de Synopsys
BUSDAT_tri, BUSDAT_tri2, BUSDAT_tri3 y BUSDAT_tri4, los cuales como su
nombre lo indica tienen que ver con el manejo del bus de datos. Son cuatro debido a que
en el código se asignó al bus de datos los valores como se muestra a continuación:
“assign BUSDAT = LE_A ¿ 8’hzz:A;
assign BUSDAT = LE_S ¿ 8’hzz:S;
assign BUSDAT = LE_PB ¿ 8’hzz:BUSPC[7:0];
assign BUSDAT = LE_PA ? 8’hzz :BUSPC[15 :8] ;”
La cual es una forma válida de obtener buffers de tercer estado. Pero la forma que infiere
la lógica de tercer estado es con buffers sencillos, que son controlados con los registros:
LE_A, LE_S, LE_PB y LE_PA. La figura 4.10 muestra un ejemplo de la lógica inferida
con el comando assign para dos datos A y B controlados por SELA y SELB
respectivamente.
Figura 4.10. Lógica de tercer estado inferida con el comando assign.
En el caso de la lógica de la CPUCR los controladores de los buffers son registros que
cambian dependiendo del registro que está en el bus de datos.
Como los problemas de la simulación se presentan por bits en alta impedancia cuando
debían ser unos, la posible causa de esto puede ser la forma del código que controla el
BUS de datos. Hay un esquema de programación que permite que se infiera el registro
para la señal de control sin ponerlo explícitamente, esto se muestra en el siguiente
código:
module ff_3state (DATA, CLK, THREE_STATE, OUT1);
input DATA, CLK, THREE_STATE;
output OUT1;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 43
de Synopsys
reg OUT1;
always @ (posedge CLK) begin
if (THREE_STATE)
OUT1 = 1’bz;
else
OUT1 = DATA;
end
endmodule
De este modo se consigue la lógica de registro para el dato así como para el controlador
del buffer. El circuito inferido por el compilador se muestra en la figura 4.11.
Figura 4.11. Lógica de buffer de tercer estado con registros.
Se recomienda cambiar el código de la CPUCR de modo que se pueda inferir la lógica
de buffers con registros, para tratar de corregir los problemas de la síntesis. Esto se puede
hacer eliminando los assigns para el bus de datos y asignar el registro que va a estar en el
bus directamente dentro del estado donde variaban las señales de control: LE_A, LE_S,
LE_PA y LE_PB. Por ejemplo en el estado 3 del proceso de transferencias de registros se
tiene el siguiente código:
Estado_3:
begin
BUSPC <= PC + 16'b1;
if (RI == PHA)
begin
LE <= 1'b0;
LE_A <= 1'b0;
end
if (RI == PHS)
begin
LE <= 1'b0;
LE_S <= 1'b0;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 44
de Synopsys
end
end
Se recomienda cambiarlo por:
Estado_3:
begin
BUSPC <= PC + 16'b1;
if (RI == PHA)
begin
LE <= 1'b0;
BUSDAT <= A;
end
else
BUSDAT <= 8’hzz;
if (RI == PHS)
begin
LE <= 1'b0;
BUSDAT <= S;
end
else
BUSDAT <= 8’hzz;
end
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 45
de Synopsys
CAPÍTULO 5: Conclusiones y recomendaciones
5.1 Conclusiones
•
Se comprobó que el modelo conductual propuesto no es completamente
sintetizable en las herramientas de Synopsys. Por lo tanto, se debe volver a las
etapas anteriores del diseño para corregir el modelo de manera que sea
sintetizable.
•
Aunque el modelo conductual se comporte correctamente en las simulaciones,
esto no quiere decir que el modelo sea completamente sintetizable. Hay que tener
presente la manera en que el sintetizador interpreta al código para cumplir con
este objetivo.
•
Debido a los errores presentados en las simulaciones, realizadas al modelo
sintetizado (estructural) de la CPUCR, se puede afirmar que el error por el cual no
se logró una síntesis satisfactoria está relacionado con la lógica del control del bus
de datos. El fallo se produce después de ejecutar una instrucción que produzca
una escritura a memoria, esto hace que el procesador se pierda al encontrar una
instrucción de salto condicional.
•
A pesar de que el modelo estructural logrado no satisface el funcionamiento
normal de la CPUCR, se logró optimizar su reloj a la velocidad recomendada por
el desarrollador del proceso de la librería de celdas utilizada en 6 nanosegundos
(166.7 Mhz).
•
Aunque la principal herramienta utilizada fue el Design Analyzer, hay que resaltar
la importancia de utilizar paralelamente una buena herramienta de simulación que
ayude a verificar los resultados obtenidos.
•
La instalación de las herramientas en un servidor permite una mayor flexibilidad
del trabajo, pues se puede acceder a ellas a través de un acceso remoto por medio
de la red de internet.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 46
de Synopsys
5.2 Recomendaciones
•
Se debe regresar a las etapas de diseño anteriores relativas al modelado por
comportamiento de la CPUCR.
•
Para la realización de un modelo sintetizable con un comportamiento adecuado,
debe de tenerse en cuenta el estándar IEEE std 1364, el cual es la base de
referencia del compilador utilizado por el Design Analyzer.
•
Utilizar las herramientas de simulación propias de Synopsys para una mayor
agilidad a la hora del análisis, pues estas presentan una mayor compatibilidad
entre ellas.
•
Se debe conseguir una librería más completa, para así asegurarse una mejor
optimización del diseño.
•
En cuanto al código conductual de la CPUCR, se recomienda analizar la lógica de
control del bus de datos para cambiar el código de modo que se infieran los
elementos requeridos para el buen funcionamiento estructural de la CPUCR, para
esto se puede usar como ayuda el esquema de programación propuesto en la
sección 4.3.1. Esto para tratar de eliminar el problema de la alta impedancia
presentada en el bus de datos al ejecutar ciertas instrucciones.
•
Se recomienda analizar la lógica de transferencia de registros, sobre todo el
registro de status para evitar problemas con las instrucciones de salto, y en los
demás registros revisar si se encuentra algún fallo que pueda afectar la lógica de
control del bus de datos.
•
Para aquellas personas que deseen continuar con el trabajo de síntesis de la
CPUCR se les recomienda seguir las recomendaciones ya mencionadas, además
se debe usar como referencia los pasos que se sugieren en este trabajo, el cual es
una guía básica del uso del Design Analyzer, para referencias avanzadas se deben
usar los manuales proporcionados por Synopsys. Se consiguió la máxima
velocidad de acuerdo a la librería de celdas utilizadas, se puede intentar reducir el
área y la potencia para optimizar más el diseño, pero antes de eso se deben
corregir los errores del código para tener una compilación de la CPUCR que
ejecute bien todas las instrucciones.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 47
de Synopsys
BIBLIOGRAFÍA
Libros
1. Weste, N.
“Principles of CMOS VLSI design: a systems perspective”,
segunda edición, Editorial Addison Wesley Longman, Estados Unidos, 1992.
2. Thomas, D y Moorby, P. “The Verilog Hardware Description Language”,
tercera edición, Editorial Kluwer Academic Publishers, Estados Unidos, 1996.
3. Arellano, R y Cruz, J. “Modelado y síntesis de la CPUCR”, Universidad de
Costa Rica, Costa Rica, 2003.
Manuales
1. “Synthesis Quick Reference”. Versión 2002.05, Synopsys, Estados Unidos,
2002.
2. “Chip Synthesis Workshop: Student Guide”. Synopsys Customer Education
Services, Estados Unidos, 2002.
3. “Chip Synthesis Workshop: Lab Guide”.
Synopsys Customer Education
Services, Estados Unidos, 2002.
Páginas web
1. “Proceso de fabricación AMI 0.5 µm”, http://www.mosis.org.
2. “Especificaciones de la librería AMI 0.5 µm”, http://www.amis.com.
3. “Diseño en VLSI”, http://lsiwww.epfl.ch/LSI2001/teaching/webcourse/toc.html.
4. “Características de la librería AMI 0.5 µm”, http://germanium.cs.wustl.edu.
5. “Diseño en VLSI”, http://www.ee.duke.edu/~krish/teaching/Lectures/Intro.pdf.
Información digital
1. “Synopsys online documentation”, volumen 1, versión 2004.06, Synopsys,
Estados Unidos, 2004.
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 48
de Synopsys
APÉNDICES
Apéndice A. Script utilizado para la síntesis de la CPUCR
link_library=target_library={iit06_stdcells_pads.db} /*Especificación
de la librería
define_design_lib work -path . /*Carpeta de trabajo
read -f verilog cpucr_ALEJANDRO.v /*Archivo fuente
set_flatten true -effort high /*Aplanamiento
verilogout_show_unconnected_pins = "true";
max_area 0.0
current_design CPUCRale /*Diseño actual
set_max_fanout 8.0 CPUCRale
create_clock CLK -name RELOJ -period 6 /*Creación del reloj
set_dont_touch_network RELOJ /*Aislamiento de la red del reloj
compile -ungroup_all -incremental_mapping -map_effort high
/*Compilación
check_design /*Chequeo del diseño
write -f verilog -output CPUCR_ale.v /* Escritura del modelo
sintetizado en HDL
write -hier -output CPUCR_ale.db /*Escritura del modelo sintetizado en
formato de Synopsys
report_timing > ale_TEMP.rep /*Reporte de tiempo
report_area > ale_AREA.rep /*Reporte de área
Apéndice B. Script original
/**************************************************/
/* Compile Script for Synopsys
*/
/* Johannes Grad, IIT
*/
/*
*/
/*
*/
/* Change "TOP_LEVEL_NAME" to your design name
*/
/* Change "FILE_NAME" to your verilog sourc
*/
/*
code file. If you have more than
*/
/*
one, you need one line for each
*/
/*
Do not include the testbench
*/
/**************************************************/
link_library=target_library={iit06_stdcells_pads.db}
define_design_lib WORK -path .
read -f verilog FILE_NAME.v
set_flatten true
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 49
de Synopsys
verilogout_show_unconnected_pins = "true";
max_area 0.0
current_design TOP_LEVEL_NAME
compile -ungroup_all -map_effort medium
set_max_fanout 8.0 TOP_LEVEL_NAME
compile -incremental_mapping -map_effort medium
check_design
/*
/*
/*
/*
If you want pads, uncomment these 2 lines and */
list all your pins/busses that you want have as pads */
set_port_is_pad {clk,load,Cin,Z,A,B} */
insert_pads */
write -f verilog -output TOP_LEVEL_NAME.vh
write -hier -output TOP_LEVEL_NAME.db
report_timing > timing.rep
report_cell
> cell.rep
report_power > power.rep
quit
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 50
de Synopsys
Apéndice C. Instrucciones de la CPUCR
Las terminaciones inm e ind de algunas de estas instrucciones indican que son de modo
inmediato e indirecto respectivamente
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 51
de Synopsys
Apéndice D. Diagramas de temporización del modelo estructural
obtenido de la CPUCR
Programa 01
Programa 02
Programa 03
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 52
de Synopsys
Programa 04
Programa 05
Programa 06
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 53
de Synopsys
Programa 07
Programa 08
Programa 09
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 54
de Synopsys
Programa 10
Programa 11
Programa 12
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 55
de Synopsys
Programa 13
Programa 14
Programa 15
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 56
de Synopsys
Programa 16
Programa 17
Programa 18
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 57
de Synopsys
Programa 19
Programa 20
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 58
de Synopsys
Programa 21
Programa 22
Programa 23
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 59
de Synopsys
Programa 24
Programa 25
Programa 26
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 60
de Synopsys
Programa 27
Programa 28
Programa 29
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 61
de Synopsys
Programa 30
Programa 31
Programa 32
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 62
de Synopsys
Apéndice E. Bitácora de la sesión del Design Analyzer
Design Analyzer (TM)
DC Professional (TM)
DC Expert (TM)
DC Ultra (TM)
VHDL Compiler (TM)
HDL Compiler (TM)
Library Compiler (TM)
Power Compiler (TM)
DFT Compiler (TM)
BSD Compiler
DesignWare Developer (TM)
Version V-2004.06-SP1 for linux -- Jul 15, 2004
Copyright (c) 1988-2004 by Synopsys, Inc.
ALL RIGHTS RESERVED
design_analyzer> hdlin_check_user_parallel_case = "FALSE"
"FALSE"
design_analyzer> include /home/alejandro/comp_ALEJANDRO.scr
link_library=target_library={iit06_stdcells_pads.db}
{"iit06_stdcells_pads.db"}
define_design_lib work -path .
1
read -f verilog cpucr_ALEJANDRO.v
Loading verilog file '/home/alejandro/cpucr_ALEJANDRO.v'
Detecting input file type automatically (-rtl or -netlist).
Reading with Presto HDL Compiler (equivalent to -rtl option).
Running PRESTO HDLC
Loading db file '/opt/synopsys/V-2004.06-SP1/libraries/syn/gtech.db'
Loading db file '/opt/synopsys/V-2004.06SP1/libraries/syn/standard.sldb'
Loading db file '/home/alejandro/iit06_stdcells_pads.db'
Compiling source file /home/alejandro/cpucr_ALEJANDRO.v
Statistics for case statements in always block at line 81 in file
'/home/alejandro/cpucr_ALEJANDRO.v'
===============================================
|
Line
| full/ parallel |
===============================================
|
82
|
auto/user
|
|
92
|
auto/user
|
|
102
|
auto/user
|
|
110
|
auto/user
|
|
121
|
auto/user
|
===============================================
Statistics for case statements in always block at line 158 in file
'/home/alejandro/cpucr_ALEJANDRO.v'
===============================================
|
Line
| full/ parallel |
===============================================
|
159
|
auto/user
|
===============================================
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 63
de Synopsys
Statistics for case statements in always block at line 486 in file
'/home/alejandro/cpucr_ALEJANDRO.v'
===============================================
|
Line
| full/ parallel |
===============================================
|
487
|
no/auto
|
|
558
|
auto/user
|
|
610
|
auto/user
|
|
623
|
auto/user
|
===============================================
Inferred memory devices in process
in routine CPUCRale line 486 in file
'/home/alejandro/cpucr_ALEJANDRO.v'.
=======================================================================
========
|
Register Name
|
Type
| Width | Bus | MB | AR | AS | SR |
SS | ST |
=======================================================================
========
|
Temp_reg
| Flip-flop |
1
| N | N | N | N | N | N
| N |
|
PC_reg
| Flip-flop | 15
| Y | N | N | N | N | N
| N |
|
PC_reg
| Flip-flop |
1
| N | N | N | N | N | N
| N |
|
P_reg
| Flip-flop |
8
| Y | N | N | N | N | N
| N |
|
LE_PA_reg
| Flip-flop |
1
| N | N | N | N | N | N
| N |
|
RI_reg
| Flip-flop |
8
| Y | N | N | N | N | N
| N |
|
LE_reg
| Flip-flop |
1
| N | N | N | N | N | N
| N |
| RDR_tri_enable_reg | Flip-flop | 16
| Y | N | N | N | N | N
| N |
|
RDR_reg
| Flip-flop | 16
| Y | N | N | N | N | N
| N |
|
Temp1_reg
| Flip-flop |
1
| N | N | N | N | N | N
| N |
|
A_reg
| Flip-flop |
8
| Y | N | N | N | N | N
| N |
|
TB_reg
| Flip-flop |
8
| Y | N | N | N | N | N
| N |
|
S_reg
| Flip-flop |
3
| Y | N | N | N | N | N
| N |
|
S_reg
| Flip-flop |
2
| Y | N | N | N | N | N
| N |
|
S_reg
| Flip-flop |
3
| N | N | N | N | N | N
| N |
|
BUSPC_reg
| Flip-flop | 16
| Y | N | N | N | N | N
| N |
|
LE_S_reg
| Flip-flop |
1
| N | N | N | N | N | N
| N |
|
LE_PB_reg
| Flip-flop |
1
| N | N | N | N | N | N
| N |
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 64
de Synopsys
|
LE_A_reg
| Flip-flop |
1
| N | N | N | N | N | N
| N |
| LE_tri_enable_reg | Flip-flop |
1
| N | N | N | N | N | N
| N |
=======================================================================
========
Inferred memory devices in process
in routine CPUCRale line 785 in file
'/home/alejandro/cpucr_ALEJANDRO.v'.
=======================================================================
========
|
Register Name
|
Type
| Width | Bus | MB | AR | AS | SR |
SS | ST |
=======================================================================
========
|
EstPresente_reg
| Flip-flop |
5
| Y | N | N | N | N | N
| N |
=======================================================================
========
Inferred tri-state devices in process
in routine CPUCRale line 18 in file
'/home/alejandro/cpucr_ALEJANDRO.v'.
=================================================
| Register Name |
Type
| Width | MB |
=================================================
| BUSDAT_tri
| Tri-State Buffer |
8
| N |
=================================================
Inferred tri-state devices in process
in routine CPUCRale line 20 in file
'/home/alejandro/cpucr_ALEJANDRO.v'.
=================================================
| Register Name |
Type
| Width | MB |
=================================================
| BUSDAT_tri3 | Tri-State Buffer |
8
| N |
=================================================
Inferred tri-state devices in process
in routine CPUCRale line 19 in file
'/home/alejandro/cpucr_ALEJANDRO.v'.
=================================================
| Register Name |
Type
| Width | MB |
=================================================
| BUSDAT_tri2 | Tri-State Buffer |
8
| N |
=================================================
Inferred tri-state devices in process
in routine CPUCRale line 21 in file
'/home/alejandro/cpucr_ALEJANDRO.v'.
=================================================
| Register Name |
Type
| Width | MB |
=================================================
| BUSDAT_tri4 | Tri-State Buffer |
8
| N |
=================================================
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 65
de Synopsys
Inferred tri-state devices in process
in routine CPUCRale line 158 in file
'/home/alejandro/cpucr_ALEJANDRO.v'.
=================================================
| Register Name |
Type
| Width | MB |
=================================================
|
CM_tri
| Tri-State Buffer |
1
| N |
|
M_tri
| Tri-State Buffer |
1
| N |
=================================================
Inferred tri-state devices in process
in routine CPUCRale line 486 in file
'/home/alejandro/cpucr_ALEJANDRO.v'.
=================================================
| Register Name |
Type
| Width | MB |
=================================================
|
RDR_tri
| Tri-State Buffer | 16
| N |
|
LE_tri
| Tri-State Buffer |
1
| N |
=================================================
Presto compilation completed successfully.
Current design is now '/home/alejandro/CPUCRale.db:CPUCRale'
{"CPUCRale"}
set_flatten true -effort high
1
verilogout_show_unconnected_pins = "true";
"true"
max_area 0.0
1
current_design CPUCRale
Current design is 'CPUCRale'.
{"CPUCRale"}
set_max_fanout 8.0 CPUCRale
Performing set_max_fanout on design 'CPUCRale'.
1
create_clock CLK -name RELOJ -period 6
Performing create_clock on port 'CLK'.
1
set_dont_touch_network RELOJ
Performing set_dont_touch_network on clock 'RELOJ'.
1
compile -ungroup_all -incremental_mapping -map_effort high
Information: Evaluating DesignWare library utilization. (UISN-27)
=======================================================================
=====
| DesignWare Building Block Library
|
Version
|
Available |
=======================================================================
=====
| Basic DW Building Blocks
| V-2004.06-DWF_0406 |
*
|
| Licensed DW Building Blocks
|
|
|
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 66
de Synopsys
=======================================================================
=====
Loading target library 'iit06_stdcells_pads'
Beginning Pass 1 Mapping
-----------------------Processing 'CPUCRale'
(Incremental)
Updating timing information
Information: Timing loop detected. (OPT-150)
I_211/A I_211/Y U1005/A U1005/Y U1001/B U1001/Y
Warning: Disabling timing arc between pins 'A' and 'Y' on cell 'I_211'
to break a timing loop (OPT-314)
Beginning Implementation Selection
---------------------------------Processing 'DW01_dec_8_0'
Processing 'DW01_inc_16_0'
Processing 'DW01_add_9_0'
Processing 'DW01_sub_9_0'
Processing 'DW01_inc_8_0'
Processing 'DW01_add_16_0'
Processing 'DW01_add_16_1'
Processing 'DW01_dec_9_0'
Processing 'DW01_inc_9_0'
Beginning Mapping Optimizations (High effort) (Incremental)
------------------------------Flattening 'CPUCRale' (High effort) (Single Output Minimization)
Structuring 'CPUCRale'
Mapping 'CPUCRale'
Beginning Incremental Implementation Selection
---------------------------------------------ELAPSED
WORST NEG TOTAL NEG DESIGN
TIME
AREA
SLACK
SLACK
RULE COST
ENDPOINT
--------- --------- --------- --------- --------- -----------------------0:00:38 613638.0
4.08
14.4
272.7
0:00:41 616563.0
3.76
11.9
108.3
0:00:42 618282.0
3.76
11.8
59.0
Beginning Delay Optimization Phase
---------------------------------ELAPSED
WORST NEG TOTAL NEG DESIGN
TIME
AREA
SLACK
SLACK
RULE COST
ENDPOINT
--------- --------- --------- --------- --------- -----------------------0:00:42 618282.0
3.76
11.8
59.0
0:00:44 622962.0
0.51
3.2
76.0 PC_reg[15]/D
0:00:44 626994.0
0.00
0.0
76.0
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 67
de Synopsys
Beginning Design Rule Fixing
----------------------------
(max_fanout)
ELAPSED
WORST NEG TOTAL NEG DESIGN
TIME
AREA
SLACK
SLACK
RULE COST
ENDPOINT
--------- --------- --------- --------- --------- -----------------------0:00:44 626994.0
0.00
0.0
76.0
0:00:45 628974.0
0.00
0.0
0.0
Beginning Area-Recovery Phase
-----------------------------
(max_area 0)
ELAPSED
WORST NEG TOTAL NEG DESIGN
TIME
AREA
SLACK
SLACK
RULE COST
ENDPOINT
--------- --------- --------- --------- --------- -----------------------0:00:45 628974.0
0.00
0.0
0.0
0:00:45 628974.0
0.00
0.0
0.0
0:00:47 572922.0
0.00
0.0
0.0
0:00:48 569898.0
0.00
0.0
0.0
0:00:49 569898.0
0.00
0.0
0.0
0:00:55 556119.0
0.00
0.0
0.0
0:00:56 554004.0
0.00
0.0
0.0
Optimization Complete
--------------------Transferring design 'CPUCRale' to database 'CPUCRale.db'
Current design is 'CPUCRale'.
1
check_design
1
write -f verilog -output CPUCR_ale.v
Warning: Verilog 'assign' or 'tran' statements are written out. (VO-4)
1
write -hier -output CPUCR_ale.db
Writing to file /home/alejandro/CPUCR_ale.db
1
report_timing > ale_TEMP.rep
1
report_area > ale_AREA.rep
1
1
design_analyzer> create_schematic -size infinite
-gen_database
Loading db file '/opt/synopsys/V-2004.06-SP1/libraries/syn/generic.sdb'
Warning: Couldn't read symbol library 'your_library.sdb'. (UIS-33)
Loading db file '/opt/synopsys/V-2004.06-SP1/libraries/syn/1_25.font'
Warning: Couldn't read symbol library 'your_library.sdb'. (UIS-33)
1
design_analyzer>
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 68
de Synopsys
Apéndice F. Modelo conductual original
cpucr_rarr.v
module
CPUCR(CLK,RPS,LE,M,CB,CM,WAIT,HALT,INT,INTOK,SDMA,BD,BUSDIR,BUSDAT);
input CLK,INT,SDMA,RPS,WAIT;
output BD,CB,CM,LE,HALT,INTOK,M;
output [15:0] BUSDIR;
inout [7:0] BUSDAT;
//*********************************************************************
**********
reg BD,CB,CM,LE,HALT,INTOK,M;//Registros para las señales de salida
//*********************************************************************
**********
reg [15:0] RDR;//Bus de direcciones
assign BUSDIR = RDR;
//*********************************************************************
**********
reg [15:0] BUSPC;//Bus auxiliar
//*********************************************************************
**********
reg [7:0] A,S;//Acumulador y Registro de status S = {B,D,N,E,V,I,Z,C}
//*********************************************************************
**********
reg LE_A,LE_S,LE_PB,LE_PA;//Bus bidireccional de datos
assign BUSDAT = LE_A ? 8'hzz:A;
assign BUSDAT = LE_S ? 8'hzz:S;
assign BUSDAT = LE_PB ? 8'hzz:BUSPC[7:0];
assign BUSDAT = LE_PA ? 8'hzz:BUSPC[15:8];
//*********************************************************************
**********
reg [7:0] P,TB;//Registros para el cálculo de la siguiente dirección
reg [15:0] PC;
//*********************************************************************
**********
reg [7:0] RI;//Registro para la decodificación de instrucciones
//*********************************************************************
**********
reg Temp,Temp1;//Registros temporales para actualización de banderas
//*********************************************************************
**********
wire [15:0] DIR;//Dirección de salto
//assign DIR = BUSDAT[7] ? BUSPC - {8'h00,~BUSDAT} - 16'b1 : BUSPC +
{8'h00,BUSDAT};
assign DIR = BUSDAT[7] ? BUSPC + {8'hFF,BUSDAT} : BUSPC +
{8'h00,BUSDAT};
//*********************************************************************
**********
`include "Dec_Inst.v"
//*********************************************************************
**********
wire ActualizarNZ;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 69
de Synopsys
assign ActualizarNZ = ((RI == ADD) || (RI == ADDinm) || (RI == ADDind)
|| (RI == AND) || (RI == ANDinm) || (RI == ANDind) || (RI == CLA) ||
(RI == CPA) || (RI == DCA) || (RI == INA) || (RI == INP) || (RI == LDA)
|| (RI == LDAinm) || (RI == LDAind) || (RI == PLA) || (RI == ORA) ||
(RI == ORAinm) || (RI == ORAind) || (RI == ROL) || (RI == ROR) || (RI
== SUB) || (RI == SUBinm) || (RI == SUBind) || (RI == TPA));
//*********************************************************************
**********
reg [4:0] EstPresente, ProxEst;//Registros de estado de la máquina de
estado
//*********************************************************************
**********
parameter Estado_0 = 5'b00000, //Definición de los estados de la unidad
de control
Estado_1 = 5'b00001,
Estado_2 = 5'b00010,
Estado_3 = 5'b00011,
Estado_4 = 5'b00100,
Estado_5 = 5'b00101,
Estado_6 = 5'b00110,
Estado_7 = 5'b00111,
Estado_8 = 5'b01000,
Estado_9 = 5'b01001,
Estado_10 = 5'b01010,
Estado_11 = 5'b01011,
Estado_12 = 5'b01100,
Estado_13 = 5'b01101,
Estado_14 = 5'b01110,
Estado_15 = 5'b01111,
Estado_16 = 5'b10000,
Estado_17 = 5'b10001,
Estado_18 = 5'b10010,
Estado_19 = 5'b10011,
Estado_20 = 5'b10100,
Estado_21 = 5'b10101,
Estado_22 = 5'b10110,
Estado_23 = 5'b10111,
Estado_24 = 5'b11000,
Estado_25 = 5'b11001,
Estado_26 = 5'b11010,
Estado_27 = 5'b11011,
Estado_28 = 5'b11100,
Estado_29 = 5'b11101,
Estado_30 = 5'b11110,
Estado_31 = 5'b11111;
//*********************************************************************
**********
always @(EstPresente or INT or SDMA or WAIT or RI or S[2])
case (EstPresente) //synopsys parallel_case
Estado_0:ProxEst <= Estado_1;//Estado inicial y de Reset
//*********************************************************************
**********
Estado_1://Busqueda de nueva instrucción
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 70
de Synopsys
if (!(INT|S[2]))
ProxEst <= Estado_23;
else if (!SDMA)
ProxEst <= Estado_22;
else ProxEst <= Estado_2;
Estado_2://Ejecución de instrucciones de una palabra
case (RI) //synopsys parallel_case
CLA,CLC,CLI,CPA,DCA,INA,NOP,ROL,ROR,SEC,SEI,TAP,TPA: ProxEst <=
WAIT ? Estado_2:Estado_1;
HLT: ProxEst <= WAIT ? Estado_2:Estado_21;
RTI,RTS: ProxEst <= WAIT ? Estado_2:Estado_17;
AND,ADD,LDA,ORA,SUB,ANDinm,ADDinm,LDAinm,ORAinm,SUBinm,BCC,BCS,BEQ,BMI,
BNE,BPL,BVC,BVS,PHA,PHS,PLA,PLS,INP,OUT,JMP,JSR,ADDind,ANDind,LDAind,JM
Pind,JSRind,ORAind,SUBind,STAind,JMPind,JSRind: ProxEst <= WAIT ?
Estado_2:Estado_3;
default: ProxEst <= WAIT ? Estado_2:Estado_31; //Este será el
estado de instrucción no reconocida
endcase
//*********************************************************************
**********
Estado_3: ProxEst <= Estado_4;//Búsqueda de segundo operando
Estado_4://Ejecución de instrucciones de dos palabras
case (RI) //synopsys parallel_case
ANDinm,ADDinm,LDAinm,ORAinm,SUBinm,BCC,BCS,BEQ,BMI,BNE,BPL,BVC,BVS,PHA,
PHS,PLA,PLS: ProxEst <= WAIT ? Estado_4:Estado_1;
INP,OUT: ProxEst <= WAIT ? Estado_4:Estado_11;
default: ProxEst <= WAIT ? Estado_4:Estado_5;
endcase
//*********************************************************************
**********
Estado_5: ProxEst <= Estado_6;//Búsqueda de tercer operando
Estado_6:
case (RI) //synopsys parallel_case
JMP: ProxEst <= WAIT ? Estado_6:Estado_1;
JSR: ProxEst <= WAIT ? Estado_6:Estado_13;
ADDind,ANDind,LDAind,JMPind,JSRind,ORAind,SUBind,STAind: ProxEst
<= WAIT ? Estado_6:Estado_7;
default: ProxEst <= WAIT ? Estado_6:Estado_11;
endcase
//*********************************************************************
**********
Estado_7: ProxEst <= Estado_8;//Direccionamiento indirecto
Estado_8: ProxEst <= WAIT ? Estado_8:Estado_9;
Estado_9: ProxEst <= Estado_10;
Estado_10:
case (RI) //synopsys parallel_case
JMPind: ProxEst <= WAIT ? Estado_10:Estado_1;
JSRind: ProxEst <= WAIT ? Estado_10:Estado_13;
default: ProxEst <= WAIT ? Estado_10:Estado_11;
endcase
//*********************************************************************
**********
Estado_11: ProxEst <= Estado_12;//Ejecución de instrucciones de tres
palabras
Estado_12: ProxEst <= WAIT ? Estado_12:Estado_1;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 71
de Synopsys
//*********************************************************************
**********
Estado_13: ProxEst <= Estado_14;//Secuencia de apilamiento para la
instrucción JSR
Estado_14: ProxEst <= WAIT ? Estado_14:Estado_15;
Estado_15: ProxEst <= Estado_16;
Estado_16: ProxEst <= WAIT ? Estado_16:Estado_1;
//*********************************************************************
**********
Estado_17: ProxEst <= Estado_18;//Secuencia de desapilamiento para
instrucciones RTS y RTI
Estado_18: ProxEst <= WAIT ? Estado_18:Estado_19;
Estado_19: ProxEst <= Estado_20;
Estado_20: ProxEst <= WAIT ? Estado_20:Estado_1;
//*********************************************************************
**********
Estado_21: ProxEst <= Estado_21;//Estado para la instrucción HLT
//*********************************************************************
**********
Estado_22: ProxEst <= SDMA ? Estado_1:Estado_22;//DMA
//*********************************************************************
**********
Estado_23: ProxEst <= Estado_24;//Atención a interrupciones
Estado_24: ProxEst <= WAIT ? Estado_24:Estado_25;
Estado_25: ProxEst <= Estado_26;
Estado_26: ProxEst <= WAIT ? Estado_26:Estado_27;
Estado_27: ProxEst <= Estado_28;
Estado_28: ProxEst <= WAIT ? Estado_28:Estado_29;
Estado_29: ProxEst <= Estado_30;
Estado_30: ProxEst <= WAIT ? Estado_30:Estado_1;
//*********************************************************************
**********
Estado_31: ProxEst <= Estado_31; //Que se quede aquí si hay una
instrucción inválida
endcase
//*********************************************************************
**********
always @(EstPresente or INT or SDMA or WAIT or RI or S[2])
case (EstPresente) //synopsys parallel_case
//*********************************************************************
**********
Estado_0://Estado inicial y de Reset
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_1://Busqueda de nueva instrucción
begin
M <= 1'b1;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 72
de Synopsys
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
CB <= (INT|S[2])&SDMA;
CM <= (INT|S[2])&SDMA;
end
Estado_2://Ejecución de instrucciones de una palabra
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_3://Búsqueda de segundo operando
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_4://Ejecución de instrucciones de dos palabras
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_5://Búsqueda de tercer operando
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_6:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 73
de Synopsys
end
//*********************************************************************
**********
Estado_7://Direccionamiento indirecto
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte baja
end
Estado_8:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_9:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte alta
end
Estado_10:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_11://Ejecución de instrucciones de tres palabras
begin
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
M <= (RI == INP || RI == OUT) ? 1'b0:1'b1;
end
Estado_12:
begin
CB <= 1'b0;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 74
de Synopsys
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
M <= (RI == INP || RI == OUT) ? 1'b0:1'b1;
end
//*********************************************************************
**********
Estado_13://Secuencia de apilamiento para la instrucción JSR
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte alta de próxima dirección
end
Estado_14:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_15:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte baja de próxima dirección
end
Estado_16:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_17://Secuencia de desapilamiento para instrucciones RTS y RTI
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte baja
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 75
de Synopsys
end
Estado_18:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_19:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte alta
end
Estado_20:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_21://Estado para la instrucción HLT
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b1;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_22://DMA
begin
M <= 1'bz;
BD <= 1'b1;
CB <= 1'b0;
CM <= 1'bz;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_23://Atención a interrupciones
begin
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 76
de Synopsys
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Apilamiento de parte alta de PC
end
Estado_24:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_25:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Apilamiento de parte baja de PC
end
Estado_26:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_27:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b1;//Busca de la dirección de la subrutina de
interrupciones, parte baja
end
Estado_28:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b1;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 77
de Synopsys
end
Estado_29:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b1;//Busca de la dirección de la subrutina de
interrupciones, parte alta
end
Estado_30:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b1;
end
//*********************************************************************
**********
Estado_31:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= ~HALT; //1'b0;
INTOK <= 1'b0;
end
endcase
//*********************************************************************
**********
//Transferencias de los registros
always @(negedge CLK)
case (EstPresente)// synthesis full_case
Estado_0:
begin
LE <= 1'b1;
LE_A <= 1'b1;
LE_S <= 1'b1;
S[2] <= 1'b1;
LE_PA <= 1'b1;
LE_PB <= 1'b1;
PC <= 16'h0000;
RDR <= 16'h0000;
end
Estado_1:
begin
RI <= BUSDAT;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 78
de Synopsys
Temp <= A[7];
TB <= P - 8'b1;
BUSPC <= (INT|S[2]) ? PC + 16'b1:PC;
if (ActualizarNZ)
begin
S[5] <= A[7];
S[1] <= ~|A;
end
if ((RI == ADD) || (RI == ADDinm) || (RI == ADDind))
S[3] <= Temp^Temp1 ? 1'b0:Temp^A[7];
if (RI == DCA)
S[3] <= Temp ? ~A[7]:1'b0;
if (RI == INA)
S[3] <= Temp ? 1'b0:A[7];
if ((RI == SUB) || (RI == SUBinm) || (RI == SUBind))
S[3] <= Temp^Temp1 ? Temp^A[7]:1'b0;
if (!(INT|S[2]))
RDR <= {8'hFF,P};
else if (!SDMA)
RDR <= 16'hzzzz;
if (INT|S[2])
if (!SDMA)
LE <= 1'bz;
end
Estado_2:
begin
PC <= BUSPC;
if (RI == CLI)
S[2] <= 1'b0;
if (RI == SEI)
S[2] <= 1'b1;
if (RI == CLA)
A <= 8'b0;
if (RI == CLC)
S[0] <= 1'b0;
if (RI == SEC)
S[0] <= 1'b1;
if ((RI == TAP) && !WAIT)
P <= A;
if ((RI == CPA) && !WAIT)
A <= ~A;
if ((RI == DCA) && !WAIT)
{S[0],A} <= A - 8'b1;
if ((RI == INA) && !WAIT)
{S[0],A} <= A + 8'b1;
if ((RI == ROL) && !WAIT)
{S[0],A} <= {A,S[0]};
if ((RI == ROR) && !WAIT)
{A,S[0]} <= {S[0],A};
if ((RI == TPA) && !WAIT)
A <= P;
if (((RI == PLA) || (RI == PLS) || (RI == RTI) || (RI == RTS)) &&
!WAIT)
P <= P - 8'b1;
case (RI)//synopsys parallel_case
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 79
de Synopsys
PHA,PHS: RDR <= {8'hFF,P};
PLA,PLS,RTI,RTS: RDR <= {8'hFF,TB};
default: RDR <= BUSPC;
endcase
end
Estado_3:
begin
BUSPC <= PC + 16'b1;
if (RI == PHA)
begin
LE <= 1'b0;
LE_A <= 1'b0;
end
if (RI == PHS)
begin
LE <= 1'b0;
LE_S <= 1'b0;
end
end
Estado_4:
begin
TB <= BUSDAT;
Temp1 <= BUSDAT[7];
if (RI == PHA)
begin
LE <= 1'b1;
LE_A <= 1'b1;
end
if (RI == PHS)
begin
LE <= 1'b1;
LE_S <= 1'b1;
end
if ((RI == PLA) && !WAIT)
A <= BUSDAT;
if ((RI == PLS) && !WAIT)
S <= BUSDAT;
if ((RI == ADDinm) && !WAIT)
{S[0],A} <= A + BUSDAT;
if ((RI == ANDinm) && !WAIT)
A <= A & BUSDAT;
if ((RI == LDAinm) && !WAIT)
A <= BUSDAT;
if ((RI == ORAinm) && !WAIT)
A <= A | BUSDAT;
if ((RI == SUBinm) && !WAIT)
{S[0],A} <= A - BUSDAT;
if (((RI == PHA) || (RI == PHS)) && !WAIT)
P <= P + 8'b1;
case (RI)//synopsys parallel_case
BCC: RDR <= S[0] ? BUSPC:DIR;
BCS: RDR <= S[0] ? DIR:BUSPC;
BEQ: RDR <= S[1] ? DIR:BUSPC;
BMI: RDR <= S[5] ? DIR:BUSPC;
BNE: RDR <= S[1] ? BUSPC:DIR;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 80
de Synopsys
BPL: RDR <= S[5] ? BUSPC:DIR;
BVC: RDR <= S[3] ? BUSPC:DIR;
BVS: RDR <= S[3] ? DIR:BUSPC;
INP,OUT: RDR <= {8'h00,BUSDAT};
PHA,PHS,PLA,PLS: RDR <= PC;
default: RDR <= BUSPC;
endcase
case (RI)//synopsys parallel_case
BCC: PC <= S[0] ? BUSPC:DIR;
BCS: PC <= S[0] ? DIR:BUSPC;
BEQ: PC <= S[1] ? DIR:BUSPC;
BMI: PC <= S[5] ? DIR:BUSPC;
BNE: PC <= S[1] ? BUSPC:DIR;
BPL: PC <= S[5] ? BUSPC:DIR;
BVC: PC <= S[3] ? BUSPC:DIR;
BVS: PC <= S[3] ? DIR:BUSPC;
INP,OUT,PHA,PHS,PLA,PLS: PC <= PC;
default: PC <= BUSPC;
endcase
end
Estado_5: BUSPC <= PC + 16'b1;
Estado_6:
begin
PC <= {BUSDAT,TB};
if (RI == JSR)
RDR <= {8'hFF,P};
else RDR <= {BUSDAT,TB};
end
Estado_8:
begin
TB <= BUSDAT;
RDR <= PC + 16'b1;
end
Estado_10:
begin
PC <= {BUSDAT,TB};
if (RI == JSRind)
RDR <= {8'hFF,P};
else RDR <= {BUSDAT,TB};
end
Estado_11:
if (RI == STA || RI == STAind || RI == OUT)
begin
LE <= 1'b0;
LE_A <= 1'b0;
end
Estado_12:
begin
PC <= BUSPC;
RDR <= BUSPC;
Temp1 <= BUSDAT[7];
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 81
de Synopsys
if (((RI == ADD) || (RI == ADDind)) && !WAIT)
{S[0],A} <= A + BUSDAT;
if (((RI == AND) || (RI == ANDind)) && !WAIT)
A <= A & BUSDAT;
if (((RI == ORA) || (RI == ORAind)) && !WAIT)
A <= A | BUSDAT;
if (((RI == SUB) || (RI == SUBind)) && !WAIT)
{S[0],A} <= A - BUSDAT;
if (RI == STA || RI == STAind || RI == OUT)
begin
LE <= 1'b1;
LE_A <= 1'b1;
end
if (((RI == LDA) || (RI == LDAind) || (RI == INP)) && !WAIT)
A <= BUSDAT;
end
Estado_13:
begin
LE <= 1'b0;
LE_PA <= 1'b0;
P <= P + 8'b1;
end
Estado_14:
begin
LE <= 1'b1;
LE_PA <= 1'b1;
RDR <= {8'hFF,P};
end
Estado_15:
begin
LE <= 1'b0;
LE_PB <= 1'b0;
P <= P + 8'b1;
end
Estado_16:
begin
RDR <= PC;
LE <= 1'b1;
LE_PB <= 1'b1;
end
Estado_17: P <= P - 8'b1;
Estado_18:
begin
TB <= BUSDAT;
RDR <= {8'hFF,P};
end
Estado_20:
begin
PC <= {BUSDAT,TB};
RDR <= {BUSDAT,TB};
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 82
de Synopsys
end
Estado_22:
if (SDMA)
begin
RDR <= PC;
LE <= 1'b1;
end
Estado_23:
begin
LE <= 1'b0;
S[2] <= 1'b1;
P <= P + 8'b1;
LE_PA <= 1'b0;
end
Estado_24:
begin
LE <= 1'b1;
LE_PA <= 1'b1;
RDR <= {8'hFF,P};
end
Estado_25:
begin
LE <= 1'b0;
LE_PB <= 1'b0;
P <= P + 8'b1;
end
Estado_26:
begin
LE <= 1'b1;
LE_PB <= 1'b1;
RDR <= 16'hFF00;
end
Estado_28:
begin
TB <= BUSDAT;
RDR <= 16'hFF01;
end
Estado_30:
begin
PC <= {BUSDAT,TB};
RDR <= {BUSDAT,TB};
end
endcase
//*********************************************************************
**********
always @(negedge CLK or negedge RPS)
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 83
de Synopsys
begin
if (!RPS)
EstPresente <= Estado_0;
else
EstPresente <= ProxEst;
end
endmodule
Dec_Inst.v
////////////Códigos de las Instrucciones en 8 bits////////////
//Instrucciones con direccionamiento INMEDIATO
parameter LDAinm = 8'b00000000,
ADDinm = 8'b00100000,
SUBinm = 8'b00110000,
ANDinm = 8'b01000000,
ORAinm = 8'b01010000,
//Instrucciones con direccionamiento ABSOLUTO
LDA = 8'b00000001,
STA = 8'b00010001,
ADD = 8'b00100001,
SUB = 8'b00110001,
AND = 8'b01000001,
ORA = 8'b01010001,
JMP = 8'b01100001,
JSR = 8'b01110001,
//Instrucciones con direccionamiento RELATIVO
BEQ = 8'b00000010,
BNE = 8'b00010010,
BCS = 8'b00100010,
BCC = 8'b00110010,
BMI = 8'b01000010,
BPL = 8'b01010010,
BVS = 8'b01100010,
BVC = 8'b01110010,
//Instrucciones con direccionamiento INDIRECTO
LDAind = 8'b00000011,
STAind = 8'b00010011,
ADDind = 8'b00100011,
SUBind = 8'b00110011,
ANDind = 8'b01000011,
ORAind = 8'b01010011,
JSRind = 8'b01110011,
JMPind = 8'b01100011,
//Instrucciones con direccionamiento IMPLICITO
SEC = 8'b00100100,
CLC = 8'b00110100,
SEI = 8'b01000100,
CLI = 8'b01010100,
//Instrucciones con direccionamiento ACUMULADOR
CLA = 8'b00000101,
CPA = 8'b00010101,
INA = 8'b00100101,
DCA = 8'b00110101,
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 84
de Synopsys
ROL = 8'b01000101,
ROR = 8'b01010101,
PLA = 8'b01100101,
PHA = 8'b01110101,
//Instrucciones con direccionamiento CONTROL
TPA = 8'b00000110,
TAP = 8'b00010110,
RTI = 8'b00100110,
RTS = 8'b00110110,
HLT = 8'b01000110,
NOP = 8'b01010110,
PLS = 8'b01100110,
PHS = 8'b01110110,
//Instrucciones para ENTRADA/SALIDA
INP = 8'b00000111,
OUT = 8'b00010111;
Apéndice G. Modelo conductual modificado
module
CPUCRalec(CLK,RPS,LE,M,CB,CM,WAIT,HALT,INT,INTOK,SDMA,BD,BUSDIR,BUSDAT)
;
input CLK,INT,SDMA,RPS,WAIT;
output BD,CB,CM,LE,HALT,INTOK,M;
output [15:0] BUSDIR;
inout [7:0] BUSDAT;
//*********************************************************************
**********
reg BD,CB,CM,LE,HALT,INTOK,M;//Registros para las señales de salida
//*********************************************************************
**********
reg [15:0] RDR;//Bus de direcciones
assign BUSDIR = RDR;
//*********************************************************************
**********
reg [15:0] BUSPC;//Bus auxiliar
//*********************************************************************
**********
reg [7:0] A,S;//Acumulador y Registro de status S = {B,D,N,E,V,I,Z,C}
//*********************************************************************
**********
reg LE_A,LE_S,LE_PB,LE_PA;//Bus bidireccional de datos
assign BUSDAT = LE_A ? 8'hzz:A;
assign BUSDAT = LE_S ? 8'hzz:S;
assign BUSDAT = LE_PB ? 8'hzz:BUSPC[7:0];
assign BUSDAT = LE_PA ? 8'hzz:BUSPC[15:8];
//*********************************************************************
**********
reg [7:0] P,TB;//Registros para el cálculo de la siguiente dirección
reg [15:0] PC;
//*********************************************************************
**********
reg [7:0] RI;//Registro para la decodificación de instrucciones
//*********************************************************************
**********
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 85
de Synopsys
reg Temp,Temp1;//Registros temporales para actualización de banderas
//*********************************************************************
**********
wire [15:0] DIR;//Dirección de salto
//assign DIR = BUSDAT[7] ? BUSPC - {8'h00,~BUSDAT} - 16'b1 : BUSPC +
{8'h00,BUSDAT};
assign DIR = BUSDAT[7] ? BUSPC + {8'hFF,BUSDAT} : BUSPC +
{8'h00,BUSDAT};
//*********************************************************************
**********
`include "Dec_Inst2.v"
//*********************************************************************
**********
wire ActualizarNZ;
assign ActualizarNZ = ((RI == ADD) || (RI == ADDinm) || (RI == ADDind)
|| (RI == AND) || (RI == ANDinm) || (RI == ANDind) || (RI == CLA) ||
(RI == CPA) || (RI == DCA) || (RI == INA) || (RI == INP) || (RI == LDA)
|| (RI == LDAinm) || (RI == LDAind) || (RI == PLA) || (RI == ORA) ||
(RI == ORAinm) || (RI == ORAind) || (RI == ROL) || (RI == ROR) || (RI
== SUB) || (RI == SUBinm) || (RI == SUBind) || (RI == TPA));
//*********************************************************************
**********
reg [4:0] EstPresente;
reg [4:0] ProxEst;//Registros de estado de la máquina de estado
//*********************************************************************
**********
parameter Estado_0 = 5'b00000, //Definición de los estados de la unidad
de control
Estado_1 = 5'b00001,
Estado_2 = 5'b00010,
Estado_3 = 5'b00011,
Estado_4 = 5'b00100,
Estado_5 = 5'b00101,
Estado_6 = 5'b00110,
Estado_7 = 5'b00111,
Estado_8 = 5'b01000,
Estado_9 = 5'b01001,
Estado_10 = 5'b01010,
Estado_11 = 5'b01011,
Estado_12 = 5'b01100,
Estado_13 = 5'b01101,
Estado_14 = 5'b01110,
Estado_15 = 5'b01111,
Estado_16 = 5'b10000,
Estado_17 = 5'b10001,
Estado_18 = 5'b10010,
Estado_19 = 5'b10011,
Estado_20 = 5'b10100,
Estado_21 = 5'b10101,
Estado_22 = 5'b10110,
Estado_23 = 5'b10111,
Estado_24 = 5'b11000,
Estado_25 = 5'b11001,
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 86
de Synopsys
Estado_26
Estado_27
Estado_28
Estado_29
Estado_30
Estado_31
=
=
=
=
=
=
5'b11010,
5'b11011,
5'b11100,
5'b11101,
5'b11110,
5'b11111;
//*********************************************************************
**********
always @(EstPresente or INT or SDMA or WAIT or RI or S[2])
case (EstPresente) //synopsys parallel_case
Estado_0:ProxEst <= Estado_1;//Estado inicial y de Reset
//*********************************************************************
**********
Estado_1://Busqueda de nueva instrucción
if (!(INT|S[2]))
ProxEst <= Estado_23;
else if (!SDMA)
ProxEst <= Estado_22;
else ProxEst <= Estado_2;
Estado_2://Ejecución de instrucciones de una palabra
case (RI) //synopsys parallel_case
CLA,CLC,CLI,CPA,DCA,INA,NOP,ROL,ROR,SEC,SEI,TAP,TPA: ProxEst <=
WAIT ? Estado_2:Estado_1;
HLT: ProxEst <= WAIT ? Estado_2:Estado_21;
RTI,RTS: ProxEst <= WAIT ? Estado_2:Estado_17;
AND,ADD,STA,LDA,ORA,SUB,ANDinm,ADDinm,LDAinm,ORAinm,SUBinm,BCC,BCS
,BEQ,BMI,BNE,BPL,BVC,BVS,PHA,PHS,PLA,PLS,INP,OUT,JMP,JSR,ADDind,ANDind,
LDAind,ORAind,SUBind,STAind,JMPind,JSRind: ProxEst <= WAIT ?
Estado_2:Estado_3;
default: ProxEst <= WAIT ? Estado_2:Estado_31; //Este será el
estado de instrucción no reconocida
endcase
//*********************************************************************
**********
Estado_3: ProxEst <= Estado_4;//Búsqueda de segundo operando
Estado_4://Ejecución de instrucciones de dos palabras
case (RI) //synopsys parallel_case
ANDinm,ADDinm,LDAinm,ORAinm,SUBinm,BCC,BCS,BEQ,BMI,BNE,BPL,BVC,BVS,PHA,
PHS,PLA,PLS: ProxEst <= WAIT ? Estado_4:Estado_1;
INP,OUT: ProxEst <= WAIT ? Estado_4:Estado_11;
default: ProxEst <= WAIT ? Estado_4:Estado_5;
endcase
//*********************************************************************
**********
Estado_5: ProxEst <= Estado_6;//Búsqueda de tercer operando
Estado_6:
case (RI) //synopsys parallel_case
JMP: ProxEst <= WAIT ? Estado_6:Estado_1;
JSR: ProxEst <= WAIT ? Estado_6:Estado_13;
ADDind,ANDind,LDAind,JMPind,JSRind,ORAind,SUBind,STAind: ProxEst
<= WAIT ? Estado_6:Estado_7;
default: ProxEst <= WAIT ? Estado_6:Estado_11;
endcase
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 87
de Synopsys
//*********************************************************************
**********
Estado_7: ProxEst <= Estado_8;//Direccionamiento indirecto
Estado_8: ProxEst <= WAIT ? Estado_8:Estado_9;
Estado_9: ProxEst <= Estado_10;
Estado_10:
case (RI) //synopsys parallel_case
JMPind: ProxEst <= WAIT ? Estado_10:Estado_1;
JSRind: ProxEst <= WAIT ? Estado_10:Estado_13;
default: ProxEst <= WAIT ? Estado_10:Estado_11;
endcase
//*********************************************************************
**********
Estado_11: ProxEst <= Estado_12;//Ejecución de instrucciones de tres
palabras
Estado_12: ProxEst <= WAIT ? Estado_12:Estado_1;
//*********************************************************************
**********
Estado_13: ProxEst <= Estado_14;//Secuencia de apilamiento para la
instrucción JSR
Estado_14: ProxEst <= WAIT ? Estado_14:Estado_15;
Estado_15: ProxEst <= Estado_16;
Estado_16: ProxEst <= WAIT ? Estado_16:Estado_1;
//*********************************************************************
**********
Estado_17: ProxEst <= Estado_18;//Secuencia de desapilamiento para
instrucciones RTS y RTI
Estado_18: ProxEst <= WAIT ? Estado_18:Estado_19;
Estado_19: ProxEst <= Estado_20;
Estado_20: ProxEst <= WAIT ? Estado_20:Estado_1;
//*********************************************************************
**********
Estado_21: ProxEst <= Estado_21;//Estado para la instrucción HLT
//*********************************************************************
**********
Estado_22: ProxEst <= SDMA ? Estado_1:Estado_22;//DMA
//*********************************************************************
**********
Estado_23: ProxEst <= Estado_24;//Atención a interrupciones
Estado_24: ProxEst <= WAIT ? Estado_24:Estado_25;
Estado_25: ProxEst <= Estado_26;
Estado_26: ProxEst <= WAIT ? Estado_26:Estado_27;
Estado_27: ProxEst <= Estado_28;
Estado_28: ProxEst <= WAIT ? Estado_28:Estado_29;
Estado_29: ProxEst <= Estado_30;
Estado_30: ProxEst <= WAIT ? Estado_30:Estado_1;
//*********************************************************************
**********
Estado_31: ProxEst <= Estado_31; //Que se quede aquí si hay una
instrucción inválida
endcase
//*********************************************************************
**********
always @(EstPresente or INT or SDMA or WAIT or RI or S[2] or HALT)
case (EstPresente) //synopsys parallel_case
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 88
de Synopsys
//*********************************************************************
**********
Estado_0://Estado inicial y de Reset
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_1://Busqueda de nueva instrucción
begin
M <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
CB <= (INT|S[2])&SDMA;
CM <= (INT|S[2])&SDMA;
end
Estado_2://Ejecución de instrucciones de una palabra
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_3://Búsqueda de segundo operando
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_4://Ejecución de instrucciones de dos palabras
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_5://Búsqueda de tercer operando
begin
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 89
de Synopsys
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_6:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_7://Direccionamiento indirecto
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte baja
end
Estado_8:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_9:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte alta
end
Estado_10:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 90
de Synopsys
end
//*********************************************************************
**********
Estado_11://Ejecución de instrucciones de tres palabras
begin
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
M <= (RI == INP || RI == OUT) ? 1'b0:1'b1;
end
Estado_12:
begin
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
M <= (RI == INP || RI == OUT) ? 1'b0:1'b1;
end
//*********************************************************************
**********
Estado_13://Secuencia de apilamiento para la instrucción JSR
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte alta de próxima dirección
end
Estado_14:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_15:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte baja de próxima dirección
end
Estado_16:
begin
M <= 1'b1;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 91
de Synopsys
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_17://Secuencia de desapilamiento para instrucciones RTS y RTI
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte baja
end
Estado_18:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_19:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Parte alta
end
Estado_20:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_21://Estado para la instrucción HLT
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b1;
INTOK <= 1'b0;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 92
de Synopsys
end
//*********************************************************************
**********
Estado_22://DMA
begin
M <= 1'bz;
BD <= 1'b1;
CB <= 1'b0;
CM <= 1'bz;
HALT <= 1'b0;
INTOK <= 1'b0;
end
//*********************************************************************
**********
Estado_23://Atención a interrupciones
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Apilamiento de parte alta de PC
end
Estado_24:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_25:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;//Apilamiento de parte baja de PC
end
Estado_26:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b0;
end
Estado_27:
begin
M <= 1'b1;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 93
de Synopsys
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b1;//Busca de la dirección de la subrutina de
interrupciones, parte baja
end
Estado_28:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b1;
end
Estado_29:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b1;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b1;//Busca de la dirección de la subrutina de
interrupciones, parte alta
end
Estado_30:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= 1'b0;
INTOK <= 1'b1;
end
//*********************************************************************
**********
Estado_31:
begin
M <= 1'b1;
CB <= 1'b0;
CM <= 1'b0;
BD <= 1'b0;
HALT <= ~HALT; //1'b0;
INTOK <= 1'b0;
end
endcase
//*********************************************************************
**********
//Transferencias de los registros
always @(negedge CLK)
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 94
de Synopsys
case (EstPresente)// synthesis full_case
Estado_0:
begin
LE <= 1'b1;
LE_A <= 1'b1;
LE_S <= 1'b1;
S[2] <= 1'b1;
LE_PA <= 1'b1;
LE_PB <= 1'b1;
PC <= 16'h0000;
RDR <= 16'h0000;
end
Estado_1:
begin
RI <= BUSDAT;
Temp <= A[7];
TB <= P - 8'b1;
BUSPC <= (INT|S[2]) ? PC + 16'b1:PC;
if (ActualizarNZ)
begin
S[5] <= A[7];
S[1] <= ~|A;
end
if ((RI == ADD) || (RI == ADDinm) || (RI == ADDind))
S[3] <= Temp^Temp1 ? 1'b0:Temp^A[7];
if (RI == DCA)
S[3] <= Temp ? ~A[7]:1'b0;
if (RI == INA)
S[3] <= Temp ? 1'b0:A[7];
if ((RI == SUB) || (RI == SUBinm) || (RI == SUBind))
S[3] <= Temp^Temp1 ? Temp^A[7]:1'b0;
if (!(INT|S[2]))
RDR <= {8'hFF,P};
else if (!SDMA)
RDR <= 16'hzzzz;
if (INT|S[2])
if (!SDMA)
LE <= 1'bz;
end
Estado_2:
begin
PC <= BUSPC;
if (RI == CLI)
S[2] <= 1'b0;
if (RI == SEI)
S[2] <= 1'b1;
if (RI == CLA)
A <= 8'b0;
if (RI == CLC)
S[0] <= 1'b0;
if (RI == SEC)
S[0] <= 1'b1;
if ((RI == TAP) && !WAIT)
P <= A;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 95
de Synopsys
if ((RI == CPA) && !WAIT)
A <= ~A;
if ((RI == DCA) && !WAIT)
{S[0],A} <= A - 8'b1;
if ((RI == INA) && !WAIT)
{S[0],A} <= A + 8'b1;
if ((RI == ROL) && !WAIT)
{S[0],A} <= {A,S[0]};
if ((RI == ROR) && !WAIT)
{A,S[0]} <= {S[0],A};
if ((RI == TPA) && !WAIT)
A <= P;
if (((RI == PLA) || (RI == PLS) || (RI == RTI) || (RI == RTS)) &&
!WAIT)
P <= P - 8'b1;
case (RI)//synopsys parallel_case
PHA,PHS: RDR <= {8'hFF,P};
PLA,PLS,RTI,RTS: RDR <= {8'hFF,TB};
default: RDR <= BUSPC;
endcase
end
Estado_3:
begin
BUSPC <= PC + 16'b1;
if (RI == PHA)
begin
LE <= 1'b0;
LE_A <= 1'b0;
end
if (RI == PHS)
begin
LE <= 1'b0;
LE_S <= 1'b0;
end
end
Estado_4:
begin
TB <= BUSDAT;
Temp1 <= BUSDAT[7];
if (RI == PHA)
begin
LE <= 1'b1;
LE_A <= 1'b1;
end
if (RI == PHS)
begin
LE <= 1'b1;
LE_S <= 1'b1;
end
if ((RI == PLA) && !WAIT)
A <= BUSDAT;
if ((RI == PLS) && !WAIT)
S <= BUSDAT;
if ((RI == ADDinm) && !WAIT)
{S[0],A} <= A + BUSDAT;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 96
de Synopsys
if ((RI == ANDinm) && !WAIT)
A <= A & BUSDAT;
if ((RI == LDAinm) && !WAIT)
A <= BUSDAT;
if ((RI == ORAinm) && !WAIT)
A <= A | BUSDAT;
if ((RI == SUBinm) && !WAIT)
{S[0],A} <= A - BUSDAT;
if (((RI == PHA) || (RI == PHS)) && !WAIT)
P <= P + 8'b1;
case (RI)//synopsys parallel_case
BCC: RDR <= S[0] ? BUSPC:DIR;
BCS: RDR <= S[0] ? DIR:BUSPC;
BEQ: RDR <= S[1] ? DIR:BUSPC;
BMI: RDR <= S[5] ? DIR:BUSPC;
BNE: RDR <= S[1] ? BUSPC:DIR;
BPL: RDR <= S[5] ? BUSPC:DIR;
BVC: RDR <= S[3] ? BUSPC:DIR;
BVS: RDR <= S[3] ? DIR:BUSPC;
INP,OUT: RDR <= {8'h00,BUSDAT};
PHA,PHS,PLA,PLS: RDR <= PC;
// default: RDR <= BUSPC;
endcase
case (RI)//synopsys parallel_case
BCC: PC <= S[0] ? BUSPC:DIR;
BCS: PC <= S[0] ? DIR:BUSPC;
BEQ: PC <= S[1] ? DIR:BUSPC;
BMI: PC <= S[5] ? DIR:BUSPC;
BNE: PC <= S[1] ? BUSPC:DIR;
BPL: PC <= S[5] ? BUSPC:DIR;
BVC: PC <= S[3] ? BUSPC:DIR;
BVS: PC <= S[3] ? DIR:BUSPC;
INP,OUT,PHA,PHS,PLA,PLS: PC <= PC;
//default: PC <= BUSPC;
endcase
end
Estado_5: BUSPC <= PC + 16'b1;
Estado_6:
begin
PC <= {BUSDAT,TB};
if (RI == JSR)
RDR <= {8'hFF,P};
else RDR <= {BUSDAT,TB};
end
Estado_8:
begin
TB <= BUSDAT;
RDR <= PC + 16'b1;
end
Estado_10:
begin
PC <= {BUSDAT,TB};
if (RI == JSRind)
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 97
de Synopsys
RDR <= {8'hFF,P};
else RDR <= {BUSDAT,TB};
end
Estado_11:
if (RI == STA || RI == STAind || RI == OUT)
begin
LE <= 1'b0;
LE_A <= 1'b0;
end
Estado_12:
begin
PC <= BUSPC;
RDR <= BUSPC;
Temp1 <= BUSDAT[7];
if (((RI == ADD) || (RI == ADDind)) && !WAIT)
{S[0],A} <= A + BUSDAT;
if (((RI == AND) || (RI == ANDind)) && !WAIT)
A <= A & BUSDAT;
if (((RI == ORA) || (RI == ORAind)) && !WAIT)
A <= A | BUSDAT;
if (((RI == SUB) || (RI == SUBind)) && !WAIT)
{S[0],A} <= A - BUSDAT;
if (RI == STA || RI == STAind || RI == OUT)
begin
LE <= 1'b1;
LE_A <= 1'b1;
end
if (((RI == LDA) || (RI == LDAind) || (RI == INP)) && !WAIT)
A <= BUSDAT;
end
Estado_13:
begin
LE <= 1'b0;
LE_PA <= 1'b0;
P <= P + 8'b1;
end
Estado_14:
begin
LE <= 1'b1;
LE_PA <= 1'b1;
RDR <= {8'hFF,P};
end
Estado_15:
begin
LE <= 1'b0;
LE_PB <= 1'b0;
P <= P + 8'b1;
end
Estado_16:
begin
RDR <= PC;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 98
de Synopsys
LE <= 1'b1;
LE_PB <= 1'b1;
end
Estado_17: P <= P - 8'b1;
Estado_18:
begin
TB <= BUSDAT;
RDR <= {8'hFF,P};
end
Estado_20:
begin
PC <= {BUSDAT,TB};
RDR <= {BUSDAT,TB};
end
Estado_22:
if (SDMA)
begin
RDR <= PC;
LE <= 1'b1;
end
Estado_23:
begin
LE <= 1'b0;
S[2] <= 1'b1;
P <= P + 8'b1;
LE_PA <= 1'b0;
end
Estado_24:
begin
LE <= 1'b1;
LE_PA <= 1'b1;
RDR <= {8'hFF,P};
end
Estado_25:
begin
LE <= 1'b0;
LE_PB <= 1'b0;
P <= P + 8'b1;
end
Estado_26:
begin
LE <= 1'b1;
LE_PB <= 1'b1;
RDR <= 16'hFF00;
end
Estado_28:
begin
TB <= BUSDAT;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 99
de Synopsys
RDR <= 16'hFF01;
end
Estado_30:
begin
PC <= {BUSDAT,TB};
RDR <= {BUSDAT,TB};
end
endcase
//*********************************************************************
**********
always @(negedge CLK)
begin
if (!RPS)
EstPresente <= Estado_0;
else
EstPresente <= ProxEst;
end
endmodule
Apéndice H. Modelo estructural obtenido en la síntesis con el
Design Analyzer
module CPUCRale ( CLK, RPS, LE, M, CB, CM, WAIT, HALT, INT, INTOK,
SDMA, BD,
BUSDIR, BUSDAT );
output [15:0] BUSDIR;
inout [7:0] BUSDAT;
input CLK, RPS, WAIT, INT, SDMA;
output LE, M, CB, CM, HALT, INTOK, BD;
wire
N32, N34, N36, N38, N39, N42, N44, N49, N50, N55, N60, N64,
N66, N67,
N68, N69, N70, N73, N74, N75, N77, N78, N79, N80, N81, N83,
N84, N86,
N87, N88, N89, N90, N91, N92, N93, N95, N96, N97, N98, N123,
N125,
N126, N127, N128, N129, N137, \A[7] , \A[6] , \A[5] , \A[4] ,
\A[3] ,
\A[2] , \A[1] , N150, LE_A, N388, LE_S, LE_PB, N390, LE_PA,
N391,
ActualizarNZ, N393, N411, N412, N416, N421, N429, N437, N443,
N445,
N453, N455, N461, N465, N469, N477, N485, N489, N490, N495,
N497,
N498, N499, N502, N503, N504, N512, N513, N514, N517, N520,
N527,
N531, N533, N537, N546, N566, N570, N576, N581, N585, N591,
\P[7] ,
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 100
de Synopsys
\P[6] , \P[5] , \P[4] , \P[3] , \P[2] , \P[1] , N592, Temp,
Temp1,
N594, N595, N597, N598, N599, N600, N601, N602, N603, N604,
N605,
N606, N618, N619, N620, N621, N623, N629, N631, N632, N633,
N634,
N637, N638, N640, N641, N642, N643, N644, N646, N647, N648,
N650,
N651, N652, N654, N655, N658, N659, N660, N662, N666, N668,
N670,
N671, N672, N673, N674, N676, N677, N678, N680, N682, N683,
N684,
N685, N686, N687, N708, N718, N727, N728, N734, N735, N753,
N766,
N779, N792, N805, N829, N830, N831, N832, N833, N834, N835,
N836,
N839, N871, N872, N885, N918, N931, N933, N1098, N1278, N1279,
N1290,
N1301, N1314, N1378, N1379, N1380, N1381, N1382, N1383, N1384,
N1385,
N1386, N1387, N1388, N1389, N1390, N1391, N1392, N1393, N1394,
N1395,
N1396, N1397, N1398, N1399, N1400, N1401, N1402, N1403, N1404,
N1405,
N1406, N1407, N1408, N1409, N1410, N1411, N1412, N1413, N1414,
N1415,
N1416, N1417, N1418, N1419, N1420, N1421, N1422, N1423, N1424,
N1425,
N1426, N1427, N1428, N1429, N1430, N1431, N1432, N1433, N1434,
N1499,
N1525, N1526, N1527, N1529, N1530, N1534, N1535, N1537, N1541,
N1542,
N1553, N1587, N1588, N1589, N1590, N1591, N1592, N1593, N1654,
N1655,
N1659, N1665, N1667, N1668, N1669, N1670, N1674, N1678, N1679,
N1680,
N1681, N1682, N1683, N1684, N1685, N1686, N1687, N1688, N1689,
N1690,
N1717, N1718, N1719, N1720, N1721, N1722, N1723, N1725, N1726,
N1727,
N1728, N1729, N1730, N1731, N1732, N1733, N1743, N1744, N1745,
N1746,
N1747, N1748, N1749, N1750, N1751, N1752, N1753, N1754, N1755,
N1756,
N1757, N1758, N1759, N1760, N1786, N1796, N1797, N1803, N1804,
N1809,
N1812, N1814, N1815, N1816, N1817, N1818, N1819, N1820, N1821,
N1822,
N1823, N1824, N1825, N1826, N1827, N1828, N1847, N1868, N1886,
N1887,
N1888, N1914, N1935, N1936, N1937, N1939, N1940, N1941, N1978,
N2005,
N2008, N2009, N2011, N2017, N2021, N2031, N2032, N2033, N2035,
N2037,
N2043, N2075, N2080, N2081, N2082, N2083, N2089, N2093, N2094,
N2110,
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 101
de Synopsys
N2112, N2113, N2114, N2131, N2134, N2137, N2138, N2139, N2140,
N2141,
N2144, N2145, N2148, N2149, N2150, N2151, N2157, N2158, N2159,
N2160,
N2161, N2162, N2177, N2178, N2183, N2185, N2190, N2196, N2199,
N2200,
N2201, N2202, N2204, N2205, N2206, N2207, N2208, N2209, N2210,
N2214,
N2215, N2219, N2222, N2223, N2224, n18, n21, n22, n23, n24,
n25, n26,
n27, n28, n29, n30, n31, n32, n33, n34, n35, n36, n37, n38,
n40, n41,
n42, n43, n44, n46, n47, n48, n51, n52, n53, n54, n56, n57,
n58, n59,
n60, n61, n64, n66, n67, n68, n69, n70, n71, n72, n73, n75,
n78, n79,
n80, n82, n83, n84, n85, n86, n88, n89, n91, n92, n93, n94,
n95, n96,
n97, n98, n99, n100, n102, n103, n104, n105, n106, n107, n108,
n109,
n110, n112, n113, n114, n115, n117, n118, n119, n121, n122,
n123,
n124, n125, n126, n127, n128, n129, n130, n131, n132, n133,
n134,
n135, n136, n137, n138, n139, n140, n141, n142, n143, n144,
n145,
n148, n149, n150, n151, n153, n154, n155, n156, n157, n158,
n159,
n161, n162, n163, n164, n165, n166, n167, n168, n169, n170,
n172,
n173, n174, n175, n176, n177, n178, n179, n180, n183, n184,
n185,
n186, n187, n189, n190, n191, n192, n193, n194, n195, n196,
n197,
n198, n199, n200, n201, n203, n204, n205, n206, n207, n208,
n209,
n211, n212, n213, n214, n215, n216, n217, n219, n220, n221,
n222,
n223, n224, n225, n227, n228, n229, n230, n231, n232, n233,
n236,
n237, n238, n239, n240, n241, n244, n245, n246, n247, n248,
n249,
n250, n251, n253, n254, n255, n256, n257, n260, n261, n262,
n263,
n264, n265, n267, n268, n269, n270, n271, n274, n275, n276,
n277,
n278, n279, n281, n282, n283, n284, n285, n287, n288, n290,
n291,
n292, n297, n298, n299, n300, n301, n302, n303, n304, n305,
n308,
n309, n310, n311, n312, n313, n314, n316, n317, n320, n321,
n326,
n327, n328, n329, n330, n331, n332, n333, n334, n335, n336,
n337,
n338, n339, n340, n341, n342, n343, n345, n346, n347, n348,
n349,
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 102
de Synopsys
n350, n353, n354, n355, n356, n358, n359, n362, n363, n364,
n365,
n366, n367, n369, n370, n373, n374, n375, n377, n378, n379,
n381,
n382, n383, n385, n386, n387, n389, n390, n391, n393, n394,
n396,
n397, n398, n399, n400, n401, n403, n404, n405, n408, n409,
n411,
n412, n413, n414, n415, n416, n417, n419, n420, n421, n422,
n423,
n424, n425, n426, n427, n428, n429, n430, n431, n432, n433,
n434,
n435, n436, n437, n438, n439, n440, n441, n442, n443, n444,
n445,
n446, n447, n448, n449, n450, n451, n452, n453, n454, n455,
n456,
n457, n459, n460, n461, n462, n463, n464, n465, n466, n467,
n468,
n469, n470, n471, n472, n473, n474, n475, n476, n477, n478,
n479,
n480, n481, n482, n483, n484, n485, n486, n487, n488, n489,
n490,
n491, n492, n493, n494, n495, n496, n497, n498, n502, n503,
n504,
n505, n506, n507, n508, n511, n512, n513, n514, n515, n516,
n517,
n518, n519, n523, n524, n527, n529, n530, n531, n534, n535,
n540,
n541, n542, n544, n557, n559, n561, n563, n564, n567, n571,
n572,
n573, n574, n575, n576, n577, n578, n579, n580, n581, n582,
n583,
n584, n585, n587, n589, n595, n596, n600, n602, n606, n607,
n608,
n609, n612, n614, n615, n616, n617, n619, n621, n623, n630,
n631,
n633, n634, n635, n640, n642, n643, n645, n646, n647, n648,
n649,
n650, n651, n652, n653, n654, n655, n656, n658, n659, n661,
n663,
n665, n666, n668, n670, n671, n672, n673, n674, n675, n676,
n678,
n679, n680, n681, n682, n683, n684, n685, n686, n687, n688,
n689,
n690, n691, n692, n693, n694, n695, n696, n697, n698, n700,
n701,
n702, n703, n704, n705, n706, n707, n708, n709, n710, n711,
n712,
n713, n714, n715, n716, n717, n718, n719, n720, n721, n722,
n725,
n726, n727, n728, n729, n730, n742, n743, n744, n745, n746,
n747,
n748, n749, n750, n751, n752, n753, n754, n755, n756, n757,
n758,
n759, n760, n761, n762, n763, n764, n765, n766, n767, n768,
n769,
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 103
de Synopsys
n771, n772, n773, n774, n775, n777, n778, n779, n780, n781,
n784,
n785, n786, n787, n788, n789, n790, n792, n793, n794, n796,
n797,
n798, n800, n802, n803, n808, n809, n810, n811, n812, n813,
n814,
n815, n816, n817, n818, n819, n820, n821, n822, n823, n824,
n825,
n826, n827, n828, n830, n834, n835, n836, n837, n838, n839,
n840,
n841, n842, n843, n845, n846, n847, n848, n849, n850, n851,
n853,
n854, n855, n856, n857, n858, n859, n860, n861, n862, n864,
n865,
n866, n867, n868, n869, n870, n871, n872, n873, n875, n876,
n877,
n878, n879, n880, n881, n882, n883, n884, n886, n887, n888,
n889,
n890, n891, n892, n893, n894, n895, n897, n898, n899, n900,
n901,
n902, n903, n904, n905, n906, n908, n909, n910, n911, n912,
n913,
n914, n915, n916, n917, n919, n920, n921, n922, n923, n924,
n925,
n926, n927, n928, n929, n930, n931, n932, n933, n934, n935,
n936,
n938, n939, n941, n942, n944, n945, n946, n947, n948, n949,
n950,
n951, n952, n954, n955, n957, n960, n961, n962, n963, n964,
n965,
n966, n967, n969, n970, n971, n973, n974, n975, n976, n977,
n978,
n979, n982, n983, n984, n985, n986, n987, n988, n989, n990,
n991,
n992, n993, n994, n995, n996, n997, n998, n999, n1000, n1002,
n1003,
n1004, n1005, n1006, n1007, n1008, n1009, n1010, n1011, n1012,
n1013,
n1017, n1018, n1019, n1021, n1023, n1025, n1027, n1029, n1031,
n1033,
n1035, n1037, n1039, n1041, n1043, n1045, n1047, n1049, n1051,
n1053,
n1055, n1056, n1057, n1058, n1059, n1060, n1061, n1062, n1063,
n1064,
n1065, n1066, n1067, n1068, n1069, n1070, n1071, n1072, n1073,
n1074,
n1075, n1076, n1077, n1078, n1079, n1080, n1081, n1082, n1083,
n1084,
n1085, n1086, n1087, n1088, n1089, n1090, n1091, n1092, n1093,
n1094,
n1095, n1096, n1097, n1098, n1099, n1100, n1101, n1102, n1103,
n1104,
n1105, n1106, n1107, n1108, n1109, n1110, n1111, n1112, n1113,
n1114,
n1115, n1116, n1117, n1118, n1119, n1120, n1121, n1122, n1123,
n1124,
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 104
de Synopsys
n1125, n1126, n1127, n1128, n1129, n1130, n1131, n1132, n1133,
n1134,
n1135, n1136, n1137, n1138, n1139, n1140, n1141, n1142, n1143,
n1144,
n1145, n1146, n1147, n1148, n1149, n1150, n1151, n1152, n1153,
n1154,
n1155, n1156, n1157, n1158, n1159, n1160, n1161, n1162, n1163,
n1164,
n1165, n1166, n1167, n1168, n1169, n1170, n1172, n1174, n1175,
n1177,
n1178, n1179, n1181, n1182, n1184, n1186, n1188, n1193, n1194,
n1195,
n1196, n1197, n1198, n1199, n1200, n1201, n1202, n1203, n1204,
n1205,
n1206, n1207, n1208, n1209, n1210, n1211, n1212, n1213, n1214,
n1215,
n1216, n1217, n1218, n1219, n1220, n1221, n1222, n1223, n1224,
n1225,
n1226, n1227, n1228, n1229, n1230, n1231, n1232, n1233, n1234,
n1235,
n1236, n1237, n1238, n1239, n1240, n1241, n1242, n1243, n1244,
n1245,
n1246, n1247, n1248, n1249, n1250, n1251, n1252, n1253, n1254,
n1255,
n1256, n1257, n1258, n1259, n1260, n1261, n1262, n1263, n1264,
n1265,
n1266, n1267, n1268, n1269, n1270, n1271, n1272, n1273, n1274,
n1275,
n1276, n1277, n1278, n1279, n1280, n1281, n1282, n1283, n1284,
n1285,
n1286, n1287, n1288, n1289, n1290, n1291, n1292, n1293, n1294,
n1295,
n1296, n1297, n1298, n1299, n1300, n1301, n1302, n1303, n1304,
n1305,
n1306, n1307, n1308, n1309, n1310, n1311, n1312, n1313, n1314,
n1315,
n1316, n1317, n1318, n1319, n1320, n1321, n1322, n1323, n1324,
n1325,
n1326, n1327, n1328, n1329, n1330, n1331, n1332, n1333, n1334,
n1335,
n1336, n1337, n1338, n1339, n1340, n1341, n1342, n1343, n1344,
n1345,
n1346, n1347, n1348, n1349, n1350, n1351, n1352, n1353, n1354,
n1355,
n1357, n1358, n1359, n1360, n1361, n1362, n1363, n1364, n1365,
n1366,
n1367, n1368, n1369, n1370, n1371, n1372, n1373, n1374, n1375,
n1376,
n1377, n1378, n1379, n1380, n1381, n1382, n1383, n1384, n1385,
n1386,
n1387, n1388, n1389, n1390, n1391, n1392, n1393, n1394, n1395,
n1396,
n1397, n1398, n1399, n1400, n1401, n1402, n1403, n1404, n1405,
n1406,
n1407, n1408, n1409, n1410, n1411, n1412, n1413, n1414, n1415,
n1416,
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 105
de Synopsys
n1417, n1418, n1419, n1420, n1421, n1422, n1423, n1424, n1425,
n1426,
n1427, n1428, n1429, n1430, n1431, n1432, n1433, n1434, n1435,
n1436,
n1437, n1438, n1439, n1440, n1441, n1442, n1443, n1444, n1445,
n1446,
n1447, n1448, n1449, n1450, n1451, n1452, n1453, n1454, n1455,
n1456,
n1457, n1458, n1459, n1460, n1461, n1462, n1463, n1464, n1465,
n1466,
n1467, n1468, n1469, n1470, n1471, n1472, n1473, n1474, n1475,
n1476,
n1477, n1478, n1479, n1480, n1481, n1482, n1483, n1484, n1485,
n1486,
n1487, n1488, n1489, n1490, n1491, n1492, n1493, n1494, n1495,
n1496,
n1497, n1498, n1499, n1500, n1501, n1502, n1503, n1504, n1505,
n1506,
n1507, n1508, n1509, n1510, n1511, n1512, n1513, n1514, n1515,
n1516,
n1517, n1518, n1519, n1520, n1521, n1522, n1523, n1524, n1525,
n1526,
n1527, n1528, n1529, n1530, n1531, n1532, n1533, n1534, n1535,
\sub_547/carry[7] , \sub_547/carry[6] , \sub_547/carry[5] ,
\sub_547/carry[4] , \sub_547/carry[3] , \sub_547/carry[2] ,
\sub_547/carry[1] , \add_32_2/carry[8] , \add_32_2/carry[7] ,
\add_32_2/carry[6] , \add_32_2/carry[5] , \add_32_2/carry[4] ,
\add_32_2/carry[3] , \add_32_2/carry[2] , \add_32_2/carry[1] ,
\add_32/carry[8] , \add_32/carry[7] , \add_32/carry[6] ,
\add_32/carry[5] , \add_32/carry[4] , \add_32/carry[3] ,
\add_32/carry[2] , \add_32/carry[1] , \r263/carry[8] ,
\r263/carry[7] , \r263/carry[6] , \r263/carry[5] ,
\r263/carry[4] ,
\r263/carry[3] , \r263/carry[2] , \r263/carry[1] ,
\r263/B_not[7] ,
\r263/B_not[6] , \r263/B_not[5] , \r263/B_not[4] ,
\r263/B_not[3] ,
\r262/carry[7] , \r262/carry[6] , \r262/carry[5] ,
\r262/carry[4] ,
\r262/carry[3] , \r262/carry[2] , \r262/carry[1] ,
\r258/carry[7] ,
\r258/carry[6] , \r258/carry[5] , \r258/carry[4] ,
\r258/carry[3] ,
\r258/carry[2] , \r258/carry[1] ;
wire
[7:0] RI;
wire
[7:0] S;
wire
[15:0] BUSPC;
wire
[4:0] EstPresente;
wire
[15:0] PC;
wire
[7:0] TB;
tri
LE;
tri
M;
tri
CM;
tri
[15:0] BUSDIR;
tri
[7:0] BUSDAT;
assign BD = n710;
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 106
de Synopsys
OAI22X1 U3 ( .A(N595), .B(N429), .C(n982), .D(n18), .Y(n1166) );
OAI21X1 U4 ( .A(\r263/B_not[7] ), .B(n1326), .C(n21), .Y(n1082) );
NAND2X1 U5 ( .A(Temp1), .B(n1326), .Y(n21) );
OAI21X1 U7 ( .A(n22), .B(n23), .C(n24), .Y(n1140) );
AOI22X1 U8 ( .A(n1493), .B(n25), .C(TB[7]), .D(n26), .Y(n24) );
INVX2 U9 ( .A(N1593), .Y(n23) );
OAI21X1 U10 ( .A(n22), .B(n27), .C(n28), .Y(n1139) );
AOI22X1 U11 ( .A(n1442), .B(n1360), .C(TB[6]), .D(n26), .Y(n28) );
INVX2 U12 ( .A(N1592), .Y(n27) );
OAI21X1 U13 ( .A(n22), .B(n29), .C(n30), .Y(n1138) );
AOI22X1 U14 ( .A(n1443), .B(n25), .C(TB[5]), .D(n26), .Y(n30) );
INVX2 U15 ( .A(N1591), .Y(n29) );
OAI21X1 U16 ( .A(n22), .B(n31), .C(n32), .Y(n1137) );
AOI22X1 U17 ( .A(n1482), .B(n25), .C(TB[4]), .D(n26), .Y(n32) );
INVX2 U18 ( .A(N1590), .Y(n31) );
OAI21X1 U19 ( .A(n22), .B(n33), .C(n34), .Y(n1136) );
AOI22X1 U20 ( .A(n1483), .B(n25), .C(TB[3]), .D(n26), .Y(n34) );
INVX2 U21 ( .A(N1589), .Y(n33) );
OAI21X1 U22 ( .A(n22), .B(n35), .C(n36), .Y(n1135) );
AOI22X1 U23 ( .A(n1446), .B(n25), .C(TB[2]), .D(n26), .Y(n36) );
INVX2 U24 ( .A(N1588), .Y(n35) );
OAI21X1 U31 ( .A(n22), .B(n37), .C(n38), .Y(n1134) );
AOI22X1 U32 ( .A(n1463), .B(n25), .C(TB[1]), .D(n26), .Y(n38) );
INVX2 U33 ( .A(N1587), .Y(n37) );
OAI21X1 U34 ( .A(n22), .B(\r258/carry[1] ), .C(n40), .Y(n1133) );
AOI22X1 U35 ( .A(BUSDAT[0]), .B(n25), .C(TB[0]), .D(n26), .Y(n40) );
INVX2 U36 ( .A(n41), .Y(n26) );
NAND2X1 U38 ( .A(n41), .B(n42), .Y(n22) );
NAND2X1 U39 ( .A(n43), .B(n18), .Y(n41) );
INVX2 U40 ( .A(n25), .Y(n43) );
NAND3X1 U41 ( .A(n44), .B(N652), .C(n46), .Y(n25) );
NOR2X1 U42 ( .A(N685), .B(N671), .Y(n46) );
OAI22X1 U43 ( .A(n991), .B(n47), .C(\r263/B_not[7] ), .D(n48),
.Y(n1079) );
OAI22X1 U44 ( .A(n993), .B(n47), .C(\r263/B_not[6] ), .D(n48),
.Y(n1078) );
OAI21X1 U45 ( .A(\r263/B_not[5] ), .B(n48), .C(n51), .Y(n1077) );
AOI22X1 U46 ( .A(n52), .B(n42), .C(n53), .D(S[5]), .Y(n51) );
NOR2X1 U47 ( .A(n54), .B(n982), .Y(n52) );
INVX2 U48 ( .A(ActualizarNZ), .Y(n54) );
OAI22X1 U49 ( .A(n995), .B(n47), .C(\r263/B_not[4] ), .D(n48),
.Y(n1076) );
INVX2 U50 ( .A(n48), .Y(n47) );
OAI21X1 U51 ( .A(N718), .B(n56), .C(n57), .Y(n1075) );
AOI21X1 U52 ( .A(n58), .B(n59), .C(n60), .Y(n57) );
OAI22X1 U53 ( .A(n996), .B(n61), .C(\r263/B_not[3] ), .D(n48),
.Y(n60) );
OAI22X1 U54 ( .A(n1351), .B(n64), .C(n1262), .D(n66), .Y(n59) );
NAND3X1 U55 ( .A(n1351), .B(n64), .C(n67), .Y(n66) );
INVX2 U56 ( .A(N718), .Y(n64) );
AND2X2 U58 ( .A(N594), .B(n42), .Y(n58) );
AOI21X1 U59 ( .A(n68), .B(N98), .C(n69), .Y(n56) );
OAI21X1 U60 ( .A(n70), .B(N641), .C(n71), .Y(n69) );
NAND3X1 U61 ( .A(EstPresente[0]), .B(S[3]), .C(n72), .Y(n71) );
INVX2 U62 ( .A(n67), .Y(n72) );
NAND2X1 U63 ( .A(n73), .B(N97), .Y(n67) );
NOR2X1 U65 ( .A(N708), .B(N2017), .Y(n73) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 107
de Synopsys
NAND3X1 U66 ( .A(N595), .B(N2017), .C(\A[7] ), .Y(n70) );
NOR2X1 U67 ( .A(n75), .B(N641), .Y(n68) );
NAND3X1 U68 ( .A(n1447), .B(Temp), .C(N2178), .Y(n75) );
OAI21X1 U70 ( .A(n1444), .B(n48), .C(n78), .Y(n1074) );
AND2X2 U71 ( .A(n79), .B(n80), .Y(n78) );
AOI21X1 U72 ( .A(N728), .B(N643), .C(N1914), .Y(n80) );
OAI21X1 U73 ( .A(n82), .B(n83), .C(S[2]), .Y(n79) );
OAI21X1 U74 ( .A(N727), .B(n1454), .C(n85), .Y(n83) );
AOI21X1 U75 ( .A(n1454), .B(n86), .C(n1450), .Y(n85) );
OAI21X1 U76 ( .A(n1461), .B(n48), .C(n88), .Y(n1073) );
AOI22X1 U77 ( .A(n89), .B(n42), .C(n53), .D(S[1]), .Y(n88) );
OAI21X1 U78 ( .A(ActualizarNZ), .B(n1371), .C(n61), .Y(n53) );
INVX2 U79 ( .A(n91), .Y(n61) );
NAND3X1 U80 ( .A(n92), .B(n93), .C(n94), .Y(n91) );
NOR2X1 U81 ( .A(n1464), .B(EstPresente[1]), .Y(n93) );
AOI21X1 U82 ( .A(n1373), .B(n86), .C(n95), .Y(n92) );
NOR2X1 U83 ( .A(n96), .B(n97), .Y(n89) );
NAND3X1 U84 ( .A(ActualizarNZ), .B(n990), .C(n98), .Y(n97) );
NOR2X1 U85 ( .A(n1480), .B(\A[1] ), .Y(n98) );
NAND3X1 U86 ( .A(n99), .B(n982), .C(n100), .Y(n96) );
NOR2X1 U87 ( .A(n1472), .B(n1459), .Y(n100) );
NOR2X1 U88 ( .A(n1473), .B(n1481), .Y(n99) );
NAND2X1 U89 ( .A(N871), .B(N537), .Y(n48) );
NAND3X1 U90 ( .A(n102), .B(n103), .C(n104), .Y(n1072) );
AOI21X1 U91 ( .A(n105), .B(n106), .C(n107), .Y(n104) );
OAI21X1 U92 ( .A(n108), .B(n109), .C(n110), .Y(n107) );
AOI22X1 U93 ( .A(N659), .B(n112), .C(N643), .D(n113), .Y(n110) );
NOR2X1 U94 ( .A(n982), .B(n114), .Y(n113) );
NAND2X1 U95 ( .A(N779), .B(n115), .Y(n114) );
NAND2X1 U97 ( .A(N1750), .B(n118), .Y(n117) );
NAND3X1 U99 ( .A(BUSDAT[0]), .B(n119), .C(N871), .Y(n109) );
NAND3X1 U102 ( .A(n121), .B(n115), .C(n122), .Y(n103) );
OAI21X1 U103 ( .A(n1484), .B(n123), .C(n124), .Y(n122) );
OAI21X1 U104 ( .A(n125), .B(n126), .C(n127), .Y(n124) );
OAI21X1 U105 ( .A(N642), .B(n128), .C(n129), .Y(n126) );
NAND3X1 U106 ( .A(n130), .B(S[0]), .C(EstPresente[1]), .Y(n129) );
NAND2X1 U108 ( .A(n1332), .B(N753), .Y(n128) );
NOR2X1 U109 ( .A(N642), .B(n131), .Y(n125) );
NAND2X1 U111 ( .A(N1733), .B(N766), .Y(n123) );
NOR2X1 U112 ( .A(n133), .B(n134), .Y(n102) );
OAI21X1 U113 ( .A(n1365), .B(n135), .C(n136), .Y(n134) );
OAI21X1 U114 ( .A(n82), .B(n137), .C(S[0]), .Y(n136) );
OAI21X1 U115 ( .A(n138), .B(n139), .C(n140), .Y(n137) );
NOR2X1 U117 ( .A(N1301), .B(N1278), .Y(n141) );
NAND2X1 U118 ( .A(n1454), .B(n142), .Y(n139) );
NAND3X1 U119 ( .A(n86), .B(n143), .C(n119), .Y(n138) );
INVX2 U120 ( .A(N871), .Y(n86) );
NAND2X1 U121 ( .A(N1759), .B(N1301), .Y(n135) );
OAI21X1 U122 ( .A(n1484), .B(n144), .C(n145), .Y(n133) );
NAND3X1 U123 ( .A(N1759), .B(N918), .C(N647), .Y(n145) );
NAND2X1 U124 ( .A(\sub_547/carry[1] ), .B(N792), .Y(n144) );
OAI22X1 U125 ( .A(N50), .B(N429), .C(n1452), .D(\r263/B_not[7] ),
.Y(n1132)
);
OAI22X1 U126 ( .A(n1465), .B(N429), .C(n18), .D(\r263/B_not[6] ),
.Y(n1131)
);
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 108
de Synopsys
OAI22X1 U127 ( .A(n1486), .B(N531), .C(n1452), .D(\r263/B_not[5] ),
.Y(n1130) );
OAI22X1 U128 ( .A(N44), .B(N429), .C(n18), .D(\r263/B_not[4] ),
.Y(n1129) );
OAI22X1 U129 ( .A(n1414), .B(N429), .C(n18), .D(\r263/B_not[3] ),
.Y(n1128)
);
OAI22X1 U130 ( .A(n1460), .B(n42), .C(n18), .D(n1444), .Y(n1127) );
OAI22X1 U131 ( .A(n1475), .B(N531), .C(n18), .D(n1461), .Y(n1126) );
OAI22X1 U132 ( .A(n1424), .B(N429), .C(n1452), .D(n1500), .Y(n1125)
);
OAI21X1 U133 ( .A(N1398), .B(n1490), .C(n148), .Y(n1103) );
OAI21X1 U134 ( .A(N1401), .B(n1491), .C(n1466), .Y(n1101) );
OAI21X1 U135 ( .A(N1404), .B(n1491), .C(n1466), .Y(n1099) );
OAI21X1 U136 ( .A(N1407), .B(n1491), .C(n1466), .Y(n1097) );
OAI21X1 U137 ( .A(N1410), .B(n1491), .C(n1466), .Y(n1095) );
OAI21X1 U138 ( .A(N1413), .B(n1491), .C(n1466), .Y(n1093) );
OAI21X1 U139 ( .A(N1416), .B(n1490), .C(n148), .Y(n1091) );
OAI21X1 U140 ( .A(N1419), .B(n1490), .C(n148), .Y(n1089) );
OAI21X1 U141 ( .A(N1422), .B(n1490), .C(n148), .Y(n1087) );
OAI21X1 U142 ( .A(N1380), .B(n1490), .C(n148), .Y(n1115) );
OAI21X1 U143 ( .A(N1383), .B(n1490), .C(n148), .Y(n1113) );
OAI21X1 U144 ( .A(N1386), .B(n1490), .C(n148), .Y(n1111) );
OAI21X1 U145 ( .A(N1389), .B(n1491), .C(n1466), .Y(n1109) );
OAI21X1 U146 ( .A(N1392), .B(n1491), .C(n1466), .Y(n1107) );
OAI21X1 U147 ( .A(N1395), .B(n1491), .C(n1466), .Y(n1105) );
OAI21X1 U148 ( .A(N1425), .B(n1490), .C(n148), .Y(n1085) );
INVX2 U149 ( .A(n149), .Y(n148) );
NAND2X1 U152 ( .A(n155), .B(n94), .Y(n154) );
INVX2 U153 ( .A(n156), .Y(n94) );
OAI21X1 U154 ( .A(n1373), .B(n157), .C(n142), .Y(n156) );
AOI22X1 U155 ( .A(EstPresente[0]), .B(n1271), .C(EstPresente[1]),
.D(n157),
.Y(n155) );
OR2X2 U156 ( .A(n158), .B(n159), .Y(n153) );
OAI22X1 U157 ( .A(n1464), .B(EstPresente[0]), .C(EstPresente[0]),
.D(SDMA),
.Y(n159) );
INVX2 U159 ( .A(N1396), .Y(n1033) );
INVX2 U161 ( .A(N1399), .Y(n1035) );
INVX2 U163 ( .A(N1402), .Y(n1037) );
INVX2 U165 ( .A(N1405), .Y(n1039) );
INVX2 U167 ( .A(N1408), .Y(n1041) );
INVX2 U169 ( .A(N1411), .Y(n1043) );
INVX2 U171 ( .A(N1414), .Y(n1045) );
INVX2 U173 ( .A(N1417), .Y(n1047) );
INVX2 U175 ( .A(N1420), .Y(n1049) );
INVX2 U177 ( .A(N1378), .Y(n1021) );
INVX2 U179 ( .A(N1381), .Y(n1023) );
INVX2 U181 ( .A(N1384), .Y(n1025) );
INVX2 U183 ( .A(N1387), .Y(n1027) );
INVX2 U185 ( .A(N1390), .Y(n1029) );
INVX2 U187 ( .A(N1393), .Y(n1031) );
INVX2 U189 ( .A(N1423), .Y(n1051) );
NAND3X1 U190 ( .A(n161), .B(n162), .C(n163), .Y(n1104) );
NOR2X1 U191 ( .A(n164), .B(n165), .Y(n163) );
OAI21X1 U192 ( .A(n166), .B(n167), .C(n168), .Y(n165) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 109
de Synopsys
INVX2 U193 ( .A(PC[9]), .Y(n167) );
OAI22X1 U194 ( .A(n169), .B(n1461), .C(n1488), .D(n1323), .Y(n164) );
AOI22X1 U195 ( .A(n1477), .B(N1396), .C(n173), .D(BUSPC[9]), .Y(n162)
);
AOI22X1 U196 ( .A(N1822), .B(n1485), .C(N1684), .D(n175), .Y(n161) );
NAND3X1 U197 ( .A(n176), .B(n177), .C(n178), .Y(n1102) );
NOR2X1 U198 ( .A(n179), .B(n180), .Y(n178) );
OAI21X1 U199 ( .A(n1479), .B(n1522), .C(n168), .Y(n180) );
OAI22X1 U201 ( .A(n169), .B(n1500), .C(n1488), .D(n1322), .Y(n179) );
AOI22X1 U202 ( .A(n1477), .B(N1399), .C(n173), .D(BUSPC[8]), .Y(n177)
);
AOI22X1 U203 ( .A(N1821), .B(n1485), .C(N1683), .D(n175), .Y(n176) );
NAND3X1 U204 ( .A(n183), .B(n184), .C(n185), .Y(n1100) );
NOR2X1 U205 ( .A(n186), .B(n187), .Y(n185) );
OAI22X1 U206 ( .A(n1487), .B(n1324), .C(n189), .D(n190), .Y(n187) );
OAI21X1 U207 ( .A(n1000), .B(n191), .C(n192), .Y(n186) );
AOI22X1 U208 ( .A(n172), .B(N1402), .C(N1820), .D(n174), .Y(n192) );
AOI22X1 U209 ( .A(n193), .B(n1493), .C(TB[7]), .D(n194), .Y(n184) );
AOI22X1 U210 ( .A(PC[7]), .B(n195), .C(\P[7] ), .D(n196), .Y(n183) );
NAND3X1 U211 ( .A(n197), .B(n198), .C(n199), .Y(n1098) );
NOR2X1 U212 ( .A(n200), .B(n201), .Y(n199) );
OAI22X1 U213 ( .A(n1487), .B(n1338), .C(n189), .D(n203), .Y(n201) );
OAI21X1 U214 ( .A(n1002), .B(n191), .C(n204), .Y(n200) );
AOI22X1 U215 ( .A(n172), .B(N1405), .C(N1819), .D(n174), .Y(n204) );
AOI22X1 U216 ( .A(n193), .B(BUSDAT[6]), .C(TB[6]), .D(n194), .Y(n198)
);
AOI22X1 U217 ( .A(PC[6]), .B(n195), .C(\P[6] ), .D(n196), .Y(n197) );
NAND3X1 U218 ( .A(n205), .B(n206), .C(n207), .Y(n1096) );
NOR2X1 U219 ( .A(n208), .B(n209), .Y(n207) );
OAI22X1 U220 ( .A(n1487), .B(n1337), .C(n189), .D(n211), .Y(n209) );
OAI21X1 U221 ( .A(n1003), .B(n191), .C(n212), .Y(n208) );
AOI22X1 U222 ( .A(n172), .B(N1408), .C(N1818), .D(n174), .Y(n212) );
AOI22X1 U223 ( .A(n193), .B(n1443), .C(TB[5]), .D(n194), .Y(n206) );
AOI22X1 U224 ( .A(PC[5]), .B(n195), .C(\P[5] ), .D(n196), .Y(n205) );
NAND3X1 U225 ( .A(n213), .B(n214), .C(n215), .Y(n1094) );
NOR2X1 U226 ( .A(n216), .B(n217), .Y(n215) );
OAI22X1 U227 ( .A(n1487), .B(n1336), .C(n189), .D(n219), .Y(n217) );
OAI21X1 U228 ( .A(n1004), .B(n191), .C(n220), .Y(n216) );
AOI22X1 U229 ( .A(n172), .B(N1411), .C(N1817), .D(n174), .Y(n220) );
AOI22X1 U230 ( .A(n193), .B(BUSDAT[4]), .C(TB[4]), .D(n194), .Y(n214)
);
AOI22X1 U231 ( .A(PC[4]), .B(n195), .C(\P[4] ), .D(n196), .Y(n213) );
NAND3X1 U232 ( .A(n221), .B(n222), .C(n223), .Y(n1092) );
NOR2X1 U233 ( .A(n224), .B(n225), .Y(n223) );
OAI22X1 U234 ( .A(n1487), .B(n1335), .C(n1469), .D(n227), .Y(n225) );
OAI21X1 U235 ( .A(n1005), .B(n191), .C(n228), .Y(n224) );
AOI22X1 U236 ( .A(n172), .B(N1414), .C(N1816), .D(n174), .Y(n228) );
AOI22X1 U237 ( .A(n193), .B(BUSDAT[3]), .C(TB[3]), .D(n194), .Y(n222)
);
AOI22X1 U238 ( .A(PC[3]), .B(n195), .C(\P[3] ), .D(n196), .Y(n221) );
NAND3X1 U239 ( .A(n229), .B(n230), .C(n231), .Y(n1090) );
NOR2X1 U240 ( .A(n232), .B(n233), .Y(n231) );
OAI22X1 U241 ( .A(n1487), .B(n1350), .C(n189), .D(n1291), .Y(n233) );
OAI21X1 U242 ( .A(n1006), .B(n191), .C(n236), .Y(n232) );
AOI22X1 U243 ( .A(n172), .B(N1417), .C(N1815), .D(n174), .Y(n236) );
AOI22X1 U244 ( .A(n193), .B(n1445), .C(TB[2]), .D(n194), .Y(n230) );
AOI22X1 U245 ( .A(PC[2]), .B(n195), .C(\P[2] ), .D(n196), .Y(n229) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 110
de Synopsys
NAND3X1 U246 ( .A(n237), .B(n238), .C(n239), .Y(n1088) );
NOR2X1 U247 ( .A(n240), .B(n241), .Y(n239) );
OAI22X1 U248 ( .A(n1487), .B(n1293), .C(n1469), .D(n1349), .Y(n241)
);
OAI21X1 U249 ( .A(n1007), .B(n191), .C(n244), .Y(n240) );
AOI22X1 U250 ( .A(n172), .B(N1420), .C(N1814), .D(n174), .Y(n244) );
AOI22X1 U251 ( .A(n193), .B(n1463), .C(TB[1]), .D(n194), .Y(n238) );
INVX2 U252 ( .A(n245), .Y(n193) );
AOI22X1 U253 ( .A(PC[1]), .B(n195), .C(\P[1] ), .D(n196), .Y(n237) );
NOR2X1 U255 ( .A(n249), .B(n250), .Y(n248) );
OAI21X1 U256 ( .A(n166), .B(n251), .C(n168), .Y(n250) );
INVX2 U257 ( .A(PC[15]), .Y(n251) );
OAI22X1 U258 ( .A(n169), .B(\r263/B_not[7] ), .C(n1488), .D(n1304),
.Y(n249)
);
AOI22X1 U259 ( .A(n1477), .B(N1378), .C(n173), .D(BUSPC[15]),
.Y(n247) );
AOI22X1 U260 ( .A(N1828), .B(n1485), .C(N1690), .D(n175), .Y(n246) );
NAND3X1 U261 ( .A(n253), .B(n254), .C(n255), .Y(n1114) );
NOR2X1 U262 ( .A(n256), .B(n257), .Y(n255) );
OAI21X1 U263 ( .A(n166), .B(n1516), .C(n168), .Y(n257) );
OAI22X1 U265 ( .A(n169), .B(\r263/B_not[6] ), .C(n1488), .D(n1305),
.Y(n256)
);
AOI22X1 U266 ( .A(n1477), .B(N1381), .C(n173), .D(BUSPC[14]),
.Y(n254) );
AOI22X1 U267 ( .A(N1827), .B(n1485), .C(N1689), .D(n175), .Y(n253) );
NAND3X1 U268 ( .A(n260), .B(n261), .C(n262), .Y(n1112) );
NOR2X1 U269 ( .A(n263), .B(n264), .Y(n262) );
OAI21X1 U270 ( .A(n166), .B(n265), .C(n168), .Y(n264) );
INVX2 U271 ( .A(PC[13]), .Y(n265) );
OAI22X1 U272 ( .A(n169), .B(\r263/B_not[5] ), .C(n1488), .D(n1315),
.Y(n263)
);
AOI22X1 U273 ( .A(n1477), .B(N1384), .C(n173), .D(BUSPC[13]),
.Y(n261) );
AOI22X1 U274 ( .A(N1826), .B(n1485), .C(N1688), .D(n175), .Y(n260) );
NAND3X1 U275 ( .A(n267), .B(n268), .C(n269), .Y(n1110) );
NOR2X1 U276 ( .A(n270), .B(n271), .Y(n269) );
OAI21X1 U277 ( .A(n1479), .B(n1518), .C(n168), .Y(n271) );
OAI22X1 U279 ( .A(n169), .B(\r263/B_not[4] ), .C(n1488), .D(n1314),
.Y(n270)
);
AOI22X1 U280 ( .A(n1477), .B(N1387), .C(n173), .D(BUSPC[12]),
.Y(n268) );
AOI22X1 U281 ( .A(N1825), .B(n1485), .C(N1687), .D(n175), .Y(n267) );
NAND3X1 U282 ( .A(n274), .B(n275), .C(n276), .Y(n1108) );
NOR2X1 U283 ( .A(n277), .B(n278), .Y(n276) );
OAI21X1 U284 ( .A(n166), .B(n279), .C(n168), .Y(n278) );
INVX2 U285 ( .A(PC[11]), .Y(n279) );
OAI22X1 U286 ( .A(n169), .B(\r263/B_not[3] ), .C(n1487), .D(n1313),
.Y(n277)
);
AOI22X1 U287 ( .A(n1477), .B(N1390), .C(n173), .D(BUSPC[11]),
.Y(n275) );
AOI22X1 U288 ( .A(N1824), .B(n1485), .C(N1686), .D(n175), .Y(n274) );
NAND3X1 U289 ( .A(n281), .B(n282), .C(n283), .Y(n1106) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 111
de Synopsys
NOR2X1 U290 ( .A(n284), .B(n285), .Y(n283) );
OAI21X1 U291 ( .A(n1479), .B(n1520), .C(n168), .Y(n285) );
INVX2 U292 ( .A(n287), .Y(n168) );
OAI21X1 U293 ( .A(n288), .B(n1317), .C(n290), .Y(n287) );
AOI22X1 U294 ( .A(N1499), .B(n291), .C(n1453), .D(n292), .Y(n290) );
OAI22X1 U297 ( .A(n169), .B(n1444), .C(n1488), .D(n1312), .Y(n284) );
AOI22X1 U301 ( .A(n1477), .B(N1393), .C(n173), .D(BUSPC[10]),
.Y(n282) );
INVX2 U302 ( .A(n191), .Y(n173) );
OAI21X1 U303 ( .A(n298), .B(n299), .C(N1941), .Y(n191) );
NAND2X1 U304 ( .A(N658), .B(n300), .Y(n299) );
AOI22X1 U305 ( .A(N1823), .B(n174), .C(N1685), .D(n175), .Y(n281) );
INVX2 U306 ( .A(n189), .Y(n175) );
INVX2 U307 ( .A(n301), .Y(n174) );
NAND3X1 U308 ( .A(n302), .B(n303), .C(n304), .Y(n1086) );
AOI21X1 U309 ( .A(TB[0]), .B(n194), .C(n305), .Y(n304) );
OAI22X1 U310 ( .A(n1500), .B(n245), .C(n1488), .D(PC[0]), .Y(n305) );
NAND2X1 U311 ( .A(n1453), .B(N443), .Y(n170) );
OR2X2 U314 ( .A(n297), .B(n309), .Y(n194) );
OAI22X1 U315 ( .A(n288), .B(n1325), .C(n310), .D(n311), .Y(n309) );
NAND3X1 U316 ( .A(N836), .B(n312), .C(n313), .Y(n311) );
NOR2X1 U317 ( .A(n314), .B(n151), .Y(n313) );
OAI21X1 U319 ( .A(N412), .B(n316), .C(n317), .Y(n297) );
NAND3X1 U320 ( .A(N1941), .B(N655), .C(N88), .Y(n317) );
NAND2X1 U321 ( .A(N1941), .B(N651), .Y(n316) );
NOR2X1 U323 ( .A(n320), .B(n321), .Y(n303) );
NAND2X1 U325 ( .A(n1306), .B(\r263/B_not[7] ), .Y(n301) );
NAND2X1 U326 ( .A(n1306), .B(BUSDAT[7]), .Y(n189) );
OAI21X1 U329 ( .A(n327), .B(n151), .C(n328), .Y(n320) );
AOI22X1 U330 ( .A(n329), .B(n330), .C(n172), .D(N1423), .Y(n328) );
INVX2 U331 ( .A(n331), .Y(n172) );
OAI21X1 U332 ( .A(n332), .B(n333), .C(n151), .Y(n331) );
OAI21X1 U333 ( .A(n1464), .B(n334), .C(n335), .Y(n333) );
AOI22X1 U334 ( .A(EstPresente[4]), .B(n336), .C(n337), .D(n1271),
.Y(n335)
);
NAND3X1 U335 ( .A(n1372), .B(SDMA), .C(EstPresente[2]), .Y(n336) );
INVX2 U336 ( .A(n300), .Y(n330) );
NAND3X1 U337 ( .A(n338), .B(n339), .C(n340), .Y(n300) );
NOR2X1 U338 ( .A(n1008), .B(n151), .Y(n329) );
AOI21X1 U340 ( .A(n298), .B(BUSPC[0]), .C(n341), .Y(n327) );
OAI21X1 U341 ( .A(n342), .B(n343), .C(N684), .Y(n341) );
NAND2X1 U342 ( .A(n338), .B(BUSPC[0]), .Y(n343) );
OAI21X1 U343 ( .A(N642), .B(n1330), .C(n345), .Y(n298) );
AOI22X1 U344 ( .A(n346), .B(n339), .C(n310), .D(N533), .Y(n345) );
INVX2 U345 ( .A(n347), .Y(n339) );
NOR2X1 U346 ( .A(N638), .B(n348), .Y(n346) );
AOI22X1 U348 ( .A(PC[0]), .B(n195), .C(\r258/carry[1] ), .D(n196),
.Y(n302)
);
OAI21X1 U349 ( .A(n288), .B(n349), .C(n350), .Y(n196) );
AOI22X1 U350 ( .A(N831), .B(n291), .C(n1453), .D(n292), .Y(n350) );
OAI22X1 U351 ( .A(N654), .B(N88), .C(N650), .D(N84), .Y(n292) );
INVX2 U354 ( .A(n353), .Y(n291) );
NAND3X1 U355 ( .A(N1941), .B(n354), .C(N533), .Y(n353) );
INVX2 U356 ( .A(n355), .Y(n288) );
AOI22X1 U358 ( .A(N933), .B(n308), .C(N1847), .D(n355), .Y(n166) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 112
de Synopsys
OAI21X1 U359 ( .A(N641), .B(n1271), .C(n356), .Y(n355) );
INVX2 U363 ( .A(n359), .Y(n308) );
NAND3X1 U364 ( .A(N1941), .B(N638), .C(N537), .Y(n359) );
OAI21X1 U365 ( .A(n1270), .B(n1339), .C(n362), .Y(n1124) );
AOI21X1 U366 ( .A(N1593), .B(n363), .C(n364), .Y(n362) );
OAI22X1 U367 ( .A(n982), .B(n365), .C(n366), .D(n367), .Y(n364) );
OAI21X1 U369 ( .A(n1270), .B(n1340), .C(n369), .Y(n1123) );
AOI21X1 U370 ( .A(N1592), .B(n363), .C(n370), .Y(n369) );
OAI22X1 U371 ( .A(n984), .B(n365), .C(n1506), .D(n367), .Y(n370) );
OAI21X1 U373 ( .A(n1270), .B(n1341), .C(n373), .Y(n1122) );
AOI21X1 U374 ( .A(N1591), .B(n363), .C(n374), .Y(n373) );
OAI22X1 U375 ( .A(n985), .B(n365), .C(n375), .D(n367), .Y(n374) );
OAI21X1 U377 ( .A(n1270), .B(n1292), .C(n377), .Y(n1121) );
AOI21X1 U378 ( .A(N1590), .B(n363), .C(n378), .Y(n377) );
OAI22X1 U379 ( .A(n986), .B(n365), .C(n379), .D(n367), .Y(n378) );
OAI21X1 U381 ( .A(n1270), .B(n1354), .C(n381), .Y(n1120) );
AOI21X1 U382 ( .A(N1589), .B(n363), .C(n382), .Y(n381) );
OAI22X1 U383 ( .A(n987), .B(n365), .C(n383), .D(n367), .Y(n382) );
OAI21X1 U385 ( .A(n1270), .B(n1353), .C(n385), .Y(n1119) );
AOI21X1 U386 ( .A(N1588), .B(n363), .C(n386), .Y(n385) );
OAI22X1 U387 ( .A(n988), .B(n365), .C(n387), .D(n367), .Y(n386) );
OAI21X1 U389 ( .A(n1270), .B(n1352), .C(n389), .Y(n1118) );
AOI21X1 U390 ( .A(N1587), .B(n363), .C(n390), .Y(n389) );
OAI22X1 U391 ( .A(n989), .B(n365), .C(n391), .D(n367), .Y(n390) );
OAI21X1 U393 ( .A(n1270), .B(\r258/carry[1] ), .C(n393), .Y(n1117) );
AOI21X1 U394 ( .A(N1760), .B(n363), .C(n394), .Y(n393) );
OAI22X1 U395 ( .A(n990), .B(n365), .C(N1760), .D(n367), .Y(n394) );
OAI21X1 U396 ( .A(n82), .B(n396), .C(n397), .Y(n367) );
OAI21X1 U397 ( .A(n84), .B(n398), .C(n399), .Y(n396) );
AOI21X1 U398 ( .A(n84), .B(n400), .C(EstPresente[3]), .Y(n399) );
INVX2 U399 ( .A(N931), .Y(n400) );
NAND2X1 U400 ( .A(n401), .B(n1316), .Y(n398) );
INVX2 U401 ( .A(N734), .Y(n401) );
OR2X2 U402 ( .A(N642), .B(n403), .Y(n365) );
OAI21X1 U403 ( .A(N734), .B(n404), .C(n1316), .Y(n403) );
OAI22X1 U404 ( .A(N642), .B(n1316), .C(N668), .D(n397), .Y(n363) );
INVX2 U405 ( .A(n404), .Y(n397) );
NAND2X1 U406 ( .A(n405), .B(N668), .Y(n404) );
INVX2 U412 ( .A(n409), .Y(n405) );
NAND3X1 U413 ( .A(N660), .B(n411), .C(n412), .Y(n409) );
NOR2X1 U414 ( .A(N477), .B(N677), .Y(n412) );
OR2X2 U416 ( .A(n413), .B(n414), .Y(n1151) );
OAI22X1 U417 ( .A(n415), .B(n416), .C(n417), .D(n1457), .Y(n414) );
INVX2 U418 ( .A(N1822), .Y(n417) );
INVX2 U419 ( .A(N1684), .Y(n415) );
OAI21X1 U420 ( .A(n1503), .B(n419), .C(n420), .Y(n413) );
AOI22X1 U421 ( .A(n1462), .B(n421), .C(PC[9]), .D(n422), .Y(n420) );
OR2X2 U422 ( .A(n423), .B(n424), .Y(n1150) );
OAI22X1 U423 ( .A(n425), .B(n416), .C(n426), .D(n1456), .Y(n424) );
INVX2 U424 ( .A(N1821), .Y(n426) );
INVX2 U425 ( .A(N1683), .Y(n425) );
OAI21X1 U426 ( .A(n1017), .B(n1468), .C(n427), .Y(n423) );
AOI22X1 U427 ( .A(BUSDAT[0]), .B(n1448), .C(PC[8]), .D(n1478),
.Y(n427) );
OR2X2 U428 ( .A(n428), .B(n429), .Y(n1149) );
OAI22X1 U429 ( .A(n190), .B(n1451), .C(n430), .D(n1457), .Y(n429) );
INVX2 U430 ( .A(N1820), .Y(n430) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 113
de Synopsys
INVX2 U431 (
OAI21X1 U432
AOI22X1 U433
OR2X2 U434 (
OAI22X1 U435
INVX2 U436 (
INVX2 U437 (
OAI21X1 U438
AOI22X1 U439
);
OR2X2 U440 (
OAI22X1 U441
INVX2 U442 (
INVX2 U443 (
OAI21X1 U444
AOI22X1 U445
OR2X2 U446 (
OAI22X1 U447
INVX2 U448 (
INVX2 U449 (
OAI21X1 U450
AOI22X1 U451
);
OR2X2 U452 (
OAI22X1 U453
INVX2 U454 (
INVX2 U455 (
OAI21X1 U456
AOI22X1 U457
OR2X2 U458 (
OAI22X1 U459
INVX2 U460 (
OAI21X1 U462
AOI22X1 U463
);
OR2X2 U464 (
OAI22X1 U465
INVX2 U466 (
OAI21X1 U468
AOI22X1 U469
OAI22X1 U471
INVX2 U472 (
OAI21X1 U474
AOI22X1 U475
.Y(n460) );
OR2X2 U476 (
OAI22X1 U477
INVX2 U478 (
INVX2 U479 (
OAI21X1 U480
AOI22X1 U481
.Y(n465) );
OR2X2 U482 (
OAI22X1 U483
INVX2 U484 (
INVX2 U485 (
OAI21X1 U486
.A(N1682), .Y(n190) );
( .A(n1000), .B(n419), .C(n431), .Y(n428) );
( .A(TB[7]), .B(n421), .C(PC[7]), .D(n422), .Y(n431) );
.A(n432), .B(n433), .Y(n1148) );
( .A(n203), .B(n1451), .C(n434), .D(n1457), .Y(n433) );
.A(N1819), .Y(n434) );
.A(N1681), .Y(n203) );
( .A(n1002), .B(n1468), .C(n435), .Y(n432) );
( .A(TB[6]), .B(n1448), .C(PC[6]), .D(n1478), .Y(n435)
.A(n436), .B(n437), .Y(n1147) );
( .A(n211), .B(n416), .C(n438), .D(n1456), .Y(n437) );
.A(N1818), .Y(n438) );
.A(N1680), .Y(n211) );
( .A(n1003), .B(n419), .C(n439), .Y(n436) );
( .A(TB[5]), .B(n421), .C(PC[5]), .D(n422), .Y(n439) );
.A(n440), .B(n441), .Y(n1146) );
( .A(n219), .B(n416), .C(n442), .D(n1456), .Y(n441) );
.A(N1817), .Y(n442) );
.A(N1679), .Y(n219) );
( .A(n1004), .B(n1468), .C(n443), .Y(n440) );
( .A(TB[4]), .B(n1448), .C(PC[4]), .D(n1478), .Y(n443)
.A(n444), .B(n445), .Y(n1145) );
( .A(n227), .B(n1451), .C(n446), .D(n1457), .Y(n445) );
.A(N1816), .Y(n446) );
.A(N1678), .Y(n227) );
( .A(n1005), .B(n419), .C(n447), .Y(n444) );
( .A(TB[3]), .B(n421), .C(PC[3]), .D(n422), .Y(n447) );
.A(n448), .B(n449), .Y(n1144) );
( .A(n1291), .B(n416), .C(n450), .D(n1456), .Y(n449) );
.A(N1815), .Y(n450) );
( .A(n1006), .B(n1468), .C(n451), .Y(n448) );
( .A(TB[2]), .B(n1448), .C(PC[2]), .D(n1478), .Y(n451)
.A(n452), .B(n453), .Y(n1143) );
( .A(n1349), .B(n1451), .C(n454), .D(n1457), .Y(n453) );
.A(N1814), .Y(n454) );
( .A(n1007), .B(n419), .C(n455), .Y(n452) );
( .A(TB[1]), .B(n421), .C(PC[1]), .D(n422), .Y(n455) );
( .A(n1401), .B(n1451), .C(n459), .D(n1456), .Y(n457) );
.A(N1828), .Y(n459) );
( .A(n1009), .B(n1468), .C(n460), .Y(n456) );
( .A(BUSDAT[7]), .B(n1448), .C(PC[15]), .D(n1478),
.A(n461), .B(n462), .Y(n1156) );
( .A(n463), .B(n1451), .C(n464), .D(n1457), .Y(n462) );
.A(N1827), .Y(n464) );
.A(N1689), .Y(n463) );
( .A(n1011), .B(n419), .C(n465), .Y(n461) );
( .A(BUSDAT[6]), .B(n421), .C(PC[14]), .D(n422),
.A(n466), .B(n467), .Y(n1155) );
( .A(n468), .B(n416), .C(n469), .D(n1456), .Y(n467) );
.A(N1826), .Y(n469) );
.A(N1688), .Y(n468) );
( .A(n1012), .B(n1468), .C(n470), .Y(n466) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 114
de Synopsys
AOI22X1 U487 ( .A(n1443), .B(n1448), .C(PC[13]), .D(n1478), .Y(n470)
);
OR2X2 U488 ( .A(n471), .B(n472), .Y(n1154) );
OAI22X1 U489 ( .A(n473), .B(n416), .C(n474), .D(n1457), .Y(n472) );
INVX2 U490 ( .A(N1825), .Y(n474) );
INVX2 U491 ( .A(N1687), .Y(n473) );
OAI21X1 U492 ( .A(n1013), .B(n419), .C(n475), .Y(n471) );
AOI22X1 U493 ( .A(BUSDAT[4]), .B(n421), .C(PC[12]), .D(n422),
.Y(n475) );
OR2X2 U494 ( .A(n476), .B(n477), .Y(n1153) );
OAI22X1 U495 ( .A(n478), .B(n1451), .C(n479), .D(n1456), .Y(n477) );
INVX2 U496 ( .A(N1824), .Y(n479) );
INVX2 U497 ( .A(N1686), .Y(n478) );
OAI21X1 U498 ( .A(n1501), .B(n1468), .C(n480), .Y(n476) );
AOI22X1 U499 ( .A(BUSDAT[3]), .B(n1448), .C(PC[11]), .D(n1478),
.Y(n480) );
OR2X2 U500 ( .A(n481), .B(n482), .Y(n1152) );
OAI22X1 U501 ( .A(n483), .B(n416), .C(n484), .D(n1457), .Y(n482) );
INVX2 U502 ( .A(N1823), .Y(n484) );
INVX2 U503 ( .A(N1685), .Y(n483) );
OAI21X1 U504 ( .A(n1530), .B(n419), .C(n485), .Y(n481) );
AOI22X1 U505 ( .A(n1446), .B(n421), .C(PC[10]), .D(n422), .Y(n485) );
OR2X2 U506 ( .A(n486), .B(n487), .Y(n1142) );
NAND2X1 U510 ( .A(n488), .B(BUSDAT[7]), .Y(n416) );
INVX2 U511 ( .A(n489), .Y(n488) );
NAND3X1 U512 ( .A(N1937), .B(n490), .C(n326), .Y(n489) );
INVX2 U513 ( .A(n491), .Y(n326) );
NAND3X1 U514 ( .A(n492), .B(N638), .C(N537), .Y(n491) );
NAND3X1 U515 ( .A(n493), .B(n494), .C(n495), .Y(n492) );
NOR2X1 U516 ( .A(n496), .B(n497), .Y(n495) );
OAI22X1 U517 ( .A(n996), .B(n498), .C(S[3]), .D(N129), .Y(n497) );
INVX2 U519 ( .A(n1276), .Y(n498) );
OAI22X1 U520 ( .A(S[5]), .B(N128), .C(S[1]), .D(N127), .Y(n496) );
AOI22X1 U523 ( .A(n559), .B(n999), .C(n1265), .D(S[0]), .Y(n494) );
AOI22X1 U524 ( .A(n557), .B(S[1]), .C(N618), .D(S[5]), .Y(n493) );
OAI21X1 U526 ( .A(n1008), .B(n1468), .C(n502), .Y(n486) );
AOI22X1 U527 ( .A(TB[0]), .B(n1448), .C(PC[0]), .D(n1478), .Y(n502)
);
OAI21X1 U528 ( .A(n503), .B(n504), .C(N1937), .Y(n422) );
OAI21X1 U529 ( .A(n505), .B(n506), .C(n507), .Y(n421) );
NAND3X1 U530 ( .A(n508), .B(N1937), .C(n504), .Y(n507) );
INVX2 U532 ( .A(N638), .Y(n503) );
INVX2 U533 ( .A(n508), .Y(n505) );
NAND3X1 U534 ( .A(N672), .B(N686), .C(n511), .Y(n508) );
NOR2X1 U535 ( .A(N655), .B(N651), .Y(n511) );
OAI21X1 U538 ( .A(n512), .B(n513), .C(N1937), .Y(n419) );
OAI21X1 U539 ( .A(N638), .B(N646), .C(n514), .Y(n513) );
NAND3X1 U540 ( .A(n340), .B(n490), .C(N537), .Y(n514) );
INVX2 U541 ( .A(N1098), .Y(n490) );
NAND3X1 U542 ( .A(n515), .B(n516), .C(n517), .Y(n340) );
NOR2X1 U543 ( .A(n518), .B(n519), .Y(n517) );
OAI22X1 U544 ( .A(S[5]), .B(N126), .C(S[1]), .D(N125), .Y(n519) );
OAI21X1 U547 ( .A(n999), .B(N123), .C(n523), .Y(n518) );
AOI21X1 U548 ( .A(n1265), .B(n999), .C(N637), .Y(n523) );
AOI22X1 U550 ( .A(N619), .B(S[1]), .C(N620), .D(S[5]), .Y(n516) );
AOI22X1 U551 ( .A(N621), .B(S[3]), .C(n1276), .D(n996), .Y(n515) );
NAND2X1 U553 ( .A(N1098), .B(N537), .Y(n504) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 115
de Synopsys
NAND2X1 U554 ( .A(N44), .B(n1262), .Y(N98) );
NAND2X1 U555 ( .A(n1262), .B(n524), .Y(N97) );
NAND3X1 U558 ( .A(n1295), .B(n1367), .C(N504), .Y(N96) );
NAND3X1 U559 ( .A(n1369), .B(n530), .C(N503), .Y(N95) );
NOR2X1 U560 ( .A(n1367), .B(RI[1]), .Y(n530) );
NAND3X1 U562 ( .A(n1295), .B(n1465), .C(N513), .Y(N93) );
NAND3X1 U563 ( .A(n1470), .B(n534), .C(n535), .Y(N92) );
NAND2X1 U564 ( .A(n1259), .B(n1241), .Y(N91) );
NAND2X1 U565 ( .A(n1241), .B(n1441), .Y(N90) );
NAND3X1 U566 ( .A(n1486), .B(n534), .C(n1241), .Y(N89) );
NAND3X1 U567 ( .A(n1470), .B(n534), .C(n1241), .Y(N88) );
NAND2X1 U570 ( .A(n535), .B(n1259), .Y(N87) );
NAND3X1 U571 ( .A(n1486), .B(n534), .C(n535), .Y(N86) );
NAND2X1 U574 ( .A(n540), .B(N44), .Y(n541) );
INVX2 U575 ( .A(n542), .Y(n540) );
NAND3X1 U576 ( .A(n527), .B(n531), .C(n1430), .Y(n542) );
NAND3X1 U577 ( .A(n1430), .B(n1470), .C(n544), .Y(N84) );
NAND3X1 U578 ( .A(n1430), .B(n1470), .C(N2190), .Y(N83) );
NAND2X1 U581 ( .A(n1492), .B(n1251), .Y(N81) );
NAND2X1 U583 ( .A(n1492), .B(n1277), .Y(N80) );
NAND2X1 U585 ( .A(n1492), .B(n1266), .Y(N79) );
NAND2X1 U587 ( .A(n1492), .B(n1267), .Y(N78) );
NAND2X1 U589 ( .A(n1369), .B(n1255), .Y(N77) );
NAND2X1 U593 ( .A(n1369), .B(N621), .Y(N75) );
NAND2X1 U595 ( .A(n1369), .B(N620), .Y(N74) );
NAND2X1 U597 ( .A(n1369), .B(N619), .Y(N73) );
INVX2 U602 ( .A(N125), .Y(n557) );
NAND2X1 U603 ( .A(n1492), .B(n1265), .Y(N70) );
NAND2X1 U605 ( .A(n529), .B(n559), .Y(N69) );
INVX2 U606 ( .A(N123), .Y(n559) );
NAND2X1 U607 ( .A(n1425), .B(n1252), .Y(N68) );
NAND3X1 U608 ( .A(n1252), .B(n561), .C(n1420), .Y(N67) );
NOR2X1 U609 ( .A(n563), .B(n564), .Y(N66) );
NAND2X1 U610 ( .A(n1248), .B(n1430), .Y(n564) );
NAND3X1 U612 ( .A(n1248), .B(n561), .C(n1420), .Y(N64) );
NAND3X1 U614 ( .A(n527), .B(n524), .C(n1425), .Y(N60) );
NAND2X1 U617 ( .A(n158), .B(n1250), .Y(N672) );
NAND2X1 U618 ( .A(n158), .B(n1245), .Y(N666) );
NAND2X1 U619 ( .A(n1420), .B(n544), .Y(N55) );
NAND2X1 U624 ( .A(n531), .B(n574), .Y(n573) );
INVX2 U625 ( .A(n575), .Y(N503) );
NAND3X1 U626 ( .A(N32), .B(RI[6]), .C(n576), .Y(n575) );
NOR2X1 U627 ( .A(n1366), .B(n1460), .Y(n576) );
NOR2X1 U628 ( .A(n577), .B(n1367), .Y(N498) );
NOR2X1 U629 ( .A(n563), .B(n578), .Y(N497) );
NAND2X1 U630 ( .A(n1368), .B(n574), .Y(n578) );
NAND2X1 U632 ( .A(n1367), .B(RI[1]), .Y(n580) );
NAND2X1 U633 ( .A(RI[6]), .B(n574), .Y(n579) );
NOR2X1 U634 ( .A(n581), .B(n582), .Y(N495) );
NAND2X1 U635 ( .A(n1367), .B(RI[1]), .Y(n582) );
NAND3X1 U636 ( .A(n1430), .B(n1465), .C(N513), .Y(N49) );
INVX2 U637 ( .A(n583), .Y(N513) );
NAND3X1 U638 ( .A(n1486), .B(N44), .C(n584), .Y(n583) );
NOR2X1 U639 ( .A(n1424), .B(n531), .Y(n584) );
NAND2X1 U641 ( .A(n1247), .B(n587), .Y(N585) );
NAND3X1 U642 ( .A(EstPresente[4]), .B(n338), .C(n587), .Y(N684) );
NAND2X1 U643 ( .A(n1257), .B(n589), .Y(N581) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 116
de Synopsys
NAND3X1 U644 ( .A(n1242), .B(n1372), .C(n589), .Y(N682) );
NAND2X1 U645 ( .A(n1247), .B(n589), .Y(N680) );
NAND3X1 U646 ( .A(EstPresente[4]), .B(n338), .C(n589), .Y(N678) );
NAND2X1 U647 ( .A(n1243), .B(n1257), .Y(N676) );
NAND2X1 U648 ( .A(n1257), .B(n1240), .Y(N566) );
NAND2X1 U649 ( .A(n1242), .B(n1245), .Y(N670) );
NAND2X1 U650 ( .A(n1247), .B(n1240), .Y(N668) );
NAND3X1 U652 ( .A(n312), .B(n1372), .C(n587), .Y(N662) );
NAND2X1 U653 ( .A(n587), .B(n1246), .Y(N660) );
NAND2X1 U654 ( .A(n589), .B(n1246), .Y(N546) );
NAND3X1 U655 ( .A(n338), .B(n337), .C(n589), .Y(N652) );
NOR2X1 U657 ( .A(n595), .B(n596), .Y(N421) );
NAND2X1 U658 ( .A(n1368), .B(n1470), .Y(n596) );
INVX2 U659 ( .A(LE_PB), .Y(N390) );
NAND3X1 U663 ( .A(N44), .B(n527), .C(n1432), .Y(N34) );
NAND3X1 U666 ( .A(n600), .B(N682), .C(n602), .Y(N1940) );
NOR2X1 U667 ( .A(N576), .B(N673), .Y(n602) );
NOR2X1 U668 ( .A(N687), .B(N685), .Y(n600) );
NAND3X1 U669 ( .A(N654), .B(N670), .C(n1307), .Y(N1939) );
NAND2X1 U673 ( .A(n606), .B(N654), .Y(N1935) );
INVX2 U675 ( .A(n607), .Y(n606) );
NAND3X1 U676 ( .A(n608), .B(n44), .C(n609), .Y(n607) );
NOR2X1 U677 ( .A(N651), .B(N643), .Y(n608) );
NAND3X1 U678 ( .A(N676), .B(N678), .C(n612), .Y(N1887) );
NAND3X1 U681 ( .A(N660), .B(N662), .C(n614), .Y(N1886) );
INVX2 U682 ( .A(n615), .Y(n614) );
NAND2X1 U684 ( .A(n349), .B(N682), .Y(N1868) );
INVX2 U685 ( .A(n616), .Y(n349) );
NAND3X1 U686 ( .A(n18), .B(N662), .C(n617), .Y(n616) );
NOR2X1 U687 ( .A(N576), .B(N671), .Y(n617) );
INVX2 U688 ( .A(N531), .Y(n18) );
NAND3X1 U691 ( .A(n621), .B(N546), .C(n623), .Y(N1809) );
NOR2X1 U692 ( .A(N453), .B(n1272), .Y(n623) );
NOR2X1 U694 ( .A(N443), .B(n1274), .Y(n621) );
NAND3X1 U695 ( .A(N566), .B(N570), .C(n1258), .Y(N1803) );
NAND3X1 U703 ( .A(n631), .B(N680), .C(n633), .Y(N1796) );
NOR2X1 U704 ( .A(N671), .B(N461), .Y(n633) );
NOR2X1 U705 ( .A(N485), .B(N683), .Y(n631) );
INVX2 U707 ( .A(n635), .Y(n630) );
NAND3X1 U708 ( .A(N660), .B(N662), .C(N648), .Y(n635) );
NOR2X1 U712 ( .A(N445), .B(N429), .Y(n634) );
NAND3X1 U713 ( .A(n1307), .B(n44), .C(n609), .Y(N1669) );
INVX2 U714 ( .A(N647), .Y(n44) );
INVX2 U721 ( .A(n640), .Y(n619) );
NAND3X1 U722 ( .A(N680), .B(N682), .C(n642), .Y(n640) );
NOR2X1 U723 ( .A(N576), .B(N677), .Y(n642) );
NAND3X1 U726 ( .A(n643), .B(N670), .C(n645), .Y(N1665) );
NOR2X1 U727 ( .A(N461), .B(n1254), .Y(n645) );
NOR2X1 U729 ( .A(N469), .B(N465), .Y(n643) );
NAND3X1 U730 ( .A(n646), .B(n647), .C(n648), .Y(N1654) );
NOR2X1 U731 ( .A(N1525), .B(n649), .Y(n648) );
NAND3X1 U732 ( .A(n650), .B(n651), .C(n652), .Y(n649) );
INVX2 U733 ( .A(n653), .Y(n652) );
NOR2X1 U734 ( .A(N651), .B(n654), .Y(n651) );
NOR2X1 U736 ( .A(N537), .B(N533), .Y(n650) );
NOR2X1 U737 ( .A(N531), .B(N640), .Y(n647) );
INVX2 U738 ( .A(n609), .Y(N640) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 117
de Synopsys
NOR2X1 U739 ( .A(n655), .B(n656), .Y(n646) );
NOR2X1 U741 ( .A(N673), .B(N671), .Y(n658) );
NAND3X1 U743 ( .A(n659), .B(N581), .C(n661), .Y(n655) );
NOR2X1 U744 ( .A(N576), .B(N469), .Y(n661) );
NOR2X1 U745 ( .A(N477), .B(N683), .Y(n659) );
INVX2 U749 ( .A(n310), .Y(n354) );
NAND2X1 U750 ( .A(n1295), .B(n1470), .Y(n310) );
NAND3X1 U756 ( .A(n529), .B(N36), .C(n1441), .Y(n665) );
NAND3X1 U759 ( .A(n666), .B(N668), .C(n668), .Y(N1525) );
NOR2X1 U760 ( .A(n1254), .B(N453), .Y(n668) );
NOR2X1 U762 ( .A(N677), .B(N465), .Y(n666) );
NOR2X1 U765 ( .A(N445), .B(n1274), .Y(n670) );
NAND3X1 U767 ( .A(n671), .B(n1369), .C(N512), .Y(N150) );
INVX2 U768 ( .A(n672), .Y(N512) );
NAND3X1 U769 ( .A(n1486), .B(n1366), .C(n673), .Y(n672) );
NOR2X1 U770 ( .A(n1460), .B(n531), .Y(n673) );
NOR2X1 U771 ( .A(N38), .B(n1367), .Y(n671) );
INVX2 U772 ( .A(n674), .Y(N1434) );
OAI21X1 U773 ( .A(n675), .B(n676), .C(RPS), .Y(n674) );
OAI21X1 U774 ( .A(n1484), .B(n678), .C(n679), .Y(n676) );
AOI21X1 U775 ( .A(n680), .B(n158), .C(N1668), .Y(n679) );
INVX2 U776 ( .A(n681), .Y(n158) );
NOR2X1 U777 ( .A(n1375), .B(n314), .Y(n680) );
AOI21X1 U779 ( .A(n682), .B(n683), .C(N1429), .Y(N1433) );
AOI21X1 U780 ( .A(n1375), .B(n684), .C(n685), .Y(n683) );
INVX2 U781 ( .A(n686), .Y(n685) );
AOI21X1 U782 ( .A(N1659), .B(N655), .C(N1812), .Y(n686) );
OAI21X1 U783 ( .A(n1484), .B(n687), .C(n688), .Y(n684) );
INVX2 U785 ( .A(N499), .Y(n687) );
NOR2X1 U786 ( .A(n689), .B(n690), .Y(n682) );
INVX2 U788 ( .A(n691), .Y(N1432) );
OAI21X1 U789 ( .A(n675), .B(n692), .C(RPS), .Y(n691) );
NAND3X1 U790 ( .A(n693), .B(n694), .C(n695), .Y(n692) );
AOI22X1 U791 ( .A(N514), .B(N647), .C(N1537), .D(N651), .Y(n695) );
NAND3X1 U792 ( .A(N416), .B(n1377), .C(N655), .Y(n694) );
AOI21X1 U794 ( .A(n696), .B(n697), .C(N1804), .Y(n693) );
OAI22X1 U795 ( .A(n1464), .B(EstPresente[1]), .C(n1450), .D(n1242),
.Y(n697)
);
NOR2X1 U796 ( .A(n698), .B(n157), .Y(n696) );
NAND2X1 U797 ( .A(n1373), .B(WAIT), .Y(n698) );
OR2X2 U798 ( .A(n700), .B(n701), .Y(n675) );
OAI22X1 U799 ( .A(n1376), .B(N686), .C(N674), .D(SDMA), .Y(n701) );
OAI21X1 U800 ( .A(n1484), .B(n702), .C(n703), .Y(n700) );
NAND2X1 U801 ( .A(N1534), .B(n42), .Y(n703) );
OAI21X1 U802 ( .A(n1328), .B(N499), .C(n1377), .Y(n702) );
OAI21X1 U804 ( .A(n705), .B(n706), .C(RPS), .Y(n704) );
NAND2X1 U805 ( .A(n707), .B(n708), .Y(n706) );
INVX2 U806 ( .A(n689), .Y(n708) );
OAI21X1 U807 ( .A(n1375), .B(N686), .C(n709), .Y(n689) );
NAND3X1 U808 ( .A(n1376), .B(N502), .C(N537), .Y(n709) );
NAND3X1 U809 ( .A(n1242), .B(n1373), .C(n587), .Y(N686) );
AOI22X1 U810 ( .A(N1535), .B(N651), .C(N490), .D(n710), .Y(n707) );
NAND2X1 U812 ( .A(n312), .B(n1250), .Y(N650) );
OAI21X1 U813 ( .A(N654), .B(n571), .C(n711), .Y(n705) );
AOI21X1 U814 ( .A(N1542), .B(N643), .C(n712), .Y(n711) );
OAI21X1 U815 ( .A(n713), .B(n714), .C(n715), .Y(n712) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 118
de Synopsys
INVX2 U816 ( .A(N1797), .Y(n715) );
NAND3X1 U817 ( .A(n1372), .B(WAIT), .C(n342), .Y(n714) );
NAND3X1 U819 ( .A(n312), .B(n1373), .C(n589), .Y(N654) );
OAI21X1 U820 ( .A(n716), .B(n717), .C(n718), .Y(N1430) );
OAI21X1 U821 ( .A(n719), .B(n720), .C(RPS), .Y(n718) );
NAND2X1 U822 ( .A(n721), .B(n358), .Y(n720) );
AOI21X1 U823 ( .A(n722), .B(n95), .C(N1786), .Y(n721) );
NOR2X1 U824 ( .A(n1454), .B(WAIT), .Y(n722) );
NOR2X1 U826 ( .A(N489), .B(N641), .Y(n719) );
NAND3X1 U827 ( .A(n1372), .B(RPS), .C(n1376), .Y(n717) );
INVX2 U829 ( .A(n332), .Y(n716) );
NAND3X1 U830 ( .A(n347), .B(n142), .C(n681), .Y(n332) );
NAND2X1 U831 ( .A(EstPresente[2]), .B(n337), .Y(n347) );
INVX2 U832 ( .A(N1424), .Y(N1425) );
INVX2 U833 ( .A(N1421), .Y(N1422) );
INVX2 U834 ( .A(N1418), .Y(N1419) );
INVX2 U835 ( .A(N1415), .Y(N1416) );
INVX2 U836 ( .A(N1412), .Y(N1413) );
INVX2 U837 ( .A(N1409), .Y(N1410) );
INVX2 U838 ( .A(N1406), .Y(N1407) );
INVX2 U839 ( .A(N1403), .Y(N1404) );
INVX2 U840 ( .A(N1400), .Y(N1401) );
INVX2 U841 ( .A(N1397), .Y(N1398) );
INVX2 U842 ( .A(N1394), .Y(N1395) );
INVX2 U843 ( .A(N1391), .Y(N1392) );
INVX2 U844 ( .A(N1388), .Y(N1389) );
INVX2 U845 ( .A(N1385), .Y(N1386) );
INVX2 U846 ( .A(N1382), .Y(N1383) );
INVX2 U847 ( .A(N1379), .Y(N1380) );
NAND3X1 U848 ( .A(n1430), .B(n527), .C(N504), .Y(N137) );
INVX2 U849 ( .A(n577), .Y(N504) );
NAND2X1 U850 ( .A(n1428), .B(n524), .Y(n577) );
NAND3X1 U858 ( .A(N44), .B(n527), .C(n561), .Y(N832) );
INVX2 U861 ( .A(N829), .Y(n544) );
NAND3X1 U862 ( .A(n527), .B(n524), .C(n561), .Y(N829) );
INVX2 U863 ( .A(n595), .Y(n561) );
NAND2X1 U864 ( .A(N36), .B(RI[6]), .Y(n595) );
INVX2 U865 ( .A(n581), .Y(n725) );
NAND2X1 U866 ( .A(n574), .B(n1470), .Y(n581) );
INVX2 U869 ( .A(n729), .Y(n728) );
NAND3X1 U870 ( .A(n730), .B(n527), .C(n1259), .Y(n729) );
NOR2X1 U874 ( .A(n1460), .B(N36), .Y(n730) );
NAND2X1 U876 ( .A(n1264), .B(n727), .Y(N129) );
NAND2X1 U877 ( .A(n1273), .B(n727), .Y(N128) );
INVX2 U878 ( .A(N830), .Y(n727) );
NAND3X1 U879 ( .A(n531), .B(n534), .C(n1252), .Y(N830) );
NAND2X1 U880 ( .A(n1273), .B(n663), .Y(N127) );
NAND2X1 U881 ( .A(n1273), .B(n726), .Y(N126) );
NAND2X1 U882 ( .A(n1273), .B(n567), .Y(N125) );
INVX2 U886 ( .A(N834), .Y(n567) );
NAND3X1 U887 ( .A(n1465), .B(n531), .C(n1248), .Y(N834) );
NAND2X1 U888 ( .A(n1264), .B(n663), .Y(N123) );
INVX2 U889 ( .A(N835), .Y(n663) );
NAND3X1 U890 ( .A(n1465), .B(n531), .C(n1252), .Y(N835) );
INVX2 U893 ( .A(N44), .Y(n524) );
INVX2 U898 ( .A(N833), .Y(n726) );
NAND3X1 U899 ( .A(n531), .B(n534), .C(n1248), .Y(N833) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 119
de Synopsys
NOR2X1 U911 ( .A(N1655), .B(n1358), .Y(n1019) );
NAND2X1 U913 ( .A(n150), .B(n742), .Y(n1080) );
OAI21X1 U914 ( .A(n743), .B(n744), .C(n745), .Y(n742) );
NOR2X1 U915 ( .A(N1888), .B(N1428), .Y(n745) );
INVX2 U916 ( .A(N1427), .Y(N1428) );
OAI21X1 U917 ( .A(n157), .B(n713), .C(n746), .Y(n744) );
AOI21X1 U918 ( .A(n747), .B(n748), .C(n334), .Y(n746) );
INVX2 U919 ( .A(n749), .Y(n748) );
NOR2X1 U920 ( .A(N2202), .B(n1464), .Y(n747) );
NAND3X1 U922 ( .A(n750), .B(n751), .C(n752), .Y(n1081) );
OAI21X1 U923 ( .A(n753), .B(n754), .C(N1674), .Y(n752) );
NAND3X1 U924 ( .A(n358), .B(n755), .C(n150), .Y(n754) );
NAND2X1 U925 ( .A(n1320), .B(n42), .Y(n150) );
INVX2 U926 ( .A(N1888), .Y(n755) );
NAND2X1 U927 ( .A(n710), .B(SDMA), .Y(n358) );
INVX2 U929 ( .A(N674), .Y(n710) );
NAND2X1 U930 ( .A(n1242), .B(n1250), .Y(N674) );
NAND3X1 U931 ( .A(N1674), .B(N2202), .C(n756), .Y(n751) );
OAI21X1 U932 ( .A(n757), .B(n758), .C(n759), .Y(n750) );
NOR2X1 U933 ( .A(N1888), .B(n1053), .Y(n759) );
INVX2 U934 ( .A(N1426), .Y(n1053) );
NAND2X1 U935 ( .A(n760), .B(n761), .Y(n758) );
INVX2 U936 ( .A(n743), .Y(n761) );
NAND3X1 U937 ( .A(n762), .B(n681), .C(n763), .Y(n743) );
AOI22X1 U938 ( .A(EstPresente[3]), .B(n764), .C(n1464), .D(N490),
.Y(n763)
);
INVX2 U939 ( .A(N1314), .Y(n764) );
NAND2X1 U940 ( .A(EstPresente[4]), .B(n84), .Y(n681) );
AOI21X1 U941 ( .A(n1464), .B(n314), .C(n95), .Y(n762) );
INVX2 U942 ( .A(n765), .Y(n95) );
AOI22X1 U943 ( .A(n1450), .B(n334), .C(n1364), .D(n1370), .Y(n760) );
OAI21X1 U944 ( .A(n1320), .B(n766), .C(n767), .Y(n757) );
AOI22X1 U945 ( .A(n768), .B(n769), .C(n312), .D(n1373), .Y(n767) );
OAI21X1 U946 ( .A(n1372), .B(n1454), .C(n348), .Y(n769) );
NOR2X1 U947 ( .A(N2202), .B(n749), .Y(n768) );
OAI21X1 U950 ( .A(n771), .B(n772), .C(n773), .Y(n1071) );
AOI22X1 U951 ( .A(n774), .B(n775), .C(N1553), .D(N640), .Y(n773) );
NAND3X1 U952 ( .A(N2202), .B(n142), .C(n777), .Y(n775) );
INVX2 U953 ( .A(n778), .Y(n777) );
OAI21X1 U957 ( .A(n615), .B(n779), .C(n780), .Y(n1084) );
NAND2X1 U959 ( .A(n612), .B(LE_PB), .Y(n779) );
INVX2 U960 ( .A(n781), .Y(n612) );
NAND2X1 U961 ( .A(N682), .B(N680), .Y(n781) );
NAND3X1 U964 ( .A(n411), .B(N666), .C(n609), .Y(n615) );
INVX2 U966 ( .A(n1254), .Y(n411) );
OAI21X1 U967 ( .A(N391), .B(n784), .C(n785), .Y(n1141) );
NAND2X1 U968 ( .A(N1529), .B(n784), .Y(n785) );
NAND3X1 U969 ( .A(n786), .B(n787), .C(n609), .Y(n784) );
NAND3X1 U970 ( .A(n1240), .B(n337), .C(n338), .Y(n609) );
NOR2X1 U971 ( .A(N576), .B(N677), .Y(n787) );
NOR2X1 U972 ( .A(N455), .B(N453), .Y(n786) );
INVX2 U973 ( .A(LE_PA), .Y(N391) );
OAI21X1 U974 ( .A(n788), .B(n789), .C(n790), .Y(n1083) );
OAI21X1 U977 ( .A(n778), .B(n793), .C(n794), .Y(n792) );
NOR2X1 U978 ( .A(N388), .B(N640), .Y(n794) );
INVX2 U979 ( .A(LE_A), .Y(N388) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 120
de Synopsys
OAI21X1 U980 ( .A(N1314), .B(n142), .C(n749), .Y(n793) );
NAND2X1 U981 ( .A(n142), .B(N77), .Y(n749) );
NAND3X1 U982 ( .A(n766), .B(n765), .C(n796), .Y(n778) );
INVX2 U983 ( .A(n797), .Y(n796) );
NAND2X1 U984 ( .A(n1372), .B(n157), .Y(n765) );
INVX2 U986 ( .A(N1541), .Y(n789) );
INVX2 U987 ( .A(n753), .Y(n788) );
OAI21X1 U988 ( .A(n771), .B(N77), .C(n798), .Y(n753) );
INVX2 U992 ( .A(n800), .Y(n589) );
INVX2 U994 ( .A(n756), .Y(n771) );
NAND2X1 U995 ( .A(N646), .B(N644), .Y(n756) );
NAND2X1 U996 ( .A(n1357), .B(N581), .Y(INTOK) );
OAI21X1 U1001 ( .A(n585), .B(n803), .C(N570), .Y(HALT) );
NAND2X1 U1002 ( .A(n1243), .B(n1247), .Y(N570) );
INVX2 U1005 ( .A(N591), .Y(n803) );
NAND2X1 U1006 ( .A(n1257), .B(n587), .Y(n585) );
NOR2X1 U1012 ( .A(N1527), .B(CB), .Y(n1018) );
OAI21X1 U1015 ( .A(n1323), .B(n808), .C(n809), .Y(n1064) );
AOI22X1 U1016 ( .A(BUSPC[9]), .B(n1467), .C(n1476), .D(PC[9]),
.Y(n809) );
OAI21X1 U1018 ( .A(n1322), .B(n1489), .C(n812), .Y(n1063) );
AOI22X1 U1019 ( .A(BUSPC[8]), .B(n810), .C(n811), .D(PC[8]), .Y(n812)
);
OAI21X1 U1021 ( .A(n1324), .B(n808), .C(n813), .Y(n1062) );
AOI22X1 U1022 ( .A(BUSPC[7]), .B(n810), .C(n811), .D(PC[7]), .Y(n813)
);
OAI21X1 U1024 ( .A(n1338), .B(n1489), .C(n814), .Y(n1061) );
AOI22X1 U1025 ( .A(BUSPC[6]), .B(n810), .C(n811), .D(PC[6]), .Y(n814)
);
OAI21X1 U1027 ( .A(n1337), .B(n808), .C(n815), .Y(n1060) );
AOI22X1 U1028 ( .A(BUSPC[5]), .B(n810), .C(n811), .D(PC[5]), .Y(n815)
);
OAI21X1 U1030 ( .A(n1336), .B(n1489), .C(n816), .Y(n1059) );
AOI22X1 U1031 ( .A(BUSPC[4]), .B(n810), .C(n811), .D(PC[4]), .Y(n816)
);
OAI21X1 U1033 ( .A(n1335), .B(n808), .C(n817), .Y(n1058) );
AOI22X1 U1034 ( .A(BUSPC[3]), .B(n810), .C(n811), .D(PC[3]), .Y(n817)
);
OAI21X1 U1036 ( .A(n1350), .B(n1489), .C(n818), .Y(n1057) );
AOI22X1 U1037 ( .A(BUSPC[2]), .B(n810), .C(n811), .D(PC[2]), .Y(n818)
);
OAI21X1 U1039 ( .A(n1293), .B(n808), .C(n819), .Y(n1056) );
AOI22X1 U1040 ( .A(BUSPC[1]), .B(n1467), .C(n1476), .D(PC[1]),
.Y(n819) );
OAI21X1 U1042 ( .A(n1304), .B(n1489), .C(n820), .Y(n1070) );
AOI22X1 U1043 ( .A(BUSPC[15]), .B(n1467), .C(n1476), .D(PC[15]),
.Y(n820) );
OAI21X1 U1045 ( .A(n1305), .B(n808), .C(n821), .Y(n1069) );
AOI22X1 U1046 ( .A(BUSPC[14]), .B(n1467), .C(n1476), .D(PC[14]),
.Y(n821) );
OAI21X1 U1048 ( .A(n1315), .B(n1489), .C(n822), .Y(n1068) );
AOI22X1 U1049 ( .A(BUSPC[13]), .B(n1467), .C(n1476), .D(PC[13]),
.Y(n822) );
OAI21X1 U1051 ( .A(n1314), .B(n808), .C(n823), .Y(n1067) );
AOI22X1 U1052 ( .A(BUSPC[12]), .B(n1467), .C(n1476), .D(PC[12]),
.Y(n823) );
OAI21X1 U1054 ( .A(n1313), .B(n1489), .C(n824), .Y(n1066) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 121
de Synopsys
AOI22X1 U1055 ( .A(BUSPC[11]), .B(n1467), .C(n1476), .D(PC[11]),
.Y(n824) );
OAI21X1 U1057 ( .A(n1312), .B(n808), .C(n825), .Y(n1065) );
AOI22X1 U1058 ( .A(BUSPC[10]), .B(n810), .C(n811), .D(PC[10]),
.Y(n825) );
OAI21X1 U1060 ( .A(PC[0]), .B(n1489), .C(n826), .Y(n1055) );
AOI22X1 U1061 ( .A(BUSPC[0]), .B(n1467), .C(n1476), .D(PC[0]),
.Y(n826) );
INVX2 U1062 ( .A(n827), .Y(n811) );
NAND3X1 U1063 ( .A(N1978), .B(n828), .C(n42), .Y(n827) );
INVX2 U1064 ( .A(N641), .Y(n42) );
NAND2X1 U1065 ( .A(n1240), .B(n1246), .Y(N641) );
INVX2 U1066 ( .A(N1978), .Y(n810) );
OAI21X1 U1067 ( .A(N437), .B(n830), .C(N1978), .Y(n808) );
NAND2X1 U1068 ( .A(N644), .B(n828), .Y(n830) );
INVX2 U1069 ( .A(N592), .Y(n828) );
NAND2X1 U1070 ( .A(n1253), .B(n1240), .Y(N644) );
NAND2X1 U1076 ( .A(n1243), .B(n1246), .Y(N648) );
INVX2 U1079 ( .A(n766), .Y(n334) );
NAND2X1 U1080 ( .A(EstPresente[0]), .B(n84), .Y(n766) );
INVX2 U1082 ( .A(LE_A), .Y(n983) );
INVX2 U1083 ( .A(BUSPC[15]), .Y(n1009) );
INVX2 U1084 ( .A(BUSPC[14]), .Y(n1011) );
INVX2 U1085 ( .A(BUSPC[13]), .Y(n1012) );
INVX2 U1086 ( .A(BUSPC[12]), .Y(n1013) );
INVX2 U1090 ( .A(LE_PA), .Y(n1010) );
INVX2 U1091 ( .A(BUSPC[8]), .Y(n1017) );
INVX2 U1092 ( .A(BUSPC[7]), .Y(n1000) );
INVX2 U1093 ( .A(BUSPC[6]), .Y(n1002) );
INVX2 U1094 ( .A(BUSPC[5]), .Y(n1003) );
INVX2 U1095 ( .A(BUSPC[4]), .Y(n1004) );
INVX2 U1096 ( .A(BUSPC[3]), .Y(n1005) );
INVX2 U1097 ( .A(BUSPC[2]), .Y(n1006) );
INVX2 U1098 ( .A(BUSPC[1]), .Y(n1007) );
INVX2 U1101 ( .A(S[7]), .Y(n991) );
INVX2 U1102 ( .A(S[6]), .Y(n993) );
INVX2 U1103 ( .A(S[5]), .Y(n994) );
INVX2 U1104 ( .A(S[4]), .Y(n995) );
INVX2 U1105 ( .A(S[3]), .Y(n996) );
INVX2 U1106 ( .A(S[2]), .Y(n997) );
INVX2 U1107 ( .A(S[1]), .Y(n998) );
INVX2 U1108 ( .A(LE_S), .Y(n992) );
NAND3X1 U1109 ( .A(n834), .B(n835), .C(n836), .Y(n1165) );
NOR2X1 U1110 ( .A(n837), .B(n838), .Y(n836) );
OAI21X1 U1111 ( .A(n839), .B(\r263/B_not[7] ), .C(n840), .Y(n838) );
AOI22X1 U1112 ( .A(N1749), .B(n841), .C(n842), .D(\A[7] ), .Y(n840)
);
INVX2 U1113 ( .A(n1493), .Y(\r263/B_not[7] ) );
OAI21X1 U1114 ( .A(n843), .B(n1343), .C(n845), .Y(n837) );
AOI22X1 U1115 ( .A(N1758), .B(n846), .C(N599), .D(n847), .Y(n845) );
AOI21X1 U1117 ( .A(N1723), .B(n848), .C(n849), .Y(n835) );
OAI21X1 U1118 ( .A(n366), .B(n850), .C(n851), .Y(n849) );
NAND2X1 U1119 ( .A(N1732), .B(n1310), .Y(n851) );
INVX2 U1120 ( .A(\P[7] ), .Y(n366) );
AOI21X1 U1121 ( .A(n853), .B(n982), .C(n854), .Y(n834) );
OAI22X1 U1122 ( .A(n984), .B(n855), .C(n999), .D(n856), .Y(n854) );
NAND3X1 U1123 ( .A(n857), .B(n858), .C(n859), .Y(n1164) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 122
de Synopsys
NOR2X1 U1124 ( .A(n860), .B(n861), .Y(n859) );
OAI21X1 U1125 ( .A(n839), .B(\r263/B_not[6] ), .C(n862), .Y(n861) );
AOI22X1 U1126 ( .A(N1748), .B(n841), .C(n842), .D(\A[6] ), .Y(n862)
);
INVX2 U1127 ( .A(n1442), .Y(\r263/B_not[6] ) );
OAI21X1 U1128 ( .A(n843), .B(n1348), .C(n864), .Y(n860) );
AOI22X1 U1129 ( .A(N1757), .B(n846), .C(N600), .D(n847), .Y(n864) );
AOI21X1 U1131 ( .A(N1722), .B(n848), .C(n865), .Y(n858) );
OAI21X1 U1132 ( .A(n1506), .B(n850), .C(n866), .Y(n865) );
NAND2X1 U1133 ( .A(N1731), .B(n1310), .Y(n866) );
AOI21X1 U1135 ( .A(n853), .B(n984), .C(n867), .Y(n857) );
OAI22X1 U1136 ( .A(n985), .B(n855), .C(n982), .D(n856), .Y(n867) );
INVX2 U1137 ( .A(\A[7] ), .Y(n982) );
NAND3X1 U1138 ( .A(n868), .B(n869), .C(n870), .Y(n1163) );
NOR2X1 U1139 ( .A(n871), .B(n872), .Y(n870) );
OAI21X1 U1140 ( .A(n839), .B(\r263/B_not[5] ), .C(n873), .Y(n872) );
AOI22X1 U1141 ( .A(N1747), .B(n841), .C(n842), .D(\A[5] ), .Y(n873)
);
INVX2 U1142 ( .A(n1443), .Y(\r263/B_not[5] ) );
OAI21X1 U1143 ( .A(n843), .B(n1342), .C(n875), .Y(n871) );
AOI22X1 U1144 ( .A(N1756), .B(n846), .C(N601), .D(n847), .Y(n875) );
AOI21X1 U1146 ( .A(N1721), .B(n848), .C(n876), .Y(n869) );
OAI21X1 U1147 ( .A(n375), .B(n850), .C(n877), .Y(n876) );
NAND2X1 U1148 ( .A(N1730), .B(n1310), .Y(n877) );
INVX2 U1149 ( .A(\P[5] ), .Y(n375) );
AOI21X1 U1150 ( .A(n853), .B(n985), .C(n878), .Y(n868) );
OAI22X1 U1151 ( .A(n986), .B(n855), .C(n984), .D(n856), .Y(n878) );
INVX2 U1152 ( .A(\A[6] ), .Y(n984) );
NAND3X1 U1153 ( .A(n879), .B(n880), .C(n881), .Y(n1162) );
NOR2X1 U1154 ( .A(n882), .B(n883), .Y(n881) );
OAI21X1 U1155 ( .A(n839), .B(\r263/B_not[4] ), .C(n884), .Y(n883) );
AOI22X1 U1156 ( .A(N1746), .B(n841), .C(n842), .D(\A[4] ), .Y(n884)
);
INVX2 U1157 ( .A(n1482), .Y(\r263/B_not[4] ) );
OAI21X1 U1158 ( .A(n843), .B(n1347), .C(n886), .Y(n882) );
AOI22X1 U1159 ( .A(N1755), .B(n846), .C(N602), .D(n847), .Y(n886) );
AOI21X1 U1161 ( .A(N1720), .B(n848), .C(n887), .Y(n880) );
OAI21X1 U1162 ( .A(n379), .B(n850), .C(n888), .Y(n887) );
NAND2X1 U1163 ( .A(N1729), .B(n1310), .Y(n888) );
INVX2 U1164 ( .A(\P[4] ), .Y(n379) );
AOI21X1 U1165 ( .A(n853), .B(n986), .C(n889), .Y(n879) );
OAI22X1 U1166 ( .A(n987), .B(n855), .C(n985), .D(n856), .Y(n889) );
INVX2 U1167 ( .A(\A[5] ), .Y(n985) );
NAND3X1 U1168 ( .A(n890), .B(n891), .C(n892), .Y(n1161) );
NOR2X1 U1169 ( .A(n893), .B(n894), .Y(n892) );
OAI21X1 U1170 ( .A(n839), .B(\r263/B_not[3] ), .C(n895), .Y(n894) );
AOI22X1 U1171 ( .A(N1745), .B(n841), .C(n842), .D(\A[3] ), .Y(n895)
);
INVX2 U1172 ( .A(n1483), .Y(\r263/B_not[3] ) );
OAI21X1 U1173 ( .A(n843), .B(n1346), .C(n897), .Y(n893) );
AOI22X1 U1174 ( .A(N1754), .B(n846), .C(N603), .D(n847), .Y(n897) );
AOI21X1 U1176 ( .A(N1719), .B(n848), .C(n898), .Y(n891) );
OAI21X1 U1177 ( .A(n383), .B(n850), .C(n899), .Y(n898) );
NAND2X1 U1178 ( .A(N1728), .B(n1310), .Y(n899) );
INVX2 U1179 ( .A(\P[3] ), .Y(n383) );
AOI21X1 U1180 ( .A(n853), .B(n987), .C(n900), .Y(n890) );
OAI22X1 U1181 ( .A(n988), .B(n855), .C(n986), .D(n856), .Y(n900) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 123
de Synopsys
INVX2 U1182 ( .A(\A[4] ), .Y(n986) );
NAND3X1 U1183 ( .A(n901), .B(n902), .C(n903), .Y(n1160) );
NOR2X1 U1184 ( .A(n904), .B(n905), .Y(n903) );
OAI21X1 U1185 ( .A(n839), .B(n1444), .C(n906), .Y(n905) );
AOI22X1 U1186 ( .A(N1744), .B(n841), .C(n842), .D(\A[2] ), .Y(n906)
);
OAI21X1 U1188 ( .A(n843), .B(n1345), .C(n908), .Y(n904) );
AOI22X1 U1189 ( .A(N1753), .B(n846), .C(N604), .D(n847), .Y(n908) );
AOI21X1 U1191 ( .A(N1718), .B(n848), .C(n909), .Y(n902) );
OAI21X1 U1192 ( .A(n387), .B(n850), .C(n910), .Y(n909) );
NAND2X1 U1193 ( .A(N1727), .B(n1310), .Y(n910) );
INVX2 U1194 ( .A(\P[2] ), .Y(n387) );
AOI21X1 U1195 ( .A(n853), .B(n988), .C(n911), .Y(n901) );
OAI22X1 U1196 ( .A(n989), .B(n855), .C(n987), .D(n856), .Y(n911) );
INVX2 U1197 ( .A(\A[3] ), .Y(n987) );
NAND3X1 U1198 ( .A(n912), .B(n913), .C(n914), .Y(n1159) );
NOR2X1 U1199 ( .A(n915), .B(n916), .Y(n914) );
OAI21X1 U1200 ( .A(n839), .B(n1461), .C(n917), .Y(n916) );
AOI22X1 U1201 ( .A(N1743), .B(n841), .C(n842), .D(\A[1] ), .Y(n917)
);
OAI21X1 U1203 ( .A(n843), .B(n1344), .C(n919), .Y(n915) );
AOI22X1 U1204 ( .A(N1752), .B(n846), .C(N605), .D(n847), .Y(n919) );
AOI21X1 U1206 ( .A(N1717), .B(n848), .C(n920), .Y(n913) );
OAI21X1 U1207 ( .A(n391), .B(n850), .C(n921), .Y(n920) );
NAND2X1 U1208 ( .A(N1726), .B(n1310), .Y(n921) );
INVX2 U1209 ( .A(\P[1] ), .Y(n391) );
AOI21X1 U1210 ( .A(n853), .B(n989), .C(n922), .Y(n912) );
OAI22X1 U1211 ( .A(n990), .B(n855), .C(n988), .D(n856), .Y(n922) );
INVX2 U1212 ( .A(\A[2] ), .Y(n988) );
NAND3X1 U1213 ( .A(n923), .B(n924), .C(n925), .Y(n1158) );
NOR2X1 U1214 ( .A(n926), .B(n927), .Y(n925) );
OAI21X1 U1215 ( .A(n839), .B(n1500), .C(n928), .Y(n927) );
AOI22X1 U1216 ( .A(N1751), .B(n841), .C(n842), .D(\sub_547/carry[1]
), .Y(
n928) );
NAND3X1 U1217 ( .A(n929), .B(n930), .C(n931), .Y(n842) );
AOI21X1 U1218 ( .A(n932), .B(n1243), .C(n933), .Y(n931) );
OAI21X1 U1219 ( .A(n934), .B(n935), .C(n800), .Y(n933) );
NAND2X1 U1220 ( .A(EstPresente[3]), .B(n157), .Y(n800) );
NAND2X1 U1221 ( .A(n936), .B(n1311), .Y(n935) );
NOR2X1 U1222 ( .A(N2011), .B(n1364), .Y(n936) );
NAND3X1 U1223 ( .A(n938), .B(n132), .C(n939), .Y(n934) );
NOR2X1 U1224 ( .A(N779), .B(N766), .Y(n939) );
INVX2 U1225 ( .A(N753), .Y(n132) );
INVX2 U1226 ( .A(N735), .Y(n938) );
NOR2X1 U1229 ( .A(n941), .B(n942), .Y(n932) );
NAND3X1 U1230 ( .A(n1282), .B(n944), .C(n119), .Y(n941) );
NAND3X1 U1231 ( .A(n945), .B(EstPresente[3]), .C(n946), .Y(n930) );
NOR2X1 U1232 ( .A(N1279), .B(N1278), .Y(n945) );
INVX2 U1233 ( .A(n82), .Y(n929) );
OR2X2 U1234 ( .A(n797), .B(n947), .Y(n82) );
OAI21X1 U1235 ( .A(EstPresente[2]), .B(EstPresente[1]), .C(n1372),
.Y(n947)
);
OAI21X1 U1236 ( .A(n157), .B(n84), .C(n337), .Y(n797) );
OAI22X1 U1237 ( .A(n948), .B(N646), .C(n949), .D(N658), .Y(n841) );
NAND3X1 U1238 ( .A(n950), .B(N1278), .C(n946), .Y(n949) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 124
de Synopsys
INVX2 U1239 (
NAND3X1 U1240
INVX2 U1242 (
OAI21X1 U1243
NAND3X1 U1244
INVX2 U1245 (
OAI21X1 U1246
NAND2X1 U1247
INVX2 U1248 (
INVX2 U1249 (
OAI21X1 U1251
AOI22X1 U1252
OAI21X1 U1253
NAND3X1 U1254
INVX2 U1255 (
NAND3X1 U1256
INVX2 U1257 (
NAND2X1 U1258
INVX2 U1259 (
NAND3X1 U1260
OAI21X1 U1262
NAND3X1 U1263
INVX2 U1266 (
OAI22X1 U1267
NAND3X1 U1268
INVX2 U1270 (
NAND3X1 U1271
INVX2 U1272 (
NAND2X1 U1273
INVX2 U1274 (
NAND2X1 U1275
NAND2X1 U1277
INVX2 U1278 (
NAND3X1 U1280
INVX2 U1283 (
AOI21X1 U1284
OAI21X1 U1285
NAND2X1 U1286
NAND2X1 U1289
INVX2 U1291 (
NAND3X1 U1292
INVX2 U1293 (
AOI21X1 U1294
OAI22X1 U1295
NAND3X1 U1296
INVX2 U1297 (
NAND3X1 U1298
INVX2 U1299 (
INVX2 U1300 (
INVX2 U1301 (
NAND3X1 U1302
INVX2 U1303 (
NAND3X1 U1304
NAND2X1 U1306
INVX2 U1309 (
INVX2 U1310 (
NAND2X1 U1311
.A(N1279), .Y(n950) );
( .A(n944), .B(N872), .C(n951), .Y(n948) );
.A(n952), .Y(n839) );
( .A(N658), .B(n1263), .C(n954), .Y(n952) );
( .A(n955), .B(n1286), .C(n106), .Y(n954) );
.A(n108), .Y(n106) );
( .A(n1282), .B(n957), .C(n1327), .Y(n955) );
( .A(n119), .B(n944), .Y(n957) );
.A(N885), .Y(n944) );
.A(N872), .Y(n119) );
( .A(n843), .B(n1355), .C(n960), .Y(n926) );
( .A(N1751), .B(n846), .C(N606), .D(n847), .Y(n960) );
( .A(N646), .B(n961), .C(n962), .Y(n847) );
( .A(n946), .B(N1279), .C(N659), .Y(n962) );
.A(n963), .Y(n946) );
( .A(n964), .B(n1263), .C(n118), .Y(n963) );
.A(N1290), .Y(n964) );
( .A(n951), .B(N885), .Y(n961) );
.A(n942), .Y(n951) );
( .A(n1286), .B(n1327), .C(n143), .Y(n942) );
( .A(N646), .B(n143), .C(n965), .Y(n846) );
( .A(N1301), .B(n1263), .C(N659), .Y(n965) );
.A(n966), .Y(n843) );
( .A(n108), .B(n1286), .C(N658), .D(n967), .Y(n966) );
( .A(n118), .B(n1263), .C(N1290), .Y(n967) );
.A(N1301), .Y(n118) );
( .A(n338), .B(n337), .C(n587), .Y(N658) );
.A(n342), .Y(n587) );
( .A(EstPresente[3]), .B(EstPresente[2]), .Y(n342) );
.A(n348), .Y(n338) );
( .A(n84), .B(n1373), .Y(n348) );
( .A(N537), .B(n143), .Y(n108) );
.A(N918), .Y(n143) );
( .A(n84), .B(n337), .C(n1250), .Y(N646) );
.A(EstPresente[1]), .Y(n84) );
( .A(N1725), .B(n848), .C(n970), .Y(n924) );
( .A(N1760), .B(n850), .C(n971), .Y(n970) );
( .A(N1725), .B(n1310), .Y(n971) );
( .A(N805), .B(N533), .Y(n850) );
.A(n974), .Y(n848) );
( .A(N753), .B(n127), .C(n973), .Y(n974) );
.A(N766), .Y(n127) );
( .A(n853), .B(n990), .C(n975), .Y(n923) );
( .A(n999), .B(n855), .C(n989), .D(n856), .Y(n975) );
( .A(N792), .B(n976), .C(N533), .Y(n856) );
.A(\A[1] ), .Y(n989) );
( .A(N779), .B(n1311), .C(N533), .Y(n855) );
.A(S[0]), .Y(n999) );
.A(\sub_547/carry[1] ), .Y(n990) );
.A(n977), .Y(n853) );
( .A(N735), .B(n978), .C(n973), .Y(n977) );
.A(n979), .Y(n973) );
( .A(n1311), .B(n121), .C(N533), .Y(n979) );
( .A(n312), .B(n1245), .Y(N642) );
.A(EstPresente[2]), .Y(n157) );
.A(n314), .Y(n969) );
( .A(n1361), .B(n1371), .Y(n314) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 125
de Synopsys
INVX2 U1313 ( .A(EstPresente[3]), .Y(n142) );
INVX2 U1314 ( .A(n713), .Y(n312) );
NAND2X1 U1315 ( .A(n1363), .B(n1449), .Y(n713) );
INVX2 U1316 ( .A(EstPresente[4]), .Y(n337) );
INVX2 U1317 ( .A(N779), .Y(n121) );
INVX2 U1320 ( .A(N805), .Y(n976) );
INVX2 U1321 ( .A(N792), .Y(n115) );
NOR2X1 U1322 ( .A(N766), .B(N753), .Y(n978) );
DFFNEGX1 \BUSPC_reg[0] ( .CLK(CLK), .D(n1055), .Q(BUSPC[0]) );
DFFNEGX1 \BUSPC_reg[1] ( .CLK(CLK), .D(n1056), .Q(BUSPC[1]) );
DFFNEGX1 \BUSPC_reg[2] ( .CLK(CLK), .D(n1057), .Q(BUSPC[2]) );
DFFNEGX1 \BUSPC_reg[3] ( .CLK(CLK), .D(n1058), .Q(BUSPC[3]) );
DFFNEGX1 \BUSPC_reg[4] ( .CLK(CLK), .D(n1059), .Q(BUSPC[4]) );
DFFNEGX1 \BUSPC_reg[5] ( .CLK(CLK), .D(n1060), .Q(BUSPC[5]) );
DFFNEGX1 \BUSPC_reg[6] ( .CLK(CLK), .D(n1061), .Q(BUSPC[6]) );
DFFNEGX1 \BUSPC_reg[7] ( .CLK(CLK), .D(n1062), .Q(BUSPC[7]) );
DFFNEGX1 \BUSPC_reg[8] ( .CLK(CLK), .D(n1063), .Q(BUSPC[8]) );
DFFNEGX1 \BUSPC_reg[9] ( .CLK(CLK), .D(n1064), .Q(BUSPC[9]) );
DFFNEGX1 \BUSPC_reg[10] ( .CLK(CLK), .D(n1065), .Q(BUSPC[10]) );
DFFNEGX1 \BUSPC_reg[11] ( .CLK(CLK), .D(n1066), .Q(BUSPC[11]) );
DFFNEGX1 \BUSPC_reg[12] ( .CLK(CLK), .D(n1067), .Q(BUSPC[12]) );
DFFNEGX1 \BUSPC_reg[13] ( .CLK(CLK), .D(n1068), .Q(BUSPC[13]) );
DFFNEGX1 \BUSPC_reg[14] ( .CLK(CLK), .D(n1069), .Q(BUSPC[14]) );
DFFNEGX1 \BUSPC_reg[15] ( .CLK(CLK), .D(n1070), .Q(BUSPC[15]) );
DFFNEGX1 LE_S_reg ( .CLK(CLK), .D(n1071), .Q(LE_S) );
DFFNEGX1 \S_reg[0] ( .CLK(CLK), .D(n1072), .Q(S[0]) );
DFFNEGX1 \S_reg[1] ( .CLK(CLK), .D(n1073), .Q(S[1]) );
DFFNEGX1 \S_reg[2] ( .CLK(CLK), .D(n1074), .Q(S[2]) );
DFFNEGX1 \S_reg[3] ( .CLK(CLK), .D(n1075), .Q(S[3]) );
DFFNEGX1 \S_reg[4] ( .CLK(CLK), .D(n1076), .Q(S[4]) );
DFFNEGX1 \S_reg[5] ( .CLK(CLK), .D(n1077), .Q(S[5]) );
DFFNEGX1 \S_reg[6] ( .CLK(CLK), .D(n1078), .Q(S[6]) );
DFFNEGX1 \S_reg[7] ( .CLK(CLK), .D(n1079), .Q(S[7]) );
DFFNEGX1 LE_tri_enable_reg ( .CLK(CLK), .D(n1080), .Q(N1427) );
DFFNEGX1 LE_reg ( .CLK(CLK), .D(n1081), .Q(N1426) );
DFFNEGX1 Temp1_reg ( .CLK(CLK), .D(n1082), .Q(Temp1) );
DFFNEGX1 LE_A_reg ( .CLK(CLK), .D(n1083), .Q(LE_A) );
DFFNEGX1 LE_PB_reg ( .CLK(CLK), .D(n1084), .Q(LE_PB) );
DFFNEGX1 \RDR_tri_enable_reg[0] ( .CLK(CLK), .D(n1085), .Q(N1424)
DFFNEGX1 \RDR_reg[0] ( .CLK(CLK), .D(n1086), .Q(N1423) );
DFFNEGX1 \RDR_tri_enable_reg[1] ( .CLK(CLK), .D(n1087), .Q(N1421)
DFFNEGX1 \RDR_reg[1] ( .CLK(CLK), .D(n1088), .Q(N1420) );
DFFNEGX1 \RDR_tri_enable_reg[2] ( .CLK(CLK), .D(n1089), .Q(N1418)
DFFNEGX1 \RDR_reg[2] ( .CLK(CLK), .D(n1090), .Q(N1417) );
DFFNEGX1 \RDR_tri_enable_reg[3] ( .CLK(CLK), .D(n1091), .Q(N1415)
DFFNEGX1 \RDR_reg[3] ( .CLK(CLK), .D(n1092), .Q(N1414) );
DFFNEGX1 \RDR_tri_enable_reg[4] ( .CLK(CLK), .D(n1093), .Q(N1412)
DFFNEGX1 \RDR_reg[4] ( .CLK(CLK), .D(n1094), .Q(N1411) );
DFFNEGX1 \RDR_tri_enable_reg[5] ( .CLK(CLK), .D(n1095), .Q(N1409)
DFFNEGX1 \RDR_reg[5] ( .CLK(CLK), .D(n1096), .Q(N1408) );
DFFNEGX1 \RDR_tri_enable_reg[6] ( .CLK(CLK), .D(n1097), .Q(N1406)
DFFNEGX1 \RDR_reg[6] ( .CLK(CLK), .D(n1098), .Q(N1405) );
DFFNEGX1 \RDR_tri_enable_reg[7] ( .CLK(CLK), .D(n1099), .Q(N1403)
DFFNEGX1 \RDR_reg[7] ( .CLK(CLK), .D(n1100), .Q(N1402) );
DFFNEGX1 \RDR_tri_enable_reg[8] ( .CLK(CLK), .D(n1101), .Q(N1400)
DFFNEGX1 \RDR_reg[8] ( .CLK(CLK), .D(n1102), .Q(N1399) );
DFFNEGX1 \RDR_tri_enable_reg[9] ( .CLK(CLK), .D(n1103), .Q(N1397)
);
);
);
);
);
);
);
);
);
);
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 126
de Synopsys
DFFNEGX1
DFFNEGX1
);
DFFNEGX1
DFFNEGX1
);
DFFNEGX1
DFFNEGX1
);
DFFNEGX1
DFFNEGX1
);
DFFNEGX1
DFFNEGX1
);
DFFNEGX1
DFFNEGX1
);
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
DFFNEGX1
\RDR_reg[9] ( .CLK(CLK), .D(n1104), .Q(N1396) );
\RDR_tri_enable_reg[10] ( .CLK(CLK), .D(n1105), .Q(N1394)
\RDR_reg[10] ( .CLK(CLK), .D(n1106), .Q(N1393) );
\RDR_tri_enable_reg[11] ( .CLK(CLK), .D(n1107), .Q(N1391)
\RDR_reg[11] ( .CLK(CLK), .D(n1108), .Q(N1390) );
\RDR_tri_enable_reg[12] ( .CLK(CLK), .D(n1109), .Q(N1388)
\RDR_reg[12] ( .CLK(CLK), .D(n1110), .Q(N1387) );
\RDR_tri_enable_reg[13] ( .CLK(CLK), .D(n1111), .Q(N1385)
\RDR_reg[13] ( .CLK(CLK), .D(n1112), .Q(N1384) );
\RDR_tri_enable_reg[14] ( .CLK(CLK), .D(n1113), .Q(N1382)
\RDR_reg[14] ( .CLK(CLK), .D(n1114), .Q(N1381) );
\RDR_tri_enable_reg[15] ( .CLK(CLK), .D(n1115), .Q(N1379)
\RDR_reg[15] ( .CLK(CLK), .D(n1116), .Q(N1378) );
\P_reg[0] ( .CLK(CLK), .D(n1117), .Q(\r258/carry[1] ) );
\P_reg[1] ( .CLK(CLK), .D(n1118), .Q(\P[1] ) );
\P_reg[2] ( .CLK(CLK), .D(n1119), .Q(\P[2] ) );
\P_reg[3] ( .CLK(CLK), .D(n1120), .Q(\P[3] ) );
\P_reg[4] ( .CLK(CLK), .D(n1121), .Q(\P[4] ) );
\P_reg[5] ( .CLK(CLK), .D(n1122), .Q(\P[5] ) );
\P_reg[6] ( .CLK(CLK), .D(n1123), .Q(\P[6] ) );
\P_reg[7] ( .CLK(CLK), .D(n1124), .Q(\P[7] ) );
\RI_reg[0] ( .CLK(CLK), .D(n1125), .Q(RI[0]) );
\RI_reg[1] ( .CLK(CLK), .D(n1126), .Q(RI[1]) );
\RI_reg[2] ( .CLK(CLK), .D(n1127), .Q(RI[2]) );
\RI_reg[3] ( .CLK(CLK), .D(n1128), .Q(RI[3]) );
\RI_reg[4] ( .CLK(CLK), .D(n1129), .Q(RI[4]) );
\RI_reg[5] ( .CLK(CLK), .D(n1130), .Q(RI[5]) );
\RI_reg[6] ( .CLK(CLK), .D(n1131), .Q(RI[6]) );
\RI_reg[7] ( .CLK(CLK), .D(n1132), .Q(RI[7]) );
\TB_reg[0] ( .CLK(CLK), .D(n1133), .Q(TB[0]) );
\TB_reg[1] ( .CLK(CLK), .D(n1134), .Q(TB[1]) );
\TB_reg[2] ( .CLK(CLK), .D(n1135), .Q(TB[2]) );
\TB_reg[3] ( .CLK(CLK), .D(n1136), .Q(TB[3]) );
\TB_reg[4] ( .CLK(CLK), .D(n1137), .Q(TB[4]) );
\TB_reg[5] ( .CLK(CLK), .D(n1138), .Q(TB[5]) );
\TB_reg[6] ( .CLK(CLK), .D(n1139), .Q(TB[6]) );
\TB_reg[7] ( .CLK(CLK), .D(n1140), .Q(TB[7]) );
LE_PA_reg ( .CLK(CLK), .D(n1141), .Q(LE_PA) );
\PC_reg[0] ( .CLK(CLK), .D(n1142), .Q(PC[0]) );
\PC_reg[1] ( .CLK(CLK), .D(n1143), .Q(PC[1]) );
\PC_reg[2] ( .CLK(CLK), .D(n1144), .Q(PC[2]) );
\PC_reg[3] ( .CLK(CLK), .D(n1145), .Q(PC[3]) );
\PC_reg[4] ( .CLK(CLK), .D(n1146), .Q(PC[4]) );
\PC_reg[5] ( .CLK(CLK), .D(n1147), .Q(PC[5]) );
\PC_reg[6] ( .CLK(CLK), .D(n1148), .Q(PC[6]) );
\PC_reg[7] ( .CLK(CLK), .D(n1149), .Q(PC[7]) );
\PC_reg[8] ( .CLK(CLK), .D(n1150), .Q(PC[8]) );
\PC_reg[9] ( .CLK(CLK), .D(n1151), .Q(PC[9]) );
\PC_reg[10] ( .CLK(CLK), .D(n1152), .Q(PC[10]) );
\PC_reg[11] ( .CLK(CLK), .D(n1153), .Q(PC[11]) );
\PC_reg[12] ( .CLK(CLK), .D(n1154), .Q(PC[12]) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 127
de Synopsys
DFFNEGX1 \PC_reg[13] ( .CLK(CLK), .D(n1155), .Q(PC[13]) );
DFFNEGX1 \PC_reg[14] ( .CLK(CLK), .D(n1156), .Q(PC[14]) );
DFFNEGX1 \PC_reg[15] ( .CLK(CLK), .D(n1157), .Q(PC[15]) );
DFFNEGX1 \A_reg[0] ( .CLK(CLK), .D(n1158), .Q(\sub_547/carry[1] ) );
DFFNEGX1 \A_reg[1] ( .CLK(CLK), .D(n1159), .Q(\A[1] ) );
DFFNEGX1 \A_reg[2] ( .CLK(CLK), .D(n1160), .Q(\A[2] ) );
DFFNEGX1 \A_reg[3] ( .CLK(CLK), .D(n1161), .Q(\A[3] ) );
DFFNEGX1 \A_reg[4] ( .CLK(CLK), .D(n1162), .Q(\A[4] ) );
DFFNEGX1 \A_reg[5] ( .CLK(CLK), .D(n1163), .Q(\A[5] ) );
DFFNEGX1 \A_reg[6] ( .CLK(CLK), .D(n1164), .Q(\A[6] ) );
DFFNEGX1 \A_reg[7] ( .CLK(CLK), .D(n1165), .Q(\A[7] ) );
DFFNEGX1 Temp_reg ( .CLK(CLK), .D(n1166), .Q(Temp) );
DFFNEGX1 \EstPresente_reg[0] ( .CLK(CLK), .D(N1430),
.Q(EstPresente[0]) );
DFFNEGX1 \EstPresente_reg[1] ( .CLK(CLK), .D(N1431),
.Q(EstPresente[1]) );
DFFNEGX1 \EstPresente_reg[2] ( .CLK(CLK), .D(N1432),
.Q(EstPresente[2]) );
DFFNEGX1 \EstPresente_reg[3] ( .CLK(CLK), .D(N1433),
.Q(EstPresente[3]) );
DFFNEGX1 \EstPresente_reg[4] ( .CLK(CLK), .D(N1434),
.Q(EstPresente[4]) );
INVX2 I_33 ( .A(SDMA), .Y(N490) );
NAND3X1 C700 ( .A(RI[5]), .B(RI[1]), .C(RI[0]), .Y(n1167) );
NAND3X1 C704 ( .A(n1465), .B(RI[5]), .C(RI[0]), .Y(n1168) );
NAND3X1 C705 ( .A(RI[2]), .B(n1475), .C(n1368), .Y(n1169) );
NAND3X1 C707 ( .A(n534), .B(N32), .C(RI[0]), .Y(n1170) );
NAND3X1 C1202 ( .A(n534), .B(RI[1]), .C(RI[0]), .Y(n1172) );
INVX2 U1329 ( .A(n1167), .Y(N629) );
AND2X2 C1205 ( .A(n1486), .B(n1475), .Y(N631) );
NAND3X1 C1206 ( .A(n1465), .B(RI[2]), .C(n1368), .Y(n1174) );
INVX2 U1330 ( .A(n1174), .Y(N632) );
NAND3X1 C1207 ( .A(n1486), .B(RI[2]), .C(n1368), .Y(n1175) );
INVX2 U1331 ( .A(n1175), .Y(N633) );
AND2X2 C1208 ( .A(n1475), .B(n1368), .Y(N634) );
AND2X2 C1760 ( .A(n1475), .B(n1368), .Y(N839) );
INVX2 I_55 ( .A(RPS), .Y(N1429) );
OR2X2 C3046 ( .A(N831), .B(N836), .Y(N1499) );
NAND3X1 C3090 ( .A(N680), .B(N581), .C(N585), .Y(N1526) );
NAND3X1 C3091 ( .A(n1359), .B(n1177), .C(n1178), .Y(N1527) );
INVX2 U1333 ( .A(N1525), .Y(n1177) );
INVX2 U1334 ( .A(N1526), .Y(n1178) );
NAND3X1 C3123 ( .A(n1182), .B(N662), .C(N678), .Y(N1529) );
NAND3X1 C3126 ( .A(n1182), .B(N666), .C(N682), .Y(N1530) );
OR2X2 C3199 ( .A(N517), .B(N520), .Y(N1535) );
OR2X2 C3201 ( .A(N412), .B(N517), .Y(N1537) );
NAND3X1 C3205 ( .A(n1182), .B(N646), .C(N658), .Y(N1541) );
OR2X2 C3220 ( .A(N640), .B(N647), .Y(N1553) );
NAND3X1 C3242 ( .A(N684), .B(N585), .C(n585), .Y(N1667) );
NAND3X1 C3243 ( .A(n1179), .B(n1288), .C(n1181), .Y(N1668) );
INVX2 U1335 ( .A(N1665), .Y(n1179) );
INVX2 U1337 ( .A(N1667), .Y(n1181) );
NAND3X1 C3246 ( .A(N674), .B(N678), .C(N682), .Y(N1670) );
OR2X2 C3247 ( .A(N1669), .B(N1670), .Y(N1674) );
NAND3X1 C3267 ( .A(n1182), .B(N570), .C(n585), .Y(N1786) );
INVX2 U1338 ( .A(N640), .Y(n1182) );
NAND3X1 C3279 ( .A(n1289), .B(n1184), .C(n585), .Y(N1797) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 128
de Synopsys
INVX2 U1340 ( .A(N1796), .Y(n1184) );
NAND3X1 C3287 ( .A(n1290), .B(n1186), .C(n585), .Y(N1804) );
INVX2 U1342 ( .A(N1803), .Y(n1186) );
NAND3X1 C3296 ( .A(n1188), .B(n1329), .C(n1287), .Y(N1812) );
INVX2 U1344 ( .A(N1809), .Y(n1188) );
OR2X2 C3444 ( .A(N1886), .B(N1887), .Y(N1888) );
NAND3X1 C3548 ( .A(N658), .B(N672), .C(N686), .Y(N1936) );
OR2X2 C3549 ( .A(N1935), .B(N1936), .Y(N1937) );
NAND3X1 C3694 ( .A(n1308), .B(n1193), .C(n1194), .Y(N1941) );
INVX2 U1349 ( .A(N1939), .Y(n1193) );
INVX2 U1350 ( .A(N1940), .Y(n1194) );
NAND3X1 C4000 ( .A(N641), .B(N644), .C(N648), .Y(N1978) );
INVX2 I_67 ( .A(RI[4]), .Y(N44) );
OR2X2 C4405 ( .A(N2043), .B(n1280), .Y(ActualizarNZ) );
OR2X2 C4409 ( .A(N2035), .B(n1281), .Y(N2037) );
INVX2 I_75 ( .A(N86), .Y(N2009) );
INVX2 I_76 ( .A(N93), .Y(N2011) );
INVX2 I_79 ( .A(N98), .Y(N2017) );
INVX2 I_86 ( .A(N89), .Y(N2032) );
INVX2 I_93 ( .A(N64), .Y(N393) );
INVX2 I_111 ( .A(N83), .Y(N411) );
INVX2 I_112 ( .A(N84), .Y(N412) );
INVX2 I_116 ( .A(N88), .Y(N416) );
INVX2 I_126 ( .A(N641), .Y(N429) );
INVX2 I_130 ( .A(N648), .Y(N437) );
INVX2 I_133 ( .A(N652), .Y(N443) );
INVX2 I_134 ( .A(N546), .Y(N445) );
INVX2 I_138 ( .A(N660), .Y(N453) );
INVX2 I_139 ( .A(N662), .Y(N455) );
INVX2 I_142 ( .A(N668), .Y(N461) );
INVX2 I_144 ( .A(N566), .Y(N465) );
INVX2 I_146 ( .A(N570), .Y(N469) );
INVX2 I_150 ( .A(N680), .Y(N477) );
INVX2 I_154 ( .A(N585), .Y(N485) );
OR2X2 C4703 ( .A(INT), .B(S[2]), .Y(N489) );
OR2X2 C4821 ( .A(N2082), .B(n1249), .Y(N2083) );
INVX2 I_177 ( .A(N60), .Y(N2080) );
OR2X2 C4834 ( .A(RI[7]), .B(N2114), .Y(N499) );
OR2X2 C4835 ( .A(RI[3]), .B(N2113), .Y(N2114) );
OR2X2 C4836 ( .A(N495), .B(N2112), .Y(N2113) );
OR2X2 C4839 ( .A(N498), .B(N421), .Y(N2110) );
OR2X2 C4856 ( .A(N2224), .B(n1256), .Y(N502) );
OR2X2 C4861 ( .A(RI[7]), .B(N2141), .Y(N514) );
OR2X2 C4862 ( .A(RI[3]), .B(N2140), .Y(N2141) );
OR2X2 C4863 ( .A(N503), .B(N2139), .Y(N2140) );
OR2X2 C4864 ( .A(N504), .B(N2138), .Y(N2139) );
OR2X2 C4865 ( .A(N629), .B(N2137), .Y(N2138) );
OR2X2 C4877 ( .A(N2144), .B(N416), .Y(N2145) );
OR2X2 C4881 ( .A(RI[7]), .B(N2151), .Y(N520) );
OR2X2 C4882 ( .A(RI[3]), .B(N2150), .Y(N2151) );
OR2X2 C4883 ( .A(RI[2]), .B(N2149), .Y(N2150) );
OR2X2 C4884 ( .A(n1368), .B(N2148), .Y(N2149) );
INVX2 I_181 ( .A(N641), .Y(N531) );
INVX2 I_184 ( .A(N646), .Y(N537) );
INVX2 I_204 ( .A(N678), .Y(N576) );
INVX2 I_211 ( .A(HALT), .Y(N591) );
OR2X2 C5016 ( .A(INT), .B(S[2]), .Y(N592) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 129
de Synopsys
XOR2X1 C5018 ( .A(Temp), .B(n1474), .Y(N594) );
INVX2 I_212 ( .A(Temp), .Y(N595) );
INVX2 I_213 ( .A(N79), .Y(N597) );
INVX2 I_214 ( .A(N80), .Y(N598) );
AND2X2 C5042 ( .A(n1474), .B(n1493), .Y(N599) );
AND2X2 C5043 ( .A(n1481), .B(n1442), .Y(N600) );
INVX2 I_220 ( .A(N126), .Y(N618) );
INVX2 I_221 ( .A(N127), .Y(N619) );
INVX2 I_222 ( .A(N128), .Y(N620) );
INVX2 I_223 ( .A(N129), .Y(N621) );
OR2X2 C5093 ( .A(n1251), .B(n1269), .Y(N623) );
OR2X2 C5130 ( .A(N631), .B(N2160), .Y(N2161) );
OR2X2 C5131 ( .A(N632), .B(N2159), .Y(N2160) );
OR2X2 C5132 ( .A(N633), .B(N2158), .Y(N2159) );
OR2X2 C5133 ( .A(N634), .B(N2157), .Y(N2158) );
INVX2 I_236 ( .A(N642), .Y(N643) );
INVX2 I_238 ( .A(N646), .Y(N647) );
INVX2 I_240 ( .A(N650), .Y(N651) );
INVX2 I_242 ( .A(N654), .Y(N655) );
INVX2 I_244 ( .A(N658), .Y(N659) );
INVX2 I_250 ( .A(N670), .Y(N671) );
INVX2 I_251 ( .A(N672), .Y(N673) );
INVX2 I_253 ( .A(N676), .Y(N677) );
INVX2 I_256 ( .A(N682), .Y(N683) );
INVX2 I_257 ( .A(N684), .Y(N685) );
INVX2 I_258 ( .A(N686), .Y(N687) );
INVX2 I_271 ( .A(N95), .Y(N727) );
INVX2 I_272 ( .A(N150), .Y(N728) );
AND2X2 C5304 ( .A(n1331), .B(n1376), .Y(N734) );
AND2X2 C5309 ( .A(N2177), .B(n1377), .Y(N735) );
INVX2 I_277 ( .A(N96), .Y(N2177) );
AND2X2 C5324 ( .A(N2178), .B(n1374), .Y(N753) );
INVX2 I_286 ( .A(N97), .Y(N2178) );
AND2X2 C5338 ( .A(n1279), .B(n1374), .Y(N779) );
AND2X2 C5345 ( .A(n1281), .B(n1374), .Y(N792) );
AND2X2 C5350 ( .A(n1280), .B(n1374), .Y(N805) );
OR2X2 C5362 ( .A(N2183), .B(n1268), .Y(N2185) );
AND2X2 C5404 ( .A(N598), .B(n1377), .Y(N871) );
AND2X2 C5406 ( .A(n1249), .B(n1375), .Y(N872) );
AND2X2 C5411 ( .A(N393), .B(n1376), .Y(N885) );
INVX2 I_311 ( .A(N67), .Y(N2199) );
AND2X2 C5431 ( .A(N2200), .B(n1374), .Y(N918) );
INVX2 I_313 ( .A(N68), .Y(N2200) );
INVX2 I_315 ( .A(N77), .Y(N2201) );
INVX2 I_316 ( .A(N78), .Y(N2202) );
OR2X2 C5451 ( .A(N2205), .B(n1277), .Y(N933) );
OR2X2 C5452 ( .A(N2204), .B(n1266), .Y(N2205) );
OR2X2 C5453 ( .A(n1255), .B(n1267), .Y(N2204) );
OR2X2 C5463 ( .A(N2208), .B(n1277), .Y(N1098) );
OR2X2 C5464 ( .A(N2207), .B(n1266), .Y(N2208) );
OR2X2 C5465 ( .A(N2206), .B(n1267), .Y(N2207) );
OR2X2 C5466 ( .A(N623), .B(n1255), .Y(N2206) );
AND2X2 C5506 ( .A(N2214), .B(n1377), .Y(N1279) );
OR2X2 C5507 ( .A(N2005), .B(N2009), .Y(N2214) );
INVX2 I_329 ( .A(N55), .Y(N2215) );
INVX2 I_333 ( .A(N90), .Y(N2219) );
OR2X2 C5544 ( .A(N2021), .B(N2222), .Y(N2223) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 130
de Synopsys
INVX2 I_336 ( .A(N87), .Y(N2222) );
INVX2 I_337 ( .A(N81), .Y(N2224) );
OAI21X1 U1351 ( .A(RI[6]), .B(RI[1]), .C(n1195), .Y(N2162) );
INVX2 U1352 ( .A(N2161), .Y(n1195) );
AOI21X1 U1353 ( .A(n1276), .B(n1369), .C(N2093), .Y(n1196) );
INVX2 U1354 ( .A(n1196), .Y(N2094) );
NOR2X1 U1355 ( .A(N497), .B(N2110), .Y(n1200) );
NOR2X1 U1356 ( .A(N2210), .B(N2009), .Y(n1214) );
OAI21X1 U1357 ( .A(N2215), .B(N2032), .C(n1376), .Y(n1197) );
INVX2 U1358 ( .A(n1197), .Y(N1290) );
OAI21X1 U1359 ( .A(N643), .B(N659), .C(n504), .Y(n1198) );
INVX2 U1360 ( .A(n1198), .Y(n512) );
NAND2X1 U1361 ( .A(N79), .B(N80), .Y(N2183) );
NAND3X1 U1362 ( .A(N32), .B(n1199), .C(n1430), .Y(N39) );
INVX2 U1363 ( .A(N832), .Y(n1199) );
NAND3X1 U1364 ( .A(N81), .B(N80), .C(n1418), .Y(n1419) );
AOI21X1 U1365 ( .A(n710), .B(SDMA), .C(N1941), .Y(n356) );
NOR2X1 U1366 ( .A(N42), .B(n665), .Y(n1303) );
AOI21X1 U1367 ( .A(N38), .B(RI[0]), .C(N2196), .Y(n1330) );
NOR2X1 U1368 ( .A(n985), .B(\r263/B_not[5] ), .Y(N601) );
OAI21X1 U1369 ( .A(n579), .B(n580), .C(n1200), .Y(N2112) );
AOI21X1 U1370 ( .A(n1460), .B(RI[0]), .C(N2131), .Y(n1207) );
NAND3X1 U1371 ( .A(n1436), .B(N79), .C(n1416), .Y(n1413) );
NOR2X1 U1372 ( .A(n581), .B(N829), .Y(n1255) );
NOR2X1 U1373 ( .A(N2145), .B(N2032), .Y(n1205) );
NOR2X1 U1374 ( .A(N2190), .B(n726), .Y(n1216) );
NAND3X1 U1375 ( .A(N666), .B(N658), .C(N662), .Y(n1201) );
INVX2 U1376 ( .A(n1201), .Y(n1307) );
NOR2X1 U1377 ( .A(n1234), .B(n117), .Y(n112) );
NOR2X1 U1378 ( .A(n986), .B(\r263/B_not[4] ), .Y(N602) );
NAND3X1 U1379 ( .A(n1391), .B(n1261), .C(N39), .Y(n1202) );
INVX2 U1380 ( .A(n1202), .Y(n1387) );
NAND3X1 U1381 ( .A(N585), .B(N684), .C(N581), .Y(n1203) );
INVX2 U1382 ( .A(n1203), .Y(n1258) );
NAND3X1 U1383 ( .A(n1410), .B(N49), .C(n1411), .Y(n1204) );
INVX2 U1384 ( .A(n1204), .Y(n1412) );
NAND3X1 U1385 ( .A(n1205), .B(N90), .C(N91), .Y(N517) );
OAI21X1 U1386 ( .A(N2185), .B(n1278), .C(n1377), .Y(n1316) );
NAND2X1 U1387 ( .A(N666), .B(N674), .Y(N1847) );
AOI21X1 U1388 ( .A(n1252), .B(n1303), .C(N753), .Y(n130) );
NOR2X1 U1389 ( .A(n987), .B(\r263/B_not[3] ), .Y(N603) );
NAND2X1 U1390 ( .A(n609), .B(N676), .Y(N1914) );
NAND3X1 U1391 ( .A(n1167), .B(n1206), .C(n1172), .Y(N637) );
INVX2 U1392 ( .A(N2162), .Y(n1206) );
NAND3X1 U1393 ( .A(n1207), .B(n1169), .C(n1170), .Y(N2134) );
NAND3X1 U1394 ( .A(N644), .B(n1208), .C(n630), .Y(n1209) );
INVX2 U1395 ( .A(n1272), .Y(n1208) );
INVX2 U1396 ( .A(n1209), .Y(n1290) );
NOR2X1 U1397 ( .A(n489), .B(n1493), .Y(n1455) );
OAI21X1 U1398 ( .A(N2201), .B(N2202), .C(n1375), .Y(n1210) );
INVX2 U1399 ( .A(n1210), .Y(N931) );
AOI21X1 U1400 ( .A(n1211), .B(n355), .C(n297), .Y(n169) );
INVX2 U1401 ( .A(n1325), .Y(n1211) );
NAND3X1 U1402 ( .A(n1412), .B(N87), .C(N79), .Y(n1212) );
INVX2 U1403 ( .A(n1212), .Y(n1236) );
OAI21X1 U1404 ( .A(EstPresente[1]), .B(n141), .C(EstPresente[3]),
.Y(n140)
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 131
de Synopsys
);
NAND3X1 U1405 ( .A(n132), .B(n1248), .C(n1303), .Y(n131) );
NOR2X1 U1406 ( .A(n988), .B(n1444), .Y(N604) );
NAND3X1 U1407 ( .A(n1213), .B(n1357), .C(n585), .Y(N1655) );
INVX2 U1408 ( .A(N1654), .Y(n1213) );
NAND3X1 U1409 ( .A(n1175), .B(n672), .C(n583), .Y(N2131) );
NAND3X1 U1410 ( .A(n1431), .B(N74), .C(N75), .Y(N2093) );
NAND3X1 U1411 ( .A(n1214), .B(N87), .C(N92), .Y(N2144) );
NOR3X1 U1412 ( .A(N421), .B(N2134), .C(n1215), .Y(n1226) );
INVX2 U1413 ( .A(n1168), .Y(n1215) );
OAI21X1 U1414 ( .A(N1935), .B(N1936), .C(n503), .Y(n506) );
OAI21X1 U1415 ( .A(n1251), .B(n1269), .C(n308), .Y(n245) );
NAND3X1 U1416 ( .A(n1216), .B(N834), .C(N835), .Y(N836) );
OAI21X1 U1417 ( .A(N2080), .B(N2219), .C(n1374), .Y(n1217) );
INVX2 U1418 ( .A(n1217), .Y(N1301) );
NOR2X1 U1419 ( .A(n1218), .B(n1523), .Y(n1301) );
INVX2 U1420 ( .A(PC[6]), .Y(n1218) );
OAI21X1 U1421 ( .A(N412), .B(N520), .C(N651), .Y(n688) );
OAI21X1 U1422 ( .A(N461), .B(N931), .C(N647), .Y(n408) );
OAI21X1 U1423 ( .A(n615), .B(n781), .C(N1530), .Y(n780) );
OAI21X1 U1424 ( .A(n1367), .B(n1475), .C(n1460), .Y(n1219) );
INVX2 U1425 ( .A(n1219), .Y(N2157) );
NOR2X1 U1426 ( .A(n1422), .B(N126), .Y(n1283) );
OAI21X1 U1427 ( .A(N2224), .B(N2223), .C(n1375), .Y(n1263) );
OAI21X1 U1428 ( .A(n1281), .B(n1280), .C(n1374), .Y(n1311) );
NOR2X1 U1429 ( .A(n581), .B(N830), .Y(n1267) );
NAND3X1 U1430 ( .A(N648), .B(N644), .C(n670), .Y(n653) );
NOR2X1 U1431 ( .A(n1220), .B(n1513), .Y(n1318) );
INVX2 U1432 ( .A(\A[2] ), .Y(n1220) );
NOR2X1 U1433 ( .A(n1221), .B(n1405), .Y(n1388) );
INVX2 U1434 ( .A(BUSPC[11]), .Y(n1221) );
AOI21X1 U1435 ( .A(n151), .B(n1271), .C(n150), .Y(n149) );
NOR2X1 U1436 ( .A(n1222), .B(n1517), .Y(n1298) );
INVX2 U1437 ( .A(PC[12]), .Y(n1222) );
NOR2X1 U1438 ( .A(n1223), .B(n1525), .Y(n1299) );
INVX2 U1439 ( .A(PC[2]), .Y(n1223) );
NOR2X1 U1440 ( .A(n310), .B(N834), .Y(n1268) );
AOI21X1 U1441 ( .A(n1365), .B(N654), .C(n1377), .Y(n690) );
AOI21X1 U1442 ( .A(n189), .B(n301), .C(n1535), .Y(n321) );
NOR2X1 U1443 ( .A(N2037), .B(N2080), .Y(n1232) );
OAI21X1 U1444 ( .A(n609), .B(n789), .C(n792), .Y(n1224) );
INVX2 U1445 ( .A(n1224), .Y(n790) );
OAI21X1 U1446 ( .A(N38), .B(N32), .C(n1475), .Y(n1225) );
INVX2 U1447 ( .A(n1225), .Y(N2148) );
NOR2X1 U1448 ( .A(RI[7]), .B(RI[3]), .Y(N638) );
NOR2X1 U1449 ( .A(n581), .B(N833), .Y(n1277) );
OAI21X1 U1450 ( .A(n572), .B(n573), .C(n1226), .Y(N2137) );
OAI21X1 U1451 ( .A(INT), .B(S[2]), .C(SDMA), .Y(N1534) );
NOR2X1 U1452 ( .A(n1227), .B(n1512), .Y(n1319) );
INVX2 U1453 ( .A(\A[4] ), .Y(n1227) );
NAND2X1 U1454 ( .A(N829), .B(N830), .Y(N831) );
NAND3X1 U1455 ( .A(n1228), .B(N34), .C(n1261), .Y(N708) );
INVX2 U1456 ( .A(n1249), .Y(n1228) );
NOR2X1 U1457 ( .A(n1229), .B(n1519), .Y(n1297) );
INVX2 U1458 ( .A(PC[10]), .Y(n1229) );
NOR2X1 U1459 ( .A(n1230), .B(n1524), .Y(n1300) );
INVX2 U1460 ( .A(PC[4]), .Y(n1230) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 132
de Synopsys
NAND2X1 U1461 ( .A(N686), .B(N585), .Y(n802) );
NOR2X1 U1462 ( .A(n310), .B(N835), .Y(n1278) );
NAND2X1 U1463 ( .A(N88), .B(n571), .Y(N1659) );
NAND2X1 U1464 ( .A(n687), .B(n1440), .Y(N1542) );
NOR2X1 U1465 ( .A(N1725), .B(n1500), .Y(N606) );
NOR2X1 U1466 ( .A(n1231), .B(n1507), .Y(n1334) );
INVX2 U1467 ( .A(\P[4] ), .Y(n1231) );
OAI21X1 U1468 ( .A(n153), .B(n154), .C(n151), .Y(n1491) );
OAI21X1 U1469 ( .A(N659), .B(n1272), .C(N1314), .Y(n798) );
NAND3X1 U1470 ( .A(n1232), .B(N68), .C(N90), .Y(N2043) );
AND2X2 U1471 ( .A(N872), .B(N1750), .Y(n105) );
XOR2X1 U1472 ( .A(n1525), .B(PC[2]), .Y(n1350) );
OAI21X1 U1473 ( .A(N640), .B(N647), .C(N2202), .Y(n772) );
OAI21X1 U1474 ( .A(n1422), .B(N125), .C(n1439), .Y(N2089) );
NOR2X1 U1475 ( .A(n729), .B(RI[4]), .Y(n1251) );
AOI21X1 U1476 ( .A(RI[1]), .B(RI[0]), .C(N839), .Y(n1233) );
INVX2 U1477 ( .A(n1233), .Y(N2196) );
OAI21X1 U1478 ( .A(N2209), .B(N2210), .C(n1376), .Y(n1234) );
INVX2 U1479 ( .A(n1234), .Y(N1278) );
NAND2X1 U1480 ( .A(N654), .B(N652), .Y(n654) );
NAND2X1 U1481 ( .A(BUSPC[10]), .B(BUSPC[9]), .Y(n1405) );
NAND3X1 U1482 ( .A(n1235), .B(N137), .C(N91), .Y(N1314) );
INVX2 U1483 ( .A(n1256), .Y(n1235) );
NAND3X1 U1484 ( .A(n1236), .B(N67), .C(N55), .Y(N2031) );
NOR2X1 U1485 ( .A(N98), .B(WAIT), .Y(N766) );
NOR2X1 U1486 ( .A(n1237), .B(n1521), .Y(n1296) );
INVX2 U1487 ( .A(PC[8]), .Y(n1237) );
NAND3X1 U1488 ( .A(N666), .B(N662), .C(n658), .Y(n656) );
NAND2X1 U1489 ( .A(N92), .B(N88), .Y(n571) );
NOR2X1 U1490 ( .A(n989), .B(n1461), .Y(N605) );
NOR2X1 U1491 ( .A(n1238), .B(n1508), .Y(n1333) );
INVX2 U1492 ( .A(\P[2] ), .Y(n1238) );
OAI21X1 U1493 ( .A(n153), .B(n154), .C(n151), .Y(n1490) );
NAND3X1 U1494 ( .A(N60), .B(N68), .C(N90), .Y(N718) );
XOR2X1 U1495 ( .A(n1523), .B(PC[6]), .Y(n1338) );
XOR2X1 U1496 ( .A(n1524), .B(PC[4]), .Y(n1336) );
OAI21X1 U1497 ( .A(INT), .B(S[2]), .C(SDMA), .Y(n1239) );
INVX2 U1498 ( .A(n1239), .Y(N527) );
OAI21X1 U1499 ( .A(n1268), .B(n1278), .C(n1377), .Y(n678) );
AOI21X1 U1500 ( .A(n1456), .B(n1451), .C(n1535), .Y(n487) );
AND2X2 U1501 ( .A(LE_S), .B(n609), .Y(n774) );
AND2X2 U1502 ( .A(n142), .B(n157), .Y(n1240) );
AND2X2 U1503 ( .A(n540), .B(n524), .Y(n1241) );
AND2X2 U1504 ( .A(EstPresente[4]), .B(EstPresente[1]), .Y(n1242) );
AND2X2 U1505 ( .A(EstPresente[2]), .B(n142), .Y(n1243) );
INVX2 U1506 ( .A(N66), .Y(n1411) );
INVX2 U1507 ( .A(RI[1]), .Y(N36) );
INVX2 U1508 ( .A(n166), .Y(n195) );
TBUFX1 \BUSDAT_tri4[1] ( .A(n1503), .EN(n1010), .Y(BUSDAT[1]) );
TBUFX1 \BUSDAT_tri4[2] ( .A(n1530), .EN(n1010), .Y(BUSDAT[2]) );
TBUFX1 \BUSDAT_tri3[1] ( .A(n1007), .EN(N390), .Y(BUSDAT[1]) );
TBUFX1 \BUSDAT_tri3[2] ( .A(n1006), .EN(N390), .Y(BUSDAT[2]) );
TBUFX1 \BUSDAT_tri2[1] ( .A(n998), .EN(n992), .Y(BUSDAT[1]) );
TBUFX1 \BUSDAT_tri2[2] ( .A(n997), .EN(n992), .Y(BUSDAT[2]) );
TBUFX1 \BUSDAT_tri[1] ( .A(n989), .EN(n983), .Y(BUSDAT[1]) );
TBUFX1 \BUSDAT_tri[2] ( .A(n988), .EN(n983), .Y(BUSDAT[2]) );
TBUFX1 \BUSDAT_tri[3] ( .A(n987), .EN(n983), .Y(BUSDAT[3]) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 133
de Synopsys
TBUFX1 \BUSDAT_tri[4] ( .A(n986), .EN(n983), .Y(BUSDAT[4]) );
BUFX4 U1509 ( .A(\add_32_2/carry[7] ), .Y(n1244) );
AND2X2 U1510 ( .A(n969), .B(n1362), .Y(n1245) );
AND2X2 U1511 ( .A(n334), .B(n337), .Y(n1246) );
AND2X2 U1512 ( .A(EstPresente[4]), .B(n334), .Y(n1247) );
INVX1 U1513 ( .A(n1424), .Y(n1367) );
AND2X2 U1514 ( .A(n1424), .B(N44), .Y(n1248) );
AND2X2 U1515 ( .A(n1425), .B(n1248), .Y(n1249) );
AND2X2 U1516 ( .A(EstPresente[2]), .B(n969), .Y(n1250) );
AND2X2 U1517 ( .A(n1424), .B(n524), .Y(n1252) );
AND2X2 U1518 ( .A(n312), .B(EstPresente[0]), .Y(n1253) );
AND2X2 U1519 ( .A(n1253), .B(n587), .Y(n1254) );
AND2X2 U1520 ( .A(n1369), .B(n1269), .Y(n1256) );
AND2X2 U1521 ( .A(n1242), .B(EstPresente[0]), .Y(n1257) );
AND2X2 U1522 ( .A(N32), .B(N38), .Y(n1259) );
AND2X2 U1523 ( .A(n1302), .B(BUSPC[13]), .Y(n1260) );
OR2X2 U1524 ( .A(n541), .B(n572), .Y(n1261) );
AND2X2 U1525 ( .A(n1303), .B(n527), .Y(n1262) );
AND2X2 U1526 ( .A(N42), .B(RI[5]), .Y(n1264) );
AND2X2 U1527 ( .A(n1264), .B(n567), .Y(n1265) );
AND2X2 U1528 ( .A(n725), .B(N2190), .Y(n1266) );
AND2X2 U1529 ( .A(n728), .B(n524), .Y(n1269) );
AND2X2 U1530 ( .A(n408), .B(n405), .Y(n1270) );
NOR2X1 U1531 ( .A(n828), .B(n1320), .Y(n1271) );
AND2X2 U1532 ( .A(n1253), .B(n589), .Y(n1272) );
AND2X2 U1533 ( .A(N32), .B(N42), .Y(n1273) );
AND2X2 U1534 ( .A(n1253), .B(n1243), .Y(n1274) );
INVX2 U1535 ( .A(BUSDAT[1]), .Y(n1461) );
INVX2 U1536 ( .A(n1461), .Y(n1463) );
INVX2 U1537 ( .A(BUSDAT[2]), .Y(n1444) );
INVX2 U1538 ( .A(n1444), .Y(n1445) );
INVX2 U1539 ( .A(N49), .Y(N2021) );
AND2X2 U1540 ( .A(N32), .B(n1295), .Y(n1275) );
AND2X2 U1541 ( .A(n1264), .B(n726), .Y(n1276) );
AND2X2 U1542 ( .A(n1275), .B(N2190), .Y(n1279) );
AND2X2 U1543 ( .A(n1275), .B(n567), .Y(n1280) );
AND2X2 U1544 ( .A(n1275), .B(n544), .Y(n1281) );
NAND2X1 U1545 ( .A(N597), .B(n1375), .Y(n1282) );
AND2X2 U1546 ( .A(N86), .B(N87), .Y(n1284) );
NAND2X1 U1547 ( .A(n1404), .B(N89), .Y(n1285) );
NAND2X1 U1548 ( .A(N2199), .B(n1374), .Y(n1286) );
AND2X2 U1549 ( .A(n1258), .B(n585), .Y(n1287) );
AND2X2 U1550 ( .A(n619), .B(N581), .Y(n1288) );
AND2X2 U1551 ( .A(n634), .B(n630), .Y(n1289) );
XNOR2X1 U1552 ( .A(n1386), .B(n1392), .Y(n1291) );
XNOR2X1 U1553 ( .A(n1507), .B(n379), .Y(n1292) );
XNOR2X1 U1554 ( .A(PC[1]), .B(PC[0]), .Y(n1293) );
INVX2 U1555 ( .A(n1500), .Y(n1417) );
OR2X2 U1556 ( .A(n1405), .B(n1390), .Y(n1294) );
AND2X2 U1557 ( .A(n1492), .B(n574), .Y(n1295) );
INVX2 U1558 ( .A(RI[5]), .Y(N32) );
AND2X2 U1559 ( .A(n1408), .B(BUSPC[12]), .Y(n1302) );
XNOR2X1 U1560 ( .A(PC[15]), .B(n1514), .Y(n1304) );
XNOR2X1 U1561 ( .A(n1515), .B(n1516), .Y(n1305) );
AND2X2 U1562 ( .A(n326), .B(N1941), .Y(n1306) );
AND2X2 U1563 ( .A(n606), .B(N652), .Y(n1308) );
AND2X2 U1564 ( .A(n248), .B(n247), .Y(n1309) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 134
de Synopsys
AND2X2 U1565 ( .A(n973), .B(N766), .Y(n1310) );
XNOR2X1 U1566 ( .A(n1519), .B(n1520), .Y(n1312) );
XNOR2X1 U1567 ( .A(PC[11]), .B(n1297), .Y(n1313) );
XNOR2X1 U1568 ( .A(n1517), .B(n1518), .Y(n1314) );
XNOR2X1 U1569 ( .A(PC[13]), .B(n1298), .Y(n1315) );
NOR2X1 U1570 ( .A(N1868), .B(N685), .Y(n1317) );
AND2X2 U1571 ( .A(N592), .B(N490), .Y(n1320) );
OR2X2 U1572 ( .A(N411), .B(n1256), .Y(n1321) );
XNOR2X1 U1573 ( .A(n1521), .B(n1522), .Y(n1322) );
XNOR2X1 U1574 ( .A(PC[9]), .B(n1296), .Y(n1323) );
XNOR2X1 U1575 ( .A(PC[7]), .B(n1301), .Y(n1324) );
NOR2X1 U1576 ( .A(N673), .B(N687), .Y(n1325) );
NOR2X1 U1577 ( .A(N647), .B(N659), .Y(n1326) );
NAND2X1 U1578 ( .A(N66), .B(n1375), .Y(n1327) );
AND2X2 U1579 ( .A(n1275), .B(n726), .Y(n1328) );
AND2X2 U1580 ( .A(n619), .B(N662), .Y(n1329) );
AND2X2 U1581 ( .A(n1275), .B(n663), .Y(n1331) );
NOR2X1 U1582 ( .A(\A[7] ), .B(\sub_547/carry[7] ), .Y(n1332) );
XNOR2X1 U1583 ( .A(PC[3]), .B(n1299), .Y(n1335) );
XNOR2X1 U1584 ( .A(PC[5]), .B(n1300), .Y(n1337) );
XNOR2X1 U1585 ( .A(\P[7] ), .B(n1504), .Y(n1339) );
XNOR2X1 U1586 ( .A(n1505), .B(n1506), .Y(n1340) );
XNOR2X1 U1587 ( .A(\P[5] ), .B(n1334), .Y(n1341) );
NOR2X1 U1588 ( .A(n1473), .B(n1443), .Y(n1342) );
NOR2X1 U1589 ( .A(n1474), .B(n1493), .Y(n1343) );
NOR2X1 U1590 ( .A(n1471), .B(n1462), .Y(n1344) );
NOR2X1 U1591 ( .A(n1480), .B(n1446), .Y(n1345) );
NOR2X1 U1592 ( .A(n1459), .B(n1483), .Y(n1346) );
NOR2X1 U1593 ( .A(n1472), .B(n1482), .Y(n1347) );
NOR2X1 U1594 ( .A(n1481), .B(n1442), .Y(n1348) );
XNOR2X1 U1595 ( .A(\add_32/carry[1] ), .B(n1396), .Y(n1349) );
XNOR2X1 U1596 ( .A(Temp), .B(Temp1), .Y(n1351) );
XNOR2X1 U1597 ( .A(\r258/carry[1] ), .B(\P[1] ), .Y(n1352) );
XNOR2X1 U1598 ( .A(n1508), .B(n387), .Y(n1353) );
XNOR2X1 U1599 ( .A(\P[3] ), .B(n1333), .Y(n1354) );
NOR2X1 U1600 ( .A(\sub_547/carry[1] ), .B(BUSDAT[0]), .Y(n1355) );
AND2X2 U1601 ( .A(N531), .B(N527), .Y(CB) );
NOR2X1 U1602 ( .A(N685), .B(n802), .Y(n1357) );
NOR2X1 U1603 ( .A(N2224), .B(n1256), .Y(n1358) );
NOR2X1 U1604 ( .A(n1272), .B(n653), .Y(n1359) );
INVX2 U1605 ( .A(n43), .Y(n1360) );
INVX2 U1606 ( .A(n1450), .Y(n1361) );
INVX2 U1607 ( .A(n1364), .Y(n1362) );
INVX2 U1608 ( .A(n1454), .Y(n1363) );
BUFX2 U1609 ( .A(EstPresente[2]), .Y(n1364) );
INVX2 U1610 ( .A(N659), .Y(n1365) );
INVX1 U1611 ( .A(RI[4]), .Y(n1366) );
INVX2 U1612 ( .A(RI[0]), .Y(n1424) );
INVX2 U1613 ( .A(n1424), .Y(n527) );
INVX2 U1614 ( .A(n1367), .Y(n1368) );
INVX1 U1615 ( .A(n1422), .Y(n1369) );
OR2X2 U1616 ( .A(RI[3]), .B(RI[7]), .Y(n1422) );
BUFX2 U1617 ( .A(EstPresente[0]), .Y(n1370) );
INVX2 U1618 ( .A(n1370), .Y(n1371) );
INVX2 U1619 ( .A(n1370), .Y(n1373) );
INVX2 U1620 ( .A(n1370), .Y(n1372) );
INVX2 U1621 ( .A(WAIT), .Y(n1374) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 135
de Synopsys
INVX2 U1622 ( .A(WAIT), .Y(n1377) );
INVX2 U1623 ( .A(WAIT), .Y(n1376) );
INVX2 U1624 ( .A(WAIT), .Y(n1375) );
XOR2X1 U1625 ( .A(BUSPC[1]), .B(n1462), .Y(n1378) );
XOR2X1 U1626 ( .A(\add_32_2/carry[1] ), .B(n1378), .Y(N1814) );
NAND2X1 U1627 ( .A(\add_32_2/carry[1] ), .B(BUSPC[1]), .Y(n1379) );
NAND2X1 U1628 ( .A(\add_32_2/carry[1] ), .B(n1462), .Y(n1380) );
NAND2X1 U1629 ( .A(BUSPC[1]), .B(n1462), .Y(n1381) );
NAND3X1 U1630 ( .A(n1380), .B(n1379), .C(n1381),
.Y(\add_32_2/carry[2] ) );
INVX2 U1631 ( .A(n1461), .Y(n1462) );
OR2X2 U1632 ( .A(BUSPC[13]), .B(n1498), .Y(n1382) );
NOR2X1 U1633 ( .A(n1383), .B(n1384), .Y(n1407) );
NAND2X1 U1634 ( .A(N98), .B(N97), .Y(n1383) );
NAND2X1 U1635 ( .A(n1402), .B(N96), .Y(n1384) );
INVX1 U1636 ( .A(\add_32/carry[2] ), .Y(n1385) );
INVX2 U1637 ( .A(n1385), .Y(n1386) );
NAND2X1 U1638 ( .A(n1387), .B(N64), .Y(N2008) );
AND2X2 U1639 ( .A(n1388), .B(n1389), .Y(n1408) );
INVX1 U1640 ( .A(n1389), .Y(n1390) );
NOR2X1 U1641 ( .A(n1285), .B(n1413), .Y(n1426) );
OR2X1 U1642 ( .A(N2033), .B(n1279), .Y(N2035) );
INVX2 U1643 ( .A(n1502), .Y(n1389) );
NAND2X1 U1644 ( .A(n246), .B(n1309), .Y(n1116) );
INVX1 U1645 ( .A(n1401), .Y(N1690) );
NAND2X1 U1646 ( .A(BUSPC[8]), .B(\add_32_2/carry[8] ), .Y(n1502) );
INVX1 U1647 ( .A(\add_32/carry[8] ), .Y(n1534) );
OR2X1 U1648 ( .A(N2031), .B(N2032), .Y(N2033) );
INVX2 U1649 ( .A(RI[2]), .Y(N42) );
NOR2X1 U1650 ( .A(N2209), .B(n1249), .Y(n1391) );
XOR2X1 U1651 ( .A(BUSPC[2]), .B(n1446), .Y(n1392) );
NAND2X1 U1652 ( .A(BUSPC[2]), .B(\add_32/carry[2] ), .Y(n1393) );
NAND2X1 U1653 ( .A(n1446), .B(\add_32/carry[2] ), .Y(n1394) );
NAND2X1 U1654 ( .A(BUSPC[2]), .B(n1446), .Y(n1395) );
NAND3X1 U1655 ( .A(n1394), .B(n1393), .C(n1395), .Y(\add_32/carry[3]
) );
XOR2X1 U1656 ( .A(BUSPC[1]), .B(n1463), .Y(n1396) );
NAND2X1 U1657 ( .A(\add_32/carry[1] ), .B(BUSPC[1]), .Y(n1397) );
NAND2X1 U1658 ( .A(\add_32/carry[1] ), .B(n1462), .Y(n1398) );
NAND2X1 U1659 ( .A(BUSPC[1]), .B(n1463), .Y(n1399) );
NAND3X1 U1660 ( .A(n1397), .B(n1398), .C(n1399), .Y(\add_32/carry[2]
) );
AND2X2 U1661 ( .A(n1400), .B(N93), .Y(n1402) );
NOR2X1 U1662 ( .A(N2008), .B(N2009), .Y(n1400) );
XOR2X1 U1663 ( .A(n1495), .B(n1009), .Y(n1401) );
NOR2X1 U1664 ( .A(n1403), .B(n1409), .Y(n1440) );
NAND2X1 U1665 ( .A(N92), .B(N91), .Y(n1403) );
AND2X2 U1666 ( .A(N88), .B(n1284), .Y(n1404) );
INVX2 U1667 ( .A(RI[6]), .Y(N38) );
NOR2X1 U1668 ( .A(n1390), .B(n1503), .Y(n1406) );
AND2X1 U1669 ( .A(n1407), .B(N81), .Y(n1410) );
NAND2X1 U1670 ( .A(n1426), .B(N90), .Y(n1409) );
AND2X2 U1671 ( .A(n1417), .B(BUSPC[0]), .Y(\add_32/carry[1] ) );
INVX1 U1672 ( .A(RI[3]), .Y(n1414) );
AND2X2 U1673 ( .A(n1414), .B(n1415), .Y(n1430) );
NOR2X1 U1674 ( .A(RI[7]), .B(RI[2]), .Y(n1415) );
NOR2X1 U1675 ( .A(n1419), .B(N2210), .Y(n1416) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 136
de Synopsys
AND2X2 U1676 ( .A(n1417), .B(BUSPC[0]), .Y(\add_32_2/carry[1] ) );
INVX1 U1677 ( .A(n541), .Y(n535) );
OR2X1 U1678 ( .A(n456), .B(n457), .Y(n1157) );
AND2X2 U1679 ( .A(N39), .B(N34), .Y(n1427) );
INVX1 U1680 ( .A(n1261), .Y(N2210) );
NOR2X1 U1681 ( .A(n1321), .B(N412), .Y(n1418) );
AND2X2 U1682 ( .A(n1486), .B(n1430), .Y(n1420) );
AND2X2 U1683 ( .A(n1421), .B(N55), .Y(n1423) );
NOR2X1 U1684 ( .A(N2021), .B(N2075), .Y(n1421) );
NAND2X1 U1685 ( .A(n1423), .B(N60), .Y(N2081) );
OR2X1 U1686 ( .A(N2081), .B(N393), .Y(N2082) );
INVX2 U1687 ( .A(N36), .Y(n531) );
NOR2X1 U1688 ( .A(n574), .B(n665), .Y(n1425) );
INVX1 U1689 ( .A(N832), .Y(N2190) );
INVX1 U1690 ( .A(RI[7]), .Y(N50) );
NAND2X1 U1691 ( .A(n1427), .B(N137), .Y(N2075) );
AND2X2 U1692 ( .A(n1259), .B(N36), .Y(n1428) );
INVX2 U1693 ( .A(n1428), .Y(n563) );
AND2X1 U1694 ( .A(n1429), .B(N73), .Y(n1431) );
NOR2X1 U1695 ( .A(N2089), .B(n1283), .Y(n1429) );
INVX1 U1696 ( .A(n1422), .Y(n529) );
NOR2X1 U1697 ( .A(RI[2]), .B(n665), .Y(n1432) );
AND2X2 U1698 ( .A(n1433), .B(N67), .Y(n1434) );
NOR2X1 U1699 ( .A(N2083), .B(N66), .Y(n1433) );
AND2X1 U1700 ( .A(n1434), .B(N68), .Y(n1435) );
AND2X2 U1701 ( .A(n1438), .B(N78), .Y(n1436) );
AND2X1 U1702 ( .A(n1435), .B(N69), .Y(n1437) );
AND2X2 U1703 ( .A(n1437), .B(N70), .Y(n1439) );
NOR2X1 U1704 ( .A(N2094), .B(N2201), .Y(n1438) );
INVX1 U1705 ( .A(N39), .Y(N2005) );
AND2X2 U1706 ( .A(N38), .B(RI[5]), .Y(n1441) );
INVX1 U1707 ( .A(n1441), .Y(n572) );
INVX1 U1708 ( .A(N34), .Y(N2209) );
INVX1 U1709 ( .A(n704), .Y(N1431) );
BUFX2 U1710 ( .A(BUSDAT[6]), .Y(n1442) );
TBUFX1 \BUSDAT_tri4[6] ( .A(n1011), .EN(n1010), .Y(BUSDAT[6]) );
TBUFX1 \BUSDAT_tri3[6] ( .A(n1002), .EN(N390), .Y(BUSDAT[6]) );
TBUFX1 \BUSDAT_tri2[6] ( .A(n993), .EN(n992), .Y(BUSDAT[6]) );
TBUFX1 \BUSDAT_tri[6] ( .A(n984), .EN(n983), .Y(BUSDAT[6]) );
BUFX2 U1711 ( .A(BUSDAT[5]), .Y(n1443) );
TBUFX1 \BUSDAT_tri4[5] ( .A(n1012), .EN(n1010), .Y(BUSDAT[5]) );
TBUFX1 \BUSDAT_tri3[5] ( .A(n1003), .EN(N390), .Y(BUSDAT[5]) );
TBUFX1 \BUSDAT_tri2[5] ( .A(n994), .EN(n992), .Y(BUSDAT[5]) );
TBUFX1 \BUSDAT_tri[5] ( .A(n985), .EN(n983), .Y(BUSDAT[5]) );
INVX2 U1712 ( .A(n1444), .Y(n1446) );
INVX2 U1713 ( .A(n1474), .Y(n1447) );
OAI21X1 U1714 ( .A(n505), .B(n506), .C(n507), .Y(n1448) );
INVX1 U1715 ( .A(N38), .Y(n534) );
INVX2 U1716 ( .A(n1464), .Y(n1449) );
BUFX2 U1717 ( .A(EstPresente[3]), .Y(n1450) );
NAND2X1 U1718 ( .A(n488), .B(BUSDAT[7]), .Y(n1451) );
INVX2 U1719 ( .A(N429), .Y(n1452) );
INVX2 U1720 ( .A(n151), .Y(n1453) );
BUFX2 U1721 ( .A(n84), .Y(n1454) );
INVX2 U1722 ( .A(n1455), .Y(n1456) );
INVX2 U1723 ( .A(n1455), .Y(n1457) );
INVX2 U1724 ( .A(N1725), .Y(n1458) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 137
de Synopsys
INVX2 U1725 ( .A(n987), .Y(n1459) );
INVX1 U1726 ( .A(RI[2]), .Y(n1460) );
INVX1 U1727 ( .A(N42), .Y(n574) );
BUFX2 U1728 ( .A(EstPresente[4]), .Y(n1464) );
BUFX2 U1729 ( .A(N38), .Y(n1465) );
INVX2 U1730 ( .A(n149), .Y(n1466) );
INVX2 U1731 ( .A(N1978), .Y(n1467) );
OAI21X1 U1732 ( .A(n512), .B(n513), .C(N1937), .Y(n1468) );
BUFX2 U1733 ( .A(n189), .Y(n1469) );
BUFX2 U1734 ( .A(RI[5]), .Y(n1470) );
INVX2 U1735 ( .A(n989), .Y(n1471) );
INVX2 U1736 ( .A(n986), .Y(n1472) );
INVX2 U1737 ( .A(n985), .Y(n1473) );
BUFX2 U1738 ( .A(\A[7] ), .Y(n1474) );
BUFX2 U1739 ( .A(N36), .Y(n1475) );
INVX2 U1740 ( .A(n827), .Y(n1476) );
INVX2 U1741 ( .A(n331), .Y(n1477) );
OAI21X1 U1742 ( .A(n503), .B(n504), .C(N1937), .Y(n1478) );
BUFX2 U1743 ( .A(n166), .Y(n1479) );
INVX2 U1744 ( .A(n988), .Y(n1480) );
INVX2 U1745 ( .A(n984), .Y(n1481) );
BUFX2 U1746 ( .A(BUSDAT[4]), .Y(n1482) );
TBUFX1 \BUSDAT_tri4[4] ( .A(n1013), .EN(n1010), .Y(BUSDAT[4]) );
TBUFX1 \BUSDAT_tri3[4] ( .A(n1004), .EN(N390), .Y(BUSDAT[4]) );
TBUFX1 \BUSDAT_tri2[4] ( .A(n995), .EN(n992), .Y(BUSDAT[4]) );
BUFX2 U1747 ( .A(BUSDAT[3]), .Y(n1483) );
TBUFX1 \BUSDAT_tri4[3] ( .A(n1501), .EN(n1010), .Y(BUSDAT[3]) );
TBUFX1 \BUSDAT_tri3[3] ( .A(n1005), .EN(N390), .Y(BUSDAT[3]) );
TBUFX1 \BUSDAT_tri2[3] ( .A(n996), .EN(n992), .Y(BUSDAT[3]) );
INVX1 U1748 ( .A(BUSPC[0]), .Y(n1008) );
INVX2 U1749 ( .A(N533), .Y(n1484) );
INVX1 U1750 ( .A(N642), .Y(N533) );
INVX2 U1751 ( .A(n301), .Y(n1485) );
INVX1 U1752 ( .A(RI[5]), .Y(n1486) );
BUFX2 U1753 ( .A(n170), .Y(n1487) );
BUFX2 U1754 ( .A(n170), .Y(n1488) );
OAI21X1 U1755 ( .A(N437), .B(n830), .C(N1978), .Y(n1489) );
INVX1 U1756 ( .A(N1941), .Y(n151) );
INVX1 U1757 ( .A(n1422), .Y(n1492) );
BUFX2 U1758 ( .A(BUSDAT[7]), .Y(n1493) );
TBUFX1 \BUSDAT_tri4[7] ( .A(n1009), .EN(n1010), .Y(BUSDAT[7]) );
TBUFX1 \BUSDAT_tri3[7] ( .A(n1000), .EN(N390), .Y(BUSDAT[7]) );
TBUFX1 \BUSDAT_tri2[7] ( .A(n991), .EN(n992), .Y(BUSDAT[7]) );
TBUFX1 \BUSDAT_tri[7] ( .A(n982), .EN(n983), .Y(BUSDAT[7]) );
TBUFX1 LE_tri ( .A(n1053), .EN(N1428), .Y(LE) );
TBUFX1 \RDR_tri[0] ( .A(n1051), .EN(N1425), .Y(BUSDIR[0]) );
TBUFX1 \RDR_tri[1] ( .A(n1049), .EN(N1422), .Y(BUSDIR[1]) );
TBUFX1 \RDR_tri[2] ( .A(n1047), .EN(N1419), .Y(BUSDIR[2]) );
TBUFX1 \RDR_tri[3] ( .A(n1045), .EN(N1416), .Y(BUSDIR[3]) );
TBUFX1 \RDR_tri[4] ( .A(n1043), .EN(N1413), .Y(BUSDIR[4]) );
TBUFX1 \RDR_tri[5] ( .A(n1041), .EN(N1410), .Y(BUSDIR[5]) );
TBUFX1 \RDR_tri[6] ( .A(n1039), .EN(N1407), .Y(BUSDIR[6]) );
TBUFX1 \RDR_tri[7] ( .A(n1037), .EN(N1404), .Y(BUSDIR[7]) );
TBUFX1 \RDR_tri[8] ( .A(n1035), .EN(N1401), .Y(BUSDIR[8]) );
TBUFX1 \RDR_tri[9] ( .A(n1033), .EN(N1398), .Y(BUSDIR[9]) );
TBUFX1 \RDR_tri[10] ( .A(n1031), .EN(N1395), .Y(BUSDIR[10]) );
TBUFX1 \RDR_tri[11] ( .A(n1029), .EN(N1392), .Y(BUSDIR[11]) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 138
de Synopsys
TBUFX1 \RDR_tri[12] ( .A(n1027), .EN(N1389), .Y(BUSDIR[12]) );
TBUFX1 \RDR_tri[13] ( .A(n1025), .EN(N1386), .Y(BUSDIR[13]) );
TBUFX1 \RDR_tri[14] ( .A(n1023), .EN(N1383), .Y(BUSDIR[14]) );
TBUFX1 \RDR_tri[15] ( .A(n1021), .EN(N1380), .Y(BUSDIR[15]) );
TBUFX1 M_tri ( .A(n1019), .EN(N674), .Y(M) );
TBUFX1 CM_tri ( .A(n1018), .EN(N674), .Y(CM) );
TBUFX1 \BUSDAT_tri4[0] ( .A(n1017), .EN(n1010), .Y(BUSDAT[0]) );
TBUFX1 \BUSDAT_tri3[0] ( .A(n1008), .EN(N390), .Y(BUSDAT[0]) );
TBUFX1 \BUSDAT_tri2[0] ( .A(n999), .EN(n992), .Y(BUSDAT[0]) );
TBUFX1 \BUSDAT_tri[0] ( .A(n990), .EN(n983), .Y(BUSDAT[0]) );
XNOR2X1 U1759 ( .A(n1494), .B(BUSPC[15]), .Y(N1828) );
NAND2X1 U1760 ( .A(n1260), .B(BUSPC[14]), .Y(n1494) );
XOR2X1 U1761 ( .A(n1260), .B(BUSPC[14]), .Y(N1827) );
XOR2X1 U1762 ( .A(n1302), .B(BUSPC[13]), .Y(N1826) );
XOR2X1 U1763 ( .A(n1408), .B(BUSPC[12]), .Y(N1825) );
NOR2X1 U1764 ( .A(BUSPC[14]), .B(n1496), .Y(n1495) );
XNOR2X1 U1765 ( .A(n1382), .B(BUSPC[14]), .Y(N1689) );
OAI21X1 U1766 ( .A(n1012), .B(n1497), .C(n1496), .Y(N1688) );
OR2X2 U1767 ( .A(BUSPC[13]), .B(n1498), .Y(n1496) );
INVX2 U1768 ( .A(n1498), .Y(n1497) );
OAI21X1 U1769 ( .A(n1013), .B(n1499), .C(n1498), .Y(N1687) );
OR2X2 U1770 ( .A(n1526), .B(BUSPC[12]), .Y(n1498) );
INVX2 U1771 ( .A(n1526), .Y(n1499) );
INVX2 U1772 ( .A(n1533), .Y(n1532) );
INVX2 U1773 ( .A(n1531), .Y(n1529) );
INVX2 U1774 ( .A(n1528), .Y(n1527) );
OR2X2 U1775 ( .A(n1528), .B(BUSPC[11]), .Y(n1526) );
OR2X2 U1776 ( .A(n1531), .B(BUSPC[10]), .Y(n1528) );
OR2X2 U1777 ( .A(n1533), .B(BUSPC[9]), .Y(n1531) );
OR2X2 U1778 ( .A(BUSPC[8]), .B(\add_32/carry[8] ), .Y(n1533) );
NOR2X1 U1779 ( .A(N1725), .B(n1500), .Y(\r262/carry[1] ) );
XOR2X1 U1780 ( .A(n1294), .B(n1501), .Y(N1824) );
XOR2X1 U1781 ( .A(BUSPC[10]), .B(n1406), .Y(N1823) );
XOR2X1 U1782 ( .A(n1390), .B(n1503), .Y(N1822) );
XOR2X1 U1783 ( .A(\add_32_2/carry[8] ), .B(BUSPC[8]), .Y(N1821) );
NOR2X1 U1784 ( .A(n1505), .B(n1506), .Y(n1504) );
INVX2 U1785 ( .A(\P[6] ), .Y(n1506) );
NAND2X1 U1786 ( .A(\P[5] ), .B(n1334), .Y(n1505) );
NAND2X1 U1787 ( .A(\P[3] ), .B(n1333), .Y(n1507) );
NAND2X1 U1788 ( .A(\P[1] ), .B(\r258/carry[1] ), .Y(n1508) );
INVX2 U1789 ( .A(\r263/carry[8] ), .Y(N1759) );
OAI21X1 U1790 ( .A(BUSDAT[0]), .B(N1725), .C(\r263/carry[1] ),
.Y(N1751) );
NAND2X1 U1791 ( .A(BUSDAT[0]), .B(N1725), .Y(\r263/carry[1] ) );
NOR2X1 U1792 ( .A(n1509), .B(n1510), .Y(N1733) );
NAND2X1 U1793 ( .A(\A[6] ), .B(n1474), .Y(n1510) );
XOR2X1 U1794 ( .A(\A[7] ), .B(n1511), .Y(N1732) );
NOR2X1 U1795 ( .A(n1509), .B(n984), .Y(n1511) );
XOR2X1 U1796 ( .A(n1509), .B(n984), .Y(N1731) );
NAND2X1 U1797 ( .A(\A[5] ), .B(n1319), .Y(n1509) );
XOR2X1 U1798 ( .A(\A[5] ), .B(n1319), .Y(N1730) );
XOR2X1 U1799 ( .A(n1512), .B(n986), .Y(N1729) );
NAND2X1 U1800 ( .A(\A[3] ), .B(n1318), .Y(n1512) );
XOR2X1 U1801 ( .A(\A[3] ), .B(n1318), .Y(N1728) );
XOR2X1 U1802 ( .A(n1513), .B(n988), .Y(N1727) );
NAND2X1 U1803 ( .A(\A[1] ), .B(\sub_547/carry[1] ), .Y(n1513) );
XOR2X1 U1804 ( .A(\sub_547/carry[1] ), .B(n1471), .Y(N1726) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 139
de Synopsys
INVX2 U1805 ( .A(\sub_547/carry[1] ), .Y(N1725) );
NOR2X1 U1806 ( .A(n1515), .B(n1516), .Y(n1514) );
INVX2 U1807 ( .A(PC[14]), .Y(n1516) );
NAND2X1 U1808 ( .A(PC[13]), .B(n1298), .Y(n1515) );
INVX2 U1809 ( .A(PC[12]), .Y(n1518) );
NAND2X1 U1810 ( .A(PC[11]), .B(n1297), .Y(n1517) );
INVX2 U1811 ( .A(PC[10]), .Y(n1520) );
NAND2X1 U1812 ( .A(PC[9]), .B(n1296), .Y(n1519) );
INVX2 U1813 ( .A(PC[8]), .Y(n1522) );
NAND2X1 U1814 ( .A(PC[7]), .B(n1301), .Y(n1521) );
NAND2X1 U1815 ( .A(PC[5]), .B(n1300), .Y(n1523) );
NAND2X1 U1816 ( .A(PC[3]), .B(n1299), .Y(n1524) );
NAND2X1 U1817 ( .A(PC[1]), .B(PC[0]), .Y(n1525) );
OAI21X1 U1818 ( .A(n1527), .B(n1501), .C(n1526), .Y(N1686) );
INVX2 U1819 ( .A(BUSPC[11]), .Y(n1501) );
OAI21X1 U1820 ( .A(n1529), .B(n1530), .C(n1528), .Y(N1685) );
INVX2 U1821 ( .A(BUSPC[10]), .Y(n1530) );
OAI21X1 U1822 ( .A(n1532), .B(n1503), .C(n1531), .Y(N1684) );
INVX2 U1823 ( .A(BUSPC[9]), .Y(n1503) );
OAI21X1 U1824 ( .A(n1017), .B(n1534), .C(n1533), .Y(N1683) );
XOR2X1 U1825 ( .A(BUSPC[0]), .B(n1500), .Y(n1535) );
INVX2 U1826 ( .A(BUSDAT[0]), .Y(n1500) );
INVX2 U1827 ( .A(\r258/carry[1] ), .Y(N1760) );
XNOR2X1 \sub_547/U1_A_7 ( .A(n1474), .B(\sub_547/carry[7] ),
.Y(N1723) );
OR2X2 \sub_547/U1_B_6 ( .A(\A[6] ), .B(\sub_547/carry[6] ), .Y(
\sub_547/carry[7] ) );
XNOR2X1 \sub_547/U1_A_6 ( .A(\A[6] ), .B(\sub_547/carry[6] ),
.Y(N1722) );
OR2X2 \sub_547/U1_B_5 ( .A(\A[5] ), .B(\sub_547/carry[5] ), .Y(
\sub_547/carry[6] ) );
XNOR2X1 \sub_547/U1_A_5 ( .A(\A[5] ), .B(\sub_547/carry[5] ),
.Y(N1721) );
OR2X2 \sub_547/U1_B_4 ( .A(\A[4] ), .B(\sub_547/carry[4] ), .Y(
\sub_547/carry[5] ) );
XNOR2X1 \sub_547/U1_A_4 ( .A(\A[4] ), .B(\sub_547/carry[4] ),
.Y(N1720) );
OR2X2 \sub_547/U1_B_3 ( .A(\A[3] ), .B(\sub_547/carry[3] ), .Y(
\sub_547/carry[4] ) );
XNOR2X1 \sub_547/U1_A_3 ( .A(\A[3] ), .B(\sub_547/carry[3] ),
.Y(N1719) );
OR2X2 \sub_547/U1_B_2 ( .A(\A[2] ), .B(\sub_547/carry[2] ), .Y(
\sub_547/carry[3] ) );
XNOR2X1 \sub_547/U1_A_2 ( .A(\A[2] ), .B(\sub_547/carry[2] ),
.Y(N1718) );
OR2X2 \sub_547/U1_B_1 ( .A(\A[1] ), .B(\sub_547/carry[1] ), .Y(
\sub_547/carry[2] ) );
XNOR2X1 \sub_547/U1_A_1 ( .A(\A[1] ), .B(n1458), .Y(N1717) );
FAX1 \add_32_2/U1_7 ( .A(BUSPC[7]), .B(n1244), .C(BUSDAT[7]), .YC(
\add_32_2/carry[8] ), .YS(N1820) );
FAX1 \add_32_2/U1_6 ( .A(BUSPC[6]), .B(BUSDAT[6]),
.C(\add_32_2/carry[6] ),
.YC(\add_32_2/carry[7] ), .YS(N1819) );
FAX1 \add_32_2/U1_5 ( .A(BUSPC[5]), .B(BUSDAT[5]),
.C(\add_32_2/carry[5] ),
.YC(\add_32_2/carry[6] ), .YS(N1818) );
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 140
de Synopsys
FAX1 \add_32_2/U1_4 ( .A(BUSPC[4]), .B(BUSDAT[4]),
.C(\add_32_2/carry[4] ),
.YC(\add_32_2/carry[5] ), .YS(N1817) );
FAX1 \add_32_2/U1_3 ( .A(BUSPC[3]), .B(BUSDAT[3]),
.C(\add_32_2/carry[3] ),
.YC(\add_32_2/carry[4] ), .YS(N1816) );
FAX1 \add_32_2/U1_2 ( .A(BUSPC[2]), .B(n1445), .C(\add_32_2/carry[2]
),
.YC(\add_32_2/carry[3] ), .YS(N1815) );
FAX1 \add_32/U1_7 ( .A(BUSPC[7]), .B(BUSDAT[7]), .C(\add_32/carry[7]
),
.YC(\add_32/carry[8] ), .YS(N1682) );
FAX1 \add_32/U1_6 ( .A(BUSPC[6]), .B(BUSDAT[6]), .C(\add_32/carry[6]
),
.YC(\add_32/carry[7] ), .YS(N1681) );
FAX1 \add_32/U1_5 ( .A(BUSPC[5]), .B(BUSDAT[5]), .C(\add_32/carry[5]
),
.YC(\add_32/carry[6] ), .YS(N1680) );
FAX1 \add_32/U1_4 ( .A(BUSPC[4]), .B(BUSDAT[4]), .C(\add_32/carry[4]
),
.YC(\add_32/carry[5] ), .YS(N1679) );
FAX1 \add_32/U1_3 ( .A(BUSPC[3]), .B(BUSDAT[3]), .C(\add_32/carry[3]
),
.YC(\add_32/carry[4] ), .YS(N1678) );
FAX1 \r263/U2_7 ( .A(\A[7] ), .B(\r263/B_not[7] ), .C(\r263/carry[7]
),
.YC(\r263/carry[8] ), .YS(N1758) );
FAX1 \r263/U2_6 ( .A(\A[6] ), .B(\r263/B_not[6] ), .C(\r263/carry[6]
),
.YC(\r263/carry[7] ), .YS(N1757) );
FAX1 \r263/U2_5 ( .A(\A[5] ), .B(\r263/B_not[5] ), .C(\r263/carry[5]
),
.YC(\r263/carry[6] ), .YS(N1756) );
FAX1 \r263/U2_4 ( .A(\A[4] ), .B(\r263/B_not[4] ), .C(\r263/carry[4]
),
.YC(\r263/carry[5] ), .YS(N1755) );
FAX1 \r263/U2_3 ( .A(\A[3] ), .B(\r263/B_not[3] ), .C(\r263/carry[3]
),
.YC(\r263/carry[4] ), .YS(N1754) );
FAX1 \r263/U2_2 ( .A(\A[2] ), .B(n1444), .C(\r263/carry[2] ), .YC(
\r263/carry[3] ), .YS(N1753) );
FAX1 \r263/U2_1 ( .A(\A[1] ), .B(n1461), .C(\r263/carry[1] ), .YC(
\r263/carry[2] ), .YS(N1752) );
FAX1 \r262/U1_7 ( .A(\A[7] ), .B(BUSDAT[7]), .C(\r262/carry[7] ),
.YC(N1750), .YS(N1749) );
FAX1 \r262/U1_6 ( .A(\A[6] ), .B(BUSDAT[6]), .C(\r262/carry[6] ),
.YC(
\r262/carry[7] ), .YS(N1748) );
FAX1 \r262/U1_5 ( .A(\A[5] ), .B(n1443), .C(\r262/carry[5] ), .YC(
\r262/carry[6] ), .YS(N1747) );
FAX1 \r262/U1_4 ( .A(\A[4] ), .B(BUSDAT[4]), .C(\r262/carry[4] ),
.YC(
\r262/carry[5] ), .YS(N1746) );
FAX1 \r262/U1_3 ( .A(\A[3] ), .B(BUSDAT[3]), .C(\r262/carry[3] ),
.YC(
\r262/carry[4] ), .YS(N1745) );
FAX1 \r262/U1_2 ( .A(\A[2] ), .B(n1445), .C(\r262/carry[2] ), .YC(
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 141
de Synopsys
\r262/carry[3] ), .YS(N1744) );
FAX1 \r262/U1_1 ( .A(\A[1] ), .B(n1463), .C(\r262/carry[1] ), .YC(
\r262/carry[2] ), .YS(N1743) );
XNOR2X1 \r258/U1_A_7 ( .A(\P[7] ), .B(\r258/carry[7] ), .Y(N1593) );
OR2X2 \r258/U1_B_6 ( .A(\P[6] ), .B(\r258/carry[6] ),
.Y(\r258/carry[7] ));
XNOR2X1 \r258/U1_A_6 ( .A(\P[6] ), .B(\r258/carry[6] ), .Y(N1592) );
OR2X2 \r258/U1_B_5 ( .A(\P[5] ), .B(\r258/carry[5] ),
.Y(\r258/carry[6] ));
XNOR2X1 \r258/U1_A_5 ( .A(\P[5] ), .B(\r258/carry[5] ), .Y(N1591) );
OR2X2 \r258/U1_B_4 ( .A(\P[4] ), .B(\r258/carry[4] ),
.Y(\r258/carry[5] ));
XNOR2X1 \r258/U1_A_4 ( .A(\P[4] ), .B(\r258/carry[4] ), .Y(N1590) );
OR2X2 \r258/U1_B_3 ( .A(\P[3] ), .B(\r258/carry[3] ),
.Y(\r258/carry[4] ));
XNOR2X1 \r258/U1_A_3 ( .A(\P[3] ), .B(\r258/carry[3] ), .Y(N1589) );
OR2X2 \r258/U1_B_2 ( .A(\P[2] ), .B(\r258/carry[2] ),
.Y(\r258/carry[3] ));
XNOR2X1 \r258/U1_A_2 ( .A(\P[2] ), .B(\r258/carry[2] ), .Y(N1588) );
OR2X2 \r258/U1_B_1 ( .A(\P[1] ), .B(\r258/carry[1] ),
.Y(\r258/carry[2] ));
XNOR2X1 \r258/U1_A_1 ( .A(\P[1] ), .B(\r258/carry[1] ), .Y(N1587) );
endmodule
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 142
de Synopsys
ANEXOS
Anexo 1. Características de una celda Flip-Flop D de la librería
AMI 0.5
Icon Diagram
Truth Table
Inputs
Cell Width (µm)
Outputs
Width
D CLK Q QB
0
[01]
0
1
1
[01]
1
0
?
[11]
N
N
?
[?0]
N
N
4.79
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 143
de Synopsys
Schematic Diagram
Capacitance (pF) (@ slew=0.5ns)
D
CLK
0.0249564
0.0177754
Propagation Delays (ns) (@ load=0.1pF, slew=0.5ns)
CLK/ Q/
CLK/ QB\
CLK/ Q\
CLK/ QB/
0.64995
0.63749
0.77216
0.70158
Output Transitions (ns) (@ load=0.1pF, slew=0.5ns)
CLK/ Q/
CLK/ QB\
CLK/ Q\
CLK/ QB/
0.3992
0.51706
0.41585
0.49259
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 144
de Synopsys
Linear Equation Coefficients
Tpd = Kdelay0 + Kslew * SLEW + Kload * LOAD
Parameter
CLK/ Q/
CLK/ QB\
CLK/ Q\ CLK/ QB/
Kdelay0 (ns)
0.437418
0.385614
0.530161
0.471643
Kslew (ns/ns) 0.0980419 0.0975647 0.108985
0.108944
Kload (ns/pF)
1.70306
1.57216
1.97321
1.81823
Setup Constraints (ns) (@ slew=0.5ns)
D/ CLK/
D\ CLK/
0.1875
0.234375
Hold Constraints (ns) (@ slew=0.5ns)
D/ CLK/
D\ CLK/
0.046875
0.234375
Minimum Pulse Width Constraints (ns)
CLK\/
CLK/\
0.322266
0.284598
Dissipated Energy/Input Transition (pJ)
CLK\
CLK/
D/
D\
5.0361
4.67595
3.72882
3.52974
Static Power Information (pW)
Static Power
698.26
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 145
de Synopsys
Layout Diagram
Detailed Capacitance Information
Capacitances (pF); Cell: dff; Terminal: D
Slew (D)
D/
D\
0.05
0.0225943
0.0223818
0.15
0.0237119
0.0235142
0.375
0.0245983
0.0242327
1
0.0263886
0.0259523
1.5
0.0266236
0.0264634
Capacitances (pF); Cell: dff; Terminal: CLK
Slew (CLK)
CLK /
CLK \
0.05
0.0161341
0.0157511
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 146
de Synopsys
0.15
0.0166169
0.0162123
0.375
0.017458
0.0170412
1
0.0190448
0.0189809
1.5
0.0191536
0.019216
Detailed Propagation Delay Information
Propagation Delays (ns); Cell: dff; Test: CLK/ Q/
Load (Q)
0.05
Slew (CLK)
0
0.02
0.04
0.1
0.4342
0.46943
0.5012
0.59272
0.25 0.46054 0.49576 0.52753 0.61905
0.5
0.49146 0.52668 0.55844 0.64995
1.5
0.57984 0.61505 0.64679 0.73822
Propagation Delays (ns); Cell: dff; Test: CLK/ QB\
Load (QB)
0
0.02
0.04
0.1
0.4258
0.4667
0.58055
0.25 0.40757 0.45209 0.49297
0.6068
0.05 0.38125
Slew (CLK)
0.5
0.43847
0.4829
0.52373 0.63749
1.5
0.5266
0.57086 0.61153 0.72497
Propagation Delays (ns); Cell: dff; Test: CLK/ Q\
Load (Q)
0
0.02
0.04
0.1
Slew (CLK) 0.05 0.52808 0.56828 0.60504 0.71118
0.25
0.5557
0.59591 0.63266
0.7388
0.5
0.58906 0.62926 0.66602 0.77216
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 147
de Synopsys
1.5
0.68912 0.72932 0.76608 0.87223
Propagation Delays (ns); Cell: dff; Test: CLK/ QB/
Load (QB)
0
0.02
0.04
0.1
0.05 0.46855 0.50779 0.54309 0.64062
Slew (CLK)
0.25 0.49618 0.53541 0.57071 0.66824
0.5
0.52954 0.56876 0.60406 0.70158
1.5
0.62963 0.66878 0.70404 0.80155
Detailed Output Transition Information
Output Transitions (ns); Cell: dff; Test: CLK/ Q/
Load (Q)
0
0.05
Slew (CLK)
0.08403
0.02
0.04
0.1
0.14339 0.20548 0.39915
0.25 0.084061 0.14341
0.2055
0.39916
0.5
0.084157 0.14349 0.20557
0.3992
1.5
0.085036 0.14418 0.20609 0.39949
Output Transitions (ns); Cell: dff; Test: CLK/ QB\
Load (QB)
0
0.02
0.04
0.1
0.05 0.18655 0.25215 0.31756 0.51635
Slew (CLK)
0.25 0.18697 0.25248 0.31784 0.51653
0.5
0.18819 0.25347 0.31866 0.51706
1.5
0.19576 0.26025 0.32468 0.52124
Output Transitions (ns); Cell: dff; Test: CLK/ Q\
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 148
de Synopsys
Load (Q)
0
0.02
0.04
0.1
0.05 0.078395 0.14402 0.21065 0.41585
Slew (CLK)
0.25
0.07839
0.14402 0.21065 0.41585
0.5
0.078376 0.14403 0.21064 0.41585
1.5
0.078274 0.14393 0.21058 0.41582
Output Transitions (ns); Cell: dff; Test: CLK/ QB/
Load (QB)
0
0.02
0.04
0.1
0.05 0.18863 0.24811 0.30783 0.49264
Slew (CLK)
0.25 0.18862
0.2481
0.30782 0.49264
0.5
0.18855 0.24803 0.30776 0.49259
1.5
0.18789 0.24744 0.30724 0.49223
Detailed Setup Constraint Information
Setup Constraints (ns); Cell: dff; Test: D/ CLK/
Slew (CLK)
Slew (D)
0.05
0.5
1.5
0.05
0.234375
0.1875
0.140625
0.5
0.28125
0.1875
0.140625
1.5
0.328125
0.28125
0.234375
Setup Constraints (ns); Cell: dff; Test: D\ CLK/
Slew (CLK)
0.05
0.5
1.5
Slew (D) 0.05
0.234375
0.234375
0.28125
0.5
0.234375
0.234375
0.28125
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 149
de Synopsys
1.5
0.328125
0.28125
0.375
Detailed Hold Constraint Information
Hold Constraints (ns); Cell: dff; Test: D/ CLK/
Slew (CLK)
Slew (D)
0.05
0.5
1.5
0.05
0
0
0.09375
0.5
0
0.046875
0.09375
1.5
0
0
0.09375
Hold Constraints (ns); Cell: dff; Test: D\ CLK/
Slew (CLK)
0.05
0.05 0.140625
Slew (D)
0.5
0.1875
1.5
0.328125
0.5
1.5
0.1875
0.28125
0.234375 0.328125
0.375
0.46875
Detailed Power Information
Dissipated Energy/Input Transition (pJ); Cell:dff; D/; State: CLK=0, Q=0, QB=1
Slew (D)
0.05
0.25
0.5
1.5
2.23806
2.21928
2.39406
3.72882
Dissipated Energy/Input Transition (pJ); Cell:dff; D/; State: CLK=0, Q=1, QB=0
Slew (D)
0.05
0.25
0.5
1.5
2.01036
2.00178
2.18592
3.53568
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 150
de Synopsys
Dissipated Energy/Input Transition (pJ); Cell:dff; D/; State: CLK=1, Q=0, QB=1
Slew (D)
0.05
0.25
0.5
1.5
0.170942
0.141944
0.134294
0.127202
Dissipated Energy/Input Transition (pJ); Cell:dff; D\; State: CLK=0, Q=0, QB=1
Slew (D)
0.05
0.25
0.5
1.5
1.90014
1.89936
2.11068
3.52956
Dissipated Energy/Input Transition (pJ); Cell:dff; D\; State: CLK=0, Q=1, QB=0
Slew (D)
0.05
0.25
0.5
1.5
1.90044
1.89954
2.11092
3.52974
Dissipated Energy/Input Transition (pJ); Cell:dff; D\; State: CLK=1, Q=1, QB=0
Slew (D)
0.05
0.25
0.5
1.5
0.218198
0.173516
0.159338
0.146
Dissipated Energy/Input Transition (pJ); Cell:dff; CLK/ Q\ QB/; State: D=0
Load (Q, QB)
Slew (CLK)
0
0.02
0.04
0.1
0.05
2.22237
2.53809
2.87109
3.91503
0.25
2.25603
2.57181
2.90481
3.94857
0.5
2.35818
2.67396
3.00702
4.05102
1.5
2.90082
3.21678
3.55038
4.59438
Dissipated Energy/Input Transition (pJ); Cell:dff; CLK/ Q/ QB\; State: D=1
Load (Q, QB)
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 151
de Synopsys
Slew (CLK)
0
0.02
0.04
0.1
0.05
2.22048
2.55054
2.89758
3.97272
0.25
2.25396
2.58366
2.9304
4.00524
0.5
2.36013
2.68875
3.03477
4.10847
1.5
2.94645
3.26895
3.61035
4.67595
Dissipated Energy/Input Transition (pJ); Cell:dff; CLK/; State: D=0, Q=0, QB=1
Slew (CLK)
0.05
0.25
0.5
1.5
1.74996
1.81434
2.01402
3.09114
Dissipated Energy/Input Transition (pJ); Cell:dff; CLK/; State: D=1, Q=1, QB=0
Slew (CLK)
0.05
0.25
0.5
1.5
1.75608
1.82064
2.02122
3.10128
Dissipated Energy/Input Transition (pJ); Cell:dff; CLK\; State: D=0, Q=0, QB=1
Slew (CLK)
0.05
0.25
0.5
1.5
1.71822
1.80804
2.03028
3.13896
Dissipated Energy/Input Transition (pJ); Cell:dff; CLK\; State: D=0, Q=1, QB=0
Slew (CLK)
0.05
0.25
0.5
1.5
3.63762
3.71358
3.92964
5.0361
Dissipated Energy/Input Transition (pJ); Cell:dff; CLK\; State: D=1, Q=0, QB=1
Slew (CLK)
0.05
0.25
0.5
1.5
3.45084
3.50304
3.7224
4.86666
Diciembre del 2004
IE-0502 Síntesis y optimización de la CPUCR en la librería AMI 0.5 micrones con herramientas 152
de Synopsys
Dissipated Energy/Input Transition (pJ); Cell:dff; CLK\; State: D=1, Q=1, QB=0
Slew (CLK)
0.05
0.25
0.5
1.5
1.84476
1.93098
2.14848
3.25128
Static Power (pW); Cell:dff
D=0, CLK=0, Q=0, QB=1 690.45
D=0, CLK=0, Q=1, QB=0 697.58
D=0, CLK=1, Q=0, QB=1 675.51
D=0, CLK=1, Q=1, QB=0 698.26
D=1, CLK=0, Q=0, QB=1 685.05
D=1, CLK=0, Q=1, QB=0 675.54
D=1, CLK=1, Q=0, QB=1 684.62
D=1, CLK=1, Q=1, QB=0 690.73
Diciembre del 2004
Descargar