Escolar Documentos
Profissional Documentos
Cultura Documentos
4 REGISTROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.1 Registros simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4.2 Array de registros de propsito general (R) . . . . . . . . . . . . . . . . . . . . . . 8 4.3 Contador de desplazamientos (n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
INTRODUCCIN
INTRODUCCIN
El objetivo de este documento es servir como gua para la implementacin mediante el
paquete Alliance del SRC (Simple Risc Computer) objeto de la asignatura. Se proporciona informacin sobre el proceso de diseo y verificacin de cada componente del SRC y de los pasos necesarios para obtener el layout final del circuito completo. En todo momento se asume que el alumno conoce tanto la estructura del SRC como el uso bsico de las herramientas del entorno Alliance. El entorno permite diferentes alternativas de diseo. La que aqu se proporciona busca la mxima sencillez y se basa fundamentalmente en la descripcin a alto nivel de los diferentes componentes y en el empleo de la sntesis lgica. Otras alternativas pueden hacer uso de los diferentes generadores de mdulos incluidos en el entorno Alliance. El alumno debe sentirse libre para explorar estas herramientas y buscar otras alternativas de diseo. El esfuerzo realizado en este sentido ser valorado. El diseo se compone de los siguientes mdulos: Registro temporal (A) Registro acumulador (C) Registro de direcciones de memoria (MA) Registro de datos de memoria (MD) Registro contador de programa (PC) Registro de almacenamiento del PC durante interrupcin (IPC) Registro de vectores de interrupcin (ISR) Registro de instrucciones (IR) Registro evaluador de la condicin de salto (cond) Array de 32 registros de propsito general (R[31..0]) Unidad Aritmtico-Lgica (ALU)
GUAS GENERALES
Contador de desplazamientos (n) Unidad de control (control) Procesador completo (SRC) La implementacin de cada mdulo se har en base a la representacin entrada/salida y tabla de comportamiento de cada elemento. A partir de ah, se realizar, cuando sea posible, una descripcin de comportamiento en VHDL de Alliance (ficheros .vbe) que corresponda con el funcionamiento del mdulo. Se generarn as mismo aquellos ficheros de entrada a las herramientas de Alliance que sean precisos para cubrir las diferentes etapas del proceso de diseo: patrones de test, etc. A modo de ejemplo, en un apartado posterior, se facilita la descripcin de comportamiento correspondiente al registro IR (fichero ir.vbe).
GUAS GENERALES
Con objeto de facilitar la evaluacin de los diseos, se han de seguir unos criterios
comunes relativos, principalmente, a la forma de nombrar los ficheros y las seales externas de cada circuito. Estos criterios son lo siguientes: Emplear para las seales de entrada/salida los nombres que se indican en los respectivos esquemas de los registros. Agrupar los cheros relativos a cada elemento dentro de un sub directorio. El nombre de ese sub directorio debe corresponder con el del elemento al que se reere. Nombrar los cheros y directorios en minsculas y con el nombre del mdulo al que hacen referencia. Ej.: ir.vbe, ir.vst, ir.pat, ... Cuando se emplee una herramienta para generar un chero con la misma extensin, elegir un nombre del chero de salida que reeje el proceso por el que se ha obtenido. Ej.: Proceso Optimizacin con bop Simulacin de chero vbe Sntesis lgica Entrada(s) ir.vbe ir.vbe, ir.pat ir.vbe Salida ir_bop.vbe ir_vbe_out.pat ir.vst
PROCESO DE DISEO
Al final de este documento se encuentran dos apndices con informacin relativa a la distribucin de los ficheros en el rbol de directorios y a los nombres de las seales de entrada/salida a emplear en cada mdulo (entidades).
PROCESO DE DISEO
El proceso de diseo del SRC se compone de las siguientes fases:
Diseo de los diferentes mdulos: registros, unidad de control, etc. Conexin de los mdulos: descripcin del SRC completo. Generacin del layout del SRC completo. Colocacin de PADS. El diseo de cada mdulo responde a una serie de pasos que se describen a continuacin, cuya finalidad es obtener una descripcin estructural (vst) del componente. El resto de las fases se describen en el apartado de integracin del SRC.
PROCESO DE DISEO
deber contener un nmero suciente de patrones que permita vericar la correcta realizacin de las diferentes operaciones del mdulo. 5. Simulacin con asimut tanto del chero original como del optimizado, comprobando que ambos generan los mismos resultados. 6. Sntesis lgica con scmap y simulacin del chero estructural, en su caso.
3.2 Alternativas
El proceso anterior es aplicable a la mayora de los registros y mdulos que componen el SRC. En ocasiones es posible emplear diversos generadores de mdulos que incorpora el entorno Alliance. En este caso la estructura del proceso de diseo puede variar incluso de forma muy significativa respecto de como se describe en esta gua, siendo posible la obtencin de alternativas de diseo ms eficientes y compactas. Como se mencion anteriormente, el alumno puede explorar estas vas basndose en la documentacin y ejemplos suministrados con el paquete Alliance, pudiendo para ello realizar las modificaciones que estime oportunas en el diseo, valorndose su esfuerzo en este sentido.
REGISTROS
La herramienta scmap no maneja adecuadamente los cheros vbe que contienen dos estructuras block con asignamientos a la misma seal. En concreto, el ejemplo del multiplexor que se muestra en man vbe no es generado correctamente por scmap. La alternativa que se propone es emplear una estructura with-select que asigne a una seal intermedia, y luego asignar sta con una sola estructura block. En las estructuras block se recomienda usar condiciones simples del tipo: block (CK = '0') block (CK = '0' and not CK'stable) - Disparo por nivel - Disparo por anco
REGISTROS
En el SRC se emplean multitud de registros simples, un array de 32 registros de propsito
general y un contador empleado en las operaciones de desplazamiento. Trataremos estos tres casos por separado.
REGISTROS
db<31..0>
IR<31..0>
Tabla de comportamiento
c1 0 0 1 0 0 0 0 *1 *2 c2 0 0 0 1 0 0 0 gra 0 0 0 0 1 0 0 grb 0 0 0 0 0 1 0 grc 0 0 0 0 0 0 1 0 0 0 0 0 IRin IR<- db 0 IR IN IR IR IR IR IR H.I. IN *1 *2. H.I. H.I. H.I. sel_reg 0 0 0 0 IR<26..22> IR<21..17> IR<16..12> op_code IR<31..27> IR<31..27> IR<31..27> IR<31..27> IR<31..27> IR<31..27> IR<31..27> c3 IR<2..0> IR<2..0> IR<2..0> IR<2..0> IR<2..0> IR<2..0> IR<2..0>
:inout wor_vector(31 downto 0) bus; :in bit; :in bit; :in bit; :in bit; :in bit; :out bit_vector(4 downto 0); :out bit_vector(2 downto 0); :out bit_vector(4 downto 0); :in bit; :in bit; :in bit
REGISTROS
architecture funcional of IR is -- Sennales internas signal irq :reg_vector (31 downto 0) register; signal pre_db :bit_vector (15 downto 0); begin -- Carga en paralelo REG_IR: block (IRin=0 and not IRinstable) begin irq <= guarded db; end block REG_IR; -- Salida de seleccion de registros with gra & grb & grc select sel_reg <= irq(26 downto 22) when "100", irq(21 downto 17) when "010", irq(16 downto 12) when "001", "00000" -- Escritura en el bus -- esto deberia funcionar, pero no es tratado correctamente por la -- sintesis logica (scmap) ---------c1_driven: block (c1&c2="10") begin db <= guarded ...; end block; c2_driven: block (c1&c2="01") begin db <= guarded ...; end block; -- almacenamiento
when others;
-- solucion alternativa empleando sennal auxiliar "pre_db" with c1&c2 select pre_db <= irq(16)&irq(16)&irq(16)&irq(16)&irq(16)&irq(16)&irq(16)&irq(16)& irq(16)&irq(16)&irq(16)&irq(16)&irq(16)&irq(16)&irq(16)&irq(16) when "01", irq(21)&irq(21)&irq(21)&irq(21)&irq(21)&irq(21)&irq(21)&irq(21)& irq(21)&irq(21)&irq(21)&irq(20 downto 16) when "10", X"0000" when others; db_out: block (c1 or c2=1) begin db(31 downto 16) <= guarded pre_db; db(15 downto 0) <= guarded irq(15 downto 0); end block; -- Codigo de operacion op_code <= irq(31 downto 27); -- c3 c3 <= irq(2 downto 0); end funcional;
REGISTROS
Alternativa 1
Alternativa 2
db
0 1 deci Rin
D Ri
Q Q deci Rin
db
D Ri
Q Q
Figura 1: Alternativas para la inhibicin de un registro del array. cantidades de memoria. Dichas cantidades aumentan considerablemente con la complejidad del diseo (nmero de celdas). Para hacer ms viables todos estos pasos se propone emplear tcnicas de diseo que reduzcan el nmero de puertas empleadas. En concreto, el array de registros R es el que ms puertas requiere al constar de 32x32 elementos de almacenamiento, junto con la lgica asociada. Es en esta lgica asociada donde se propone hacer la simplificacin. Entre las dos alternativas mostradas en la Fig. 1, que implementan la inhibicin del registro i-simo del array, se debe optar por la segunda, que sustituye el multiplexor de entrada a cada elemento de memoria (ms complejo) por una puerta nand controlando la seal de reloj (ms simple). Esta opcin tiene, sin embargo, un inconveniente, y es que obliga a que la seal Rin permanezca en bajo mientras exista actividad en el decodificador. De lo contrario podran producirse cargas no deseadas de los elementos de memoria. Dicho problema puede resolverse fcilmente en la unidad de control multiplicando la seal Rin por la seal principal de reloj, como se muestra en la Fig. 2. En este caso, el tiempo T1 debe ser lo bastante grande para que se produzcan todas las operaciones combinacionales. De hecho, esta tcnica debera emplearse de forma generalizada para todas las seales de carga, ya que aseguran la ejecucin de un flanco de bajada en las mismas al final del ciclo de reloj.
UNIDAD ARITMTICO-LGICA
Rin
Figura 2: Sincronizacin de la seal Rin con el reloj. pensada para la generacin de mquinas de estados finitos, lo que la hace indicada para el diseo de contadores. El circuito se especifica en un lenguaje especial para mquinas de estados finitos (fsm) y la herramienta genera el correspondiente fichero vbe que ahora puede ser sintetizado con scmap. El lenguaje fsm es bsicamente un sub conjunto de instrucciones procedimentales de VHDL. Un ejemplo muy completo puede consultarse en la pgina de manual de fsm (man fsm). La ejecucin de la herramienta syf se describe en man syf.
UNIDAD ARITMTICO-LGICA
El diseo de la Unidad Aritmtico-Lgica (ALU) es complejo, por lo que habr que
evaluar si es conveniente un particionado del diseo en diferentes bloques y un ensamblado posterior. En concreto, y a ttulo de ejemplo, se presentan tres opciones: 1. Sin particionado: Consistira en realizar la descripcin de comportamiento de todos los elementos de la ALU dentro de un mismo chero vbe. Ello dara lugar a un chero de tamao moderado ms difcil de depurar, pero con la ventaja de poder obtener la descripcin estructural (.vst) en un slo paso de sntesis lgica. 2. Particionado completo: Consistira en realizar descripciones vbe independientes de cada elemento de la ALU (circuito aritmtico, circuito lgico y circuito de desplazamiento), realizar la sntesis lgica de cada uno de ellos para obtener la descripcin vst y luego ensamblar los tres mdulos mediante una descripcin vst que empleara los mdulos anteriores como componentes.
10
UNIDAD DE CONTROL
3. Particionado parcial: Realizar la descripcin vbe independiente slo del mdulo ms complejo (p. ej. circuito aritmtico), el resto en una sola descripcin vbe y el ensamblado posterior de ambos bloques de forma similar al caso anterior. Estas opciones o cualquier otra que se considere oportuna deber desembocar en la generacin de un fichero alu.vst con la funcionalidad descrita en la tabla de comportamiento facilitada en clase. En cualquier caso, la mayor dificultad se encuentra en la realizacin del circuito sumador de 32 bits que es la base de la ALU. Esta dificultad estriba en que el formato vbe no incluye operadores aritmticos, por lo que la operacin de suma debe realizarse empleando nicamente operadores lgicos. En este sentido es til recordar que la suma S de dos nmeros binarios A y B se obtiene a partir de operaciones lgicas como sigue: ci + 1 = ai bi + bi ci + ai ci si = ai bi ci
(1)
donde a i , b i , s i y c i son respectivamente los bits i-simos del nmeros A, B, suma (S) y acarreo (C). Teniendo en cuenta esta ecuacin y las capacidades del formato vbe para componer y asignar vectores, la obtencin de la suma es relativamente sencilla. Esta misma capacidad para la manipulacin de vectores puede aplicarse al resto de operaciones de la ALU, haciendo que la descripcin del circuito en un slo fichero vbe no resulte excesivamente compleja. Como en los casos anteriores, es preciso escribir un fichero de patrones de test lo bastante completo y simular con asimut tanto el fichero alu.vbe (si existe) como el alu.vst.
UNIDAD DE CONTROL
La implementacin de dicha unidad se har en base a la representacin entrada/salida
facilitada y a las tablas de activacin de las seales de control que el alumno ha debido de calcular. Salvo por el contador de ciclos, la unidad de control es un circuito principalmente combinacional cuya lgica es diversa, por lo que se presta muy bien a su descripcin funcional
11
SRC COMPLETO
(control.vbe) y su posterior sntesis lgica con la herramienta scmap. No obstante, el alumno pude dividir su diseo en varios sub mdulos si lo estima oportuno. Dado el gran nmero de expresiones lgicas que se integran en la unidad de control, es necesario prestar la mxima atencin tanto en la implementacin de las mismas como en la comprobacin de las tablas de activacin de las seales de control. Por el mismo motivo es muy importante elaborar un completo conjunto de patrones de test que permita verificar en la mayor medida posible la correcta operacin de la unidad de control. En la elaboracin de estos patrones ha de ponerse especial atencin en los primeros patrones, que han de llevar a cabo la inicializacin del circuito, y en la construccin de una seal de reloj adecuada que, cuyos flancos estn distanciados entre s por varios patrones de test. Es muy probable que las funciones que componen la unidad de control puedan optimizarse, por lo que habr que usar la herramienta bop antes hacer la sntesis lgica y evaluar los beneficios que aporta.
SRC COMPLETO
El SRC (Simple Risc Computer) se construye empleando los bloques previamente
diseados (diversos registros, ALU y unidad de control). Se trata en definitiva de realizar una descripcin estructural que conecte los diferentes mdulos mediante un fichero que denominaremos src.vst, y que constituir el fichero cabecera de nuestro diseo. Se escribirn, adems, dos ficheros de conexin y colocacin de pads (src_pads.vst y src_pads.rin). Con todo ello, y con ayuda de las herramientas de sntesis, ser posible la generacin del layout completo del SRC. En este sentido, se distinguen tres fases: diseo (y verificacin) lgica, sntesis (y verificacin) de layout y colocacin de PADs (generacin del chip). A continuacin se describen estas fases.
12
SRC COMPLETO
aparece en el chero vst del mismo. En concreto, las seales que en la descripcin vbe aparecan como wor_vector o mux_vector deben aparecer como linkage bit_vector en la declaracin del componente 2. Vericacin sintctica con asimut (asimut -c ...) 3. (opcional) Optimizacin lgica con glop: El comando glop, mediante la opcin -f, permite la optimizacin lgica mediante la insercin de buffers y duplicacin de puertas. Dicha optimizacin aumenta sensiblemente la complejidad del circuito. 4. Escritura de patrones de test y simulacin. Como el fichero src.vst emplea los otros mdulos como componentes, es necesario indicar a asimut y al resto de herramientas de Alliance en que directorios debe buscar estos componentes. En este sentido caben varias soluciones: Por defecto se busca en el directorio actual, por lo que se pueden copiar al mismo (.../src/src) los diferentes cheros de que depende. Esta solucin tiene el problema de tener que copiar manualmente estos cheros desde sus lugares originales en caso de que se realicen cambios en el diseo, situacin ms que probable. El problema anterior puede resolverse si en vez de realizar copias se realizan enlaces simblicos. Por ejemplo, estando en el directorio ~/src/src: $ ln -s ../a/a.vst . etc. La tercera solucin evita tener que copiar o enlazar cheros y consiste en ampliar la variable de entorno que indica donde se buscan los componentes. Por ejemplo, si se usa un shell de la familia del sh: $ MBK_CATA_LIB="$MBK_CATA_LIB:../a:../alu:../c:../cond:\ ../control:../ipc:../ir:../isr:../ma:../md:../n:../pc:../r" $ export MBK_CATA_LIB
13
SRC COMPLETO
1. Sntesis de layout con scr (generacin del chero src.ap). 2. Visualizacin de layout con graal: opcionalmente, si el layout no tuviera forma cuadrada, puede volver a generarse con scr empleando el parmetro -l. 3. Chequeo de reglas de diseo con druc. (opcional) 4. Extraccin del layout con lynx: Se debe emplear la opcin -f (man lynx). La extraccin debe tener el formato lgico de Alliance, lo cual se establece deniendo la variable MBK_OUT_LO al valor al (su valor habitual es vst). Esta denicin puede hacerse slo para la ejecucin actual si el comando se ejecuta de la siguiente forma (shell tipo sh): $ MBK_OUT_LO=al lynx -f src src_lynx 5. Comparacin de netlists con lvx: cheros src.vst y src_lynx.al. Emplear la opcin -f (man lvx). 6. Generacin de layout real con s2r. (opcional) 7. Visualizacin del layout real con dreal. Tambin es posible simular la versin extrada del layout (src_lynx.al), indicando a asimut el formato de entrada al, definiendo apropiadamente la variable de entorno MBK_IN_LO. Por ejemplo: $ MBK_IN_LO=al asimut src_lynx src src_out
14
SRC COMPLETO
Tabla 1: PADs empleados para la construccin del chip del SRC. Nombre pi_sp Descripcin PAD de entrada Ejemplo pdone : pi_sp port map(pad=>done, t=>donei, ck=>cki, vdde=>vdde, vddi=>vdd, vsse=>vsse, vssi=>vss); pab00 : po_sp port map(i=>abi(0), pad=>ab(0), ck=>cki, vdde=>vdde, vddi=>vdd, vsse=>vsse, vssi=>vss); pmdb00 : piot_sp port map(i=>mdboi(0), b=>mdbr, t=>mdbii(0), pad=>mdb(0), ck=>cki, vdde=>vdde, vddi=>vdd, vsse=>vsse, vssi=>vss); pvdde: pvddeck_sp port map(cko=>clock, ck=>cki, vdde=>vdde, vddi=>vdd, vsse=>vsse, vssi=>vss); pvsse: pvsse_sp port map(ck=>cki, vdde=>vdde, vddi=>vdd, vsse=>vsse, vssi=>vss); pvddi: pvddi_sp port map(ck=>cki, vdde=>vdde, vddi=>vdd, vsse=>vsse, vssi=>vss); pvssi: pvssi_sp port map(ck=>cki, vdde=>vdde, vddi=>vdd, vsse=>vsse, vssi=>vss); pck: pck_sp port map(pad=>ck, ck=>cki, vdde=>vdde, vddi=>vdd, vsse=>vsse, vssi=>vss);
po_sp
PAD de salida
piot_sp
PAD de entrada/salida.
pvddeck_sp
PAD de polarizacin superior del anillo de PADs. Incluye adems la seal de reloj hacia el core. PAD de polarizacin inferior del anillo de PADs. PAD de polarizacin superior del core. PAD de polarizacin inferior del core.
pvsse_sp
pvddi_sp
pvssi_sp
pck_sp
1. Creacin del chero de conexin de PADs (src_pads.vst): se trata de un chero estructural dnde se conecta cada PAD con la seal correspondiente del circuito central o core. Hay que emplear los PADs apropiados de la librera (entrada, salida, entrada/salida, polarizacin, etc.). No olvidar incluir PADs para la polarizacin del propio anillo de pads. Adems, hay que tener en cuenta que los PADs de entrada/salida (piot_sp) conectan los buses internos mdbi y mdbo con un nico bus externo mdb, y que estn controlados por la seal mdbr. 2. Creacin del chero de colocacin de pads (src_pads.rin): se trata del chero de entrada para la herramienta ring. Es aconsejable colocar los PADs de alimentacin junto al eje de simetra vertical.
15
SRC COMPLETO
3. Generar el layout del circuito con los pads (ring). 4. Extraccin (lynx) y comparacin (lvx) del chero de conexin de pads y del extrado (ver pgina de manual de lvx). 5. Visualizacin del layout con graal. 6. Generacin del layout real con s2r. 7. Visualizacin del layout real con dreal.
16
SRC COMPLETO
src |- a | |- a.vbe | |- a.vst | - a.pat |- alu | |- alu.vbe | |- alu.vst | - alu.pat |- c | |- c.vbe | |- c.vst | - c.pat |- cond | |- cond.vbe | |- cond.vst | - cond.pat |- control | |- control.vbe | |- control.vst | - control.pat |- ipc | |- ipc.vbe | |- ipc.vst | - ipc.pat |- ir | |- ir.vbe | |- ir.vst | - ir.pat |- isr | |- isr.vbe | |- isr.vst | - isr.pat
|| | | || | | || | | | || | | || | | -
ma |- ma.vbe |- ma.vst - ma.pat md |- md.vbe |- md.vst - md.pat n |- n.fsm |- n.vbe |- n.vst - n.pat pc |- pc.vbe |- pc.vst - pc.pat r |- r.vbe |- r.vst - r.pat src |- src.vst |- src.ap |- src_pads.vst |- src_pads.rin |- src_pads.ap - src_pads.pat
17
SRC COMPLETO
**** mdulo: c/c.vbe **** entity C is port( d Cin cout:in db vdd vss :in ); end C;
:in bit_vector(31 downto 0); -- dato de entrada :in bit; -- sennal carga (flanco bajada) bit; -- sennal de lectura :out wor_vector(31 downto 0) bus; -- bus salida :in bit; -- polarizacion bit
**** mdulo: cond/cond.vbe **** entity COND is port( db c3 CONin cond vdd vss ); end COND; **** mdulo: control/control.vbe **** entity CONTROL is port ( ck :in bit; strt :in bit; Done :in bit; Reset :in bit; ireq :in bit; hard_reset :out bit; iack :out bit; op_code :in bit_vector(4 downto 0); :in bit_vector(31 downto 0); :in bit_vector(2 downto 0); :in bit; :out bit; :in bit; :in bit
18
SRC COMPLETO
bw :in bit; cond :in bit; IRin :out bit; c1 :out bit; c2 :out bit; gra :out bit; grb :out bit; grc :out bit; PCin :out bit; pcout :out bit; resetpc :out bit; IPCin :out bit; ipcout :out bit; ISRin :out bit; isri :out bit; isrm :out bit; isrout :out bit; MAin :out bit; MDin :out bit; dbr :out bit; mdbr :out bit; dbw :out bit; mdbw :out bit; Rin :out bit; rout :out bit; resetreg :out bit; ba :out bit; decr :out bit; ld :out bit; CONin :out bit; Ain :out bit; Cin :out bit; cout :out bit; ADD :out bit; SUB :out bit; INC4 :out bit; c_AND :out bit; c_OR :out bit; c_NOT :out bit; C_B :out bit; SHR :out bit; SHRA :out bit; SHC :out bit; SHL :out bit; R :out bit; W :out bit vdd :in bit; vss :in bit; ); end CONTROL; **** mdulo: ipc/ipc.vbe **** entity IPC is port ( db ipcout IPCin vdd vss ); end IPC; **** mdulo: ir/ir.vbe **** entity IR is port ( db c1 c2 gra grb grc op_code c3 sel_reg vdd :inout :in :in :in :in wor_vector(31 downto 0) bus; -- data bus bit; -- escribe IPC en el bus bit; -- carga el IPC con el dato del bus bit; bit
:inout wor_vector(31 downto 0) bus; :in bit; :in bit; :in bit; :in bit; :in bit; :out bit_vector(4 downto 0); :out bit_vector(2 downto 0); :out bit_vector(4 downto 0); :in bit;
19
SRC COMPLETO
**** mdulo: isr/isr.vbe **** entity ISR is port ( db idb imdb isri isrm isrout ISRin vdd vss ); end ISR; **** mdulo: ma/ma.vbe **** entity MA is port ( db ab MAin vdd vss ); end MA; **** mdulo: md/md.vbe **** entity MD is port ( db :inout wor_vector(31 downto 0) bus; -- data bus -- mdbi y mdbo se unen en mdb (inout) en el pad de salida mdbi :in bit_vector(31 downto 0); -memory data bus in mdbo :out wor_vector(31 downto 0) bus; -- memory data bus out dbr :in bit; -- lee MD hacia db dbw :in bit; -- escribe MD desde db mdbr :in bit; -- lee MD hacia mdbo mdbw :in bit; -- escribe MD desde mdbi MDin :in bit; vdd :in bit; vss :in bit ); end MD; **** mdulo: n/n.fsm **** entity N is port( ndb decr ld bw vdd vss ); end N; **** mdulo: pc/pc.vbe **** entity PC is port ( db resetpc :in pcout :in PCin :in vdd vss ); end PC; :inout bit; bit; :in :in bit; bit wor_vector(31 downto 0) bus; bit; : : : : : : in bit_vector(4 Downto 0); in bit; in bit; out bit; in bit; in bit :in :out :in :in :in bit_vector(31 downto 0); bit_vector(31 downto 0); bit; bit; bit :in :in :in :in :in :in :in :in :out wor_vector(31 downto 0) bus; bit_vector(7 downto 0); bit_vector(7 downto 0); bit; bit; bit; bit; bit; bit
20
SRC COMPLETO
**** mdulo: r/r.vbe **** entity R is port ( sel_reg :in rout :in ba Rin db resetreg :in vdd vss ); end R; **** mdulo: src/src.vst **** entity SRC is port( -- Buses de direcciones y datos a memoria ab : out bit_vector(31 downto 0); mdbi : in bit_vector(31 downto 0); mdbo : out bit_vector(31 downto 0); w r mdbr done ireq iack hard_reset reset strt ck : out : out : out bit; : in bit; : in bit; : out bit; : out bit; : in bit; : in bit; : in bit; bit bit; -- escritura en memoria bit; -- lectura de memoria -- activa pad de salida a memoria -- op. de memoria completada :in :in :inout bit; :in :in bit_vector(4 downto 0); bit; bit; bit; wor_vector(31 downto 0) bus; bit; bit
-- hard_reset (disp. externos) -- reset del procesador -- strt bit; -- reloj principal
-- polarizacion vdd : in vss : in ); end SRC; **** mdulo: src/src_pads.vst **** entity SRC is port(
-- Buses de direcciones y datos a memoria ab : out bit_vector(31 downto 0); mdb : inout wor_vector(31 downto 0); w r done ireq iack hard_reset reset strt ck : out : out : in bit; : in bit; : out bit; : out : in bit; : in bit; : in bit; bit bit; -- escritura en memoria bit; -- lectura de memoria -- op. de memoria completada
-- hard_reset (disp. externos) bit; -- reset del procesador -- strt bit; -- reloj principal
21