<rss version="2.0">
<channel>
<title>Manuel Rábade</title>
<link>http://rabade.net/wiki/index.php</link>
<description>RSS feed from Manuel Rábade</description>
<language>en-us</language>

	<item>
	  <title>Main page</title>
	  <pubDate>Sun, 10 Jan 2010 12:11:47 -0600</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Main+page</link>
	  <description><pre id="diff">!Proyectos Universitarios
*[Microprocesador von Neumann en VHDL]
*[Implementación del sistema de cifrado Merkle-Hellman]
<del>*[WiFi+BitTorrent+SNMP+MRTG en Gentoo Linux]</del>
*[Alumbrado Inteligente para Ciudad Universitaria|http://alumbradointeligente.unam.mx/]


!Platicas y Conferencias
*[Gestión de Alumbrado Público con Software Libre]

!Acerca de mi
* Mi página personal: [http://rabade.net]
* Mi correo electrónico: [manuel@rabade.net]

</pre></description>
	</item>

	<item>
	  <title>Main page</title>
	  <pubDate>Thu, 12 Nov 2009 21:19:50 -0600</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Main+page</link>
	  <description><pre id="diff">!Proyectos Universitarios
*[Microprocesador von Neumann en VHDL]
*[Implementación del sistema de cifrado Merkle-Hellman]
<ins>*[WiFi+BitTorrent+SNMP+MRTG en Gentoo Linux]</ins>
*[Alumbrado Inteligente para Ciudad Universitaria|http://alumbradointeligente.unam.mx/]
<ins></ins>

!Platicas y Conferencias
*[Gestión de Alumbrado Público con Software Libre]

!Acerca de mi
* Mi página personal: [http://rabade.net]
* Mi correo electrónico: [manuel@rabade.net]

</pre></description>
	</item>

	<item>
	  <title>Microprocesador von Neumann en VHDL</title>
	  <pubDate>Wed, 04 Nov 2009 18:11:53 -0600</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Microprocesador+von+Neumann+en+VHDL</link>
	  <description><pre id="diff">Basado en la arquitectura von Neumann{footnote}http://www.ias.edu/spfeatures/john_von_neumann/electronic-computer-project/{/footnote} y utilizando el lenguaje VHDL{footnote}http://www.eda.org/vhdl-200x/{/footnote} diseñe e implemente un microprocesador experimental como proyecto final de mi curso ''Arquitectura de Computadoras'' con el Ing. Rafael Prieto Melendez.

El microprocesador tiene una longitud de palabra de 8 bits, cuenta con 4 registros de propósito general e implementa segmentación encausada (pipeline) de 4 etapas.

La microarquitectura se compone de los siguientes elementos:

*Unidad de control de la computadora
**Memoria de microprograma (30x8 bits)
**Registro de microinstrucción
**Contador de microprograma
**Lógica de microselección

*Unidad de control de programa
**Contador de programa
**Registro de estado y banderas

*Unidad de procesos aritméticos
**4 operaciones: A + B, A &amp; B, A y -A
**Banderas de cero y negativo: Z y N

*Unidad de registros internos
**Registros de propósito general: A, B, C y D
**Registros de propósito especifico: PC y SP
**Registros constantes: 0 y +1
**Registro de corrimiento

El microprocesador también incluye los siguientes elementos externos a la microarquitectura:

*Divisor de frecuencia (4 subciclos)
*Registro de direcciones de memoria
*Registro de datos de memoria

Los elementos externos al microprocesador y esenciales para su funcionamiento son:

*Memoria de datos y programa (8x8 bits)
*Generador para señal de reloj

La ruta de datos interna consiste en tres buses: A, B y C. Los buses A y B conectan los registros A, B, C, D, 0, +1, PC y SP con los operandos de la unidad de procesos aritméticos. El resultado de la unidad de procesos aritméticos esta conectado directamente al registro de corrimiento. El bus C conecta el resultado del registro de corrimiento con los registros A, B, C, D, PC y SP.

La ruta de datos externa conecta la memoria de datos y programa con la microarquitectura por medio de los registros de datos y direcciones de memoria. El registro de direcciones de memoria esta conectado al bus B y el registro de datos de memoria esta conectado al bus A para lectura y al bus C para escritura. Para la decodificación del programa existe un bus de propósito especifico que interconecta la unidad de control de la computadora con el registro de datos de memoria.

Cada microinstrucción tiene una longitud de 30 bits; del bit más significativo al menos significativo el formato es:

|h Función |h Tamaño |
|l Decodificador para instrucción de programa | &amp;nbsp;1 bit |
|l Multiplexor del operando A de la unidad de procesos aritméticos | &amp;nbsp;1 bit |
|l Condición de ramificación para la unidad de control de la computadora | &amp;nbsp;2 bits |
|l Función de la unidad de procesos aritméticos | &amp;nbsp;2 bits |
|l Función del registro de corrimiento | &amp;nbsp;2 bits |
|l Escritura del registro de datos de memoria | &amp;nbsp;1 bit |
|l Escritura del registro de dirección de memoria | &amp;nbsp;1 bit |
|l Lectura de memoria| &amp;nbsp;1 bit |
|l Escritura de memoria | &amp;nbsp;1 bit |
|l Escritura en los registros internos | &amp;nbsp;1 bit |
|l Multiplexor del bus C | &amp;nbsp;3 bits |
|l Multiplexor del bus B | &amp;nbsp;3 bits |
|l Multiplexor del bus A | &amp;nbsp;3 bits |
|l Dirección para ramificación de microprograma | &amp;nbsp;8 bits |

El diseño tiene capacidad para un conjunto de 16 instrucciones tipo CISC y cada instrucción puede estar compuesta hasta por 16 microinstrucciones. El conjunto de instrucciones implementado es:

|h Instrucción |h Opcode |h Tamaño |h Descripción |
|l LDA ''#opr'' | &amp;nbsp;0x10 | &amp;nbsp;2 bytes |l Carga en el registro A el valor inmediato a la instrucción |
|l SUMA ''#opr'' | &amp;nbsp;0x20 | &amp;nbsp;2 bytes |l Suma al valor del registro A el valor inmediato a la instrucción |
|l BNZ ''opr'' | &amp;nbsp;0x30 | &amp;nbsp;2 bytes |l Ramifica a ''opr'' en caso de que el valor del registro A sea diferente de cero |
|l SHA | &amp;nbsp;0x40 | &amp;nbsp;1 byte |l Aplica un corrimiento a la derecha al valor del registro A |

Las etapas de la segmentación encausada son:

#Carga del registro de datos de programa
#Ejecución de la unidad de procesos aritméticos
#Carga del registro de direcciones de memoria
#Escritura del resultado de la unidad de procesos aritméticos

Cada etapa es sincronizada por una de las señales de reloj internas de la microarquitectura.

La inicialización de la microarquitectura ocurre en la dirección 0x00 de la memoria de microprograma y la ejecución del programa empieza en la dirección 0x00 de la memoria de datos y programa.

Como ejemplo implemente el siguiente algoritmo:

{{         LDA #226
ciclo-1: SUMA #5
         BNZ ciclo-1
         LDA #10
ciclo-2: SHA
         BNZ ciclo-2 }}

La codificación del programa en la memoria corresponde a:

|h Dirección |h Contenido |h Ensamblador |
| &amp;nbsp;0x00 | &amp;nbsp;0x10 |l LDA |
| &amp;nbsp;0x01 | &amp;nbsp;0xE2 |l &amp;nbsp;#226 |
| &amp;nbsp;0x02 | &amp;nbsp;0x20 |l &amp;nbsp;SUMA |
| &amp;nbsp;0x03 | &amp;nbsp;0x05 |l &amp;nbsp;#5 |
| &amp;nbsp;0x04 | &amp;nbsp;0x30 |l &amp;nbsp;BNZ |
| &amp;nbsp;0x05 | &amp;nbsp;0x02 |l &amp;nbsp;2 |
| &amp;nbsp;0x06 | &amp;nbsp;0x10 |l &amp;nbsp;LDA |
| &amp;nbsp;0x07 | &amp;nbsp;0x0A |l &amp;nbsp;10 |
| &amp;nbsp;0x08 | &amp;nbsp;0x40 |l &amp;nbsp;SHA |
| &amp;nbsp;0x09 | &amp;nbsp;0x30 |l &amp;nbsp;BNZ |
| &amp;nbsp;0x0A | &amp;nbsp;0x08 |l &amp;nbsp;8 |

Por cuestiones de falta de tiempo no implemente la escritura para la memoria de programa y datos además de que el juego de instrucciones microprogramado es muy limitado.

Las simulaciones del sistema desarrollado fueron exitosas. Me hubiera gustado poder realizar un analísis a fondo del desempeño y funcionamiento del microprocesador, en especial de la segmentación encausada ya que mi acercamiento es cauteloso e imagino es posible mejorar la implementación.

Como referencia consulte ampliamente las notas Diseño de <del>Microprocesadores{footnote}http://rabade.net/pub/arquitectura_de_computadoras/dise%C3%B1o_de_microprocesadores.pdf{/footnote}</del><ins>Microprocesadores{footnote}http://biorobotics.fi-p.unam.mx/papers/DisenodeMicroprocesadores.pdf{/footnote}</ins> del Dr. Jesús Savage Carmona.

El entorno de desarrollo que utilice fue MAX+PLUS II{footnote}https://www.altera.com/support/software/download/altera_design/mp2_baseline/dnl-baseline.jsp{/footnote}, puedes descargar el proyecto en formato [zip|http://rabade.net/pub/arquitectura_de_computadoras/microarquitectura.zip] o [tar.gz|http://rabade.net/pub/arquitectura_de_computadoras/microarquitectura.tar.gz], algunas capturas de pantalla del desarrollo y prueba del proyecto están aquí:

[http://farm4.static.flickr.com/3250/3141668679_ca0a2f7b47.jpg|http://www.flickr.com/photos/el_mig/3141668679/]
''Arquitectura''
[http://farm4.static.flickr.com/3127/3141668687_a4d18aa61e.jpg|http://www.flickr.com/photos/el_mig/3141668687/]
''Unidad de control de la computadora''
[http://farm4.static.flickr.com/3167/3141668701_d142bd0cc7.jpg|http://www.flickr.com/photos/el_mig/3141668701/]
''Microprogramación''
[http://farm4.static.flickr.com/3228/3141668697_356390bccc.jpg|http://www.flickr.com/photos/el_mig/3141668697/]
''Ruta de datos''
[http://farm4.static.flickr.com/3255/3141672657_678e7d15fd.jpg|http://www.flickr.com/photos/el_mig/3141672657/]
''Programación de la memoria''
[http://farm4.static.flickr.com/3256/3141668677_3d07c29636.jpg|http://www.flickr.com/photos/el_mig/3141668677]
''Simulación''

!!Notas
{plugin:FOOT_NOTES}

</pre></description>
	</item>

	<item>
	  <title>Microprocesador von Neumann en VHDL</title>
	  <pubDate>Thu, 15 Oct 2009 03:43:46 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Microprocesador+von+Neumann+en+VHDL</link>
	  <description><pre id="diff">Basado en la arquitectura von Neumann{footnote}http://www.ias.edu/spfeatures/john_von_neumann/electronic-computer-project/{/footnote} y utilizando el lenguaje VHDL{footnote}http://www.eda.org/vhdl-200x/{/footnote} diseñe e implemente un microprocesador experimental como proyecto final de mi curso ''Arquitectura de Computadoras'' con el Ing. Rafael Prieto Melendez.

El microprocesador tiene una longitud de palabra de 8 bits, cuenta con 4 registros de propósito general e implementa segmentación encausada (pipeline) de 4 etapas.

La microarquitectura se compone de los siguientes elementos:

*Unidad de control de la computadora
**Memoria de microprograma (30x8 bits)
**Registro de microinstrucción
**Contador de microprograma
**Lógica de microselección

*Unidad de control de programa
**Contador de programa
**Registro de estado y banderas

*Unidad de procesos aritméticos
**4 operaciones: A + B, A &amp; B, A y -A
**Banderas de cero y negativo: Z y N

*Unidad de registros internos
**Registros de propósito general: A, B, C y D
**Registros de propósito especifico: PC y SP
**Registros constantes: 0 y +1
**Registro de corrimiento

El microprocesador también incluye los siguientes elementos externos a la microarquitectura:

*Divisor de frecuencia (4 subciclos)
*Registro de direcciones de memoria
*Registro de datos de memoria

Los elementos externos al microprocesador y esenciales para su funcionamiento son:

*Memoria de datos y programa (8x8 bits)
*Generador para señal de reloj

La ruta de datos interna consiste en tres buses: A, B y C. Los buses A y B conectan los registros A, B, C, D, 0, +1, PC y SP con los operandos de la unidad de procesos aritméticos. El resultado de la unidad de procesos aritméticos esta conectado directamente al registro de corrimiento. El bus C conecta el resultado del registro de corrimiento con los registros A, B, C, D, PC y SP.

La ruta de datos externa conecta la memoria de datos y programa con la microarquitectura por medio de los registros de datos y direcciones de memoria. El registro de direcciones de memoria esta conectado al bus B y el registro de datos de memoria esta conectado al bus A para lectura y al bus C para escritura. Para la decodificación del programa existe un bus de propósito especifico que interconecta la unidad de control de la computadora con el registro de datos de memoria.

Cada microinstrucción tiene una longitud de 30 bits; del bit más significativo al menos significativo el formato es:

|h Función |h Tamaño |
|l Decodificador para instrucción de programa | &amp;nbsp;1 bit |
|l Multiplexor del operando A de la unidad de procesos aritméticos | &amp;nbsp;1 bit |
|l Condición de ramificación para la unidad de control de la computadora | &amp;nbsp;2 bits |
|l Función de la unidad de procesos aritméticos | &amp;nbsp;2 bits |
|l Función del registro de corrimiento | &amp;nbsp;2 bits |
|l Escritura del registro de datos de memoria | &amp;nbsp;1 bit |
|l Escritura del registro de dirección de memoria | &amp;nbsp;1 bit |
|l Lectura de memoria| &amp;nbsp;1 bit |
|l Escritura de memoria | &amp;nbsp;1 bit |
|l Escritura en los registros internos | &amp;nbsp;1 bit |
|l Multiplexor del bus C | &amp;nbsp;3 bits |
|l Multiplexor del bus B | &amp;nbsp;3 bits |
|l Multiplexor del bus A | &amp;nbsp;3 bits |
|l Dirección para ramificación de microprograma | &amp;nbsp;8 bits |

El diseño tiene capacidad para un conjunto de 16 instrucciones tipo CISC y cada instrucción puede estar compuesta hasta por 16 microinstrucciones. El conjunto de instrucciones implementado es:

|h Instrucción |h Opcode |h Tamaño |h Descripción |
|l LDA ''#opr'' | &amp;nbsp;0x10 | &amp;nbsp;2 bytes |l Carga en el registro A el valor inmediato a la instrucción |
|l SUMA ''#opr'' | &amp;nbsp;0x20 | &amp;nbsp;2 bytes |l Suma al valor del registro A el valor inmediato a la instrucción |
|l BNZ ''opr'' | &amp;nbsp;0x30 | &amp;nbsp;2 bytes |l Ramifica a ''opr'' en caso de que el valor del registro A sea diferente de cero |
|l SHA | &amp;nbsp;0x40 | &amp;nbsp;1 byte |l Aplica un corrimiento a la derecha al valor del registro A |

Las etapas de la segmentación encausada son:

#Carga del registro de datos de programa
#Ejecución de la unidad de procesos aritméticos
#Carga del registro de direcciones de memoria
#Escritura del resultado de la unidad de procesos aritméticos

Cada etapa es sincronizada por una de las señales de reloj internas de la microarquitectura.

La inicialización de la microarquitectura ocurre en la dirección 0x00 de la memoria de microprograma y la ejecución del programa empieza en la dirección 0x00 de la memoria de datos y programa.

Como ejemplo implemente el siguiente algoritmo:

{{         LDA #226
ciclo-1: SUMA #5
         BNZ ciclo-1
         LDA #10
ciclo-2: SHA
         BNZ ciclo-2 }}

La codificación del programa en la memoria corresponde a:

|h Dirección |h Contenido |h Ensamblador |
| &amp;nbsp;0x00 | &amp;nbsp;0x10 |l LDA |
| &amp;nbsp;0x01 | &amp;nbsp;0xE2 |l &amp;nbsp;#226 |
| &amp;nbsp;0x02 | &amp;nbsp;0x20 |l &amp;nbsp;SUMA |
| &amp;nbsp;0x03 | &amp;nbsp;0x05 |l &amp;nbsp;#5 |
| &amp;nbsp;0x04 | &amp;nbsp;0x30 |l &amp;nbsp;BNZ |
| &amp;nbsp;0x05 | &amp;nbsp;0x02 |l &amp;nbsp;2 |
| &amp;nbsp;0x06 | &amp;nbsp;0x10 |l &amp;nbsp;LDA |
| &amp;nbsp;0x07 | &amp;nbsp;0x0A |l &amp;nbsp;10 |
| &amp;nbsp;0x08 | &amp;nbsp;0x40 |l &amp;nbsp;SHA |
| &amp;nbsp;0x09 | &amp;nbsp;0x30 |l &amp;nbsp;BNZ |
| &amp;nbsp;0x0A | &amp;nbsp;0x08 |l &amp;nbsp;8 |

Por cuestiones de falta de tiempo no implemente la escritura para la memoria de programa y datos además de que el juego de instrucciones microprogramado es muy limitado.

Las simulaciones del sistema desarrollado fueron exitosas. Me hubiera gustado poder realizar un analísis a fondo del desempeño y funcionamiento del microprocesador, en especial de la segmentación encausada ya que mi acercamiento es cauteloso e imagino es posible mejorar la implementación.

Como referencia consulte ampliamente las notas <del>[Diseño</del><ins>Diseño</ins> de <del>Microprocesadores|http://rabade.net/pub/arquitectura_de_computadoras/dise%C3%B1o_de_microprocesadores.pdf]</del><ins>Microprocesadores{footnote}http://rabade.net/pub/arquitectura_de_computadoras/dise%C3%B1o_de_microprocesadores.pdf{/footnote}</ins> del Dr. Jesús Savage <del>Carmona, de parte de mi [Facultad de Ingeniería|http://www.ingenieria.unam.mx].</del><ins>Carmona.</ins>

El entorno de desarrollo que utilice fue <del>[MAX+PLUS II|https://www.altera.com/support/software/download/altera_design/mp2_baseline/dnl-baseline.jsp],</del><ins>MAX+PLUS II{footnote}https://www.altera.com/support/software/download/altera_design/mp2_baseline/dnl-baseline.jsp{/footnote},</ins> puedes descargar el proyecto en formato [zip|http://rabade.net/pub/arquitectura_de_computadoras/microarquitectura.zip] o [tar.gz|http://rabade.net/pub/arquitectura_de_computadoras/microarquitectura.tar.gz], algunas capturas de pantalla del desarrollo y prueba del proyecto están <del>acá:</del><ins>aquí:</ins>

[http://farm4.static.flickr.com/3250/3141668679_ca0a2f7b47.jpg|http://www.flickr.com/photos/el_mig/3141668679/]
''Arquitectura''
[http://farm4.static.flickr.com/3127/3141668687_a4d18aa61e.jpg|http://www.flickr.com/photos/el_mig/3141668687/]
''Unidad de control de la computadora''
[http://farm4.static.flickr.com/3167/3141668701_d142bd0cc7.jpg|http://www.flickr.com/photos/el_mig/3141668701/]
''Microprogramación''
[http://farm4.static.flickr.com/3228/3141668697_356390bccc.jpg|http://www.flickr.com/photos/el_mig/3141668697/]
''Ruta de datos''
[http://farm4.static.flickr.com/3255/3141672657_678e7d15fd.jpg|http://www.flickr.com/photos/el_mig/3141672657/]
''Programación de la memoria''
[http://farm4.static.flickr.com/3256/3141668677_3d07c29636.jpg|http://www.flickr.com/photos/el_mig/3141668677]
''Simulación''

!!Notas
{plugin:FOOT_NOTES}
<ins></ins>
</pre></description>
	</item>

	<item>
	  <title>Gestión de Alumbrado Público con Software Libre</title>
	  <pubDate>Thu, 15 Oct 2009 01:29:39 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Gesti%C3%B3n+de+Alumbrado+P%C3%BAblico+con+Software+Libre</link>
	  <description><pre id="diff">Para mi proyecto de tesis tuve la oportunidad de colaborar en la linea de investigación ''Alumbrado Público con Energía Solar y Sistema de Autodiagnóstico'' del macroproyecto [La Ciudad Universitaria y la Energía|http://energia.fi-b.unam.mx/].

El tema de mi tesis es el desarrollo del software para un prototipo de alumbrado público con capacidad de diagnostico y control remoto. Todo el desarrollo fue exitosamente llevado a cabo con la ayuda de tecnologías con licencia de tipo libre. Una de mis intenciones era la de llevar a cabo un proyecto de ingeniería con software libre para demostrar sus posibilidades en aplicaciones de propósito especifico como esta.

Durante este año he presentado los avances de mi tesis en tres diferentes congresos relacionados con el software libre. Las presentaciones estuvieron dirigidas a diferentes tipos de audiencia y aquí esta el material de cada una de las platicas:

'''[Alumbrado Inteligente con Software Libre|http://rabade.net/pub/alumbrado_inteligente/alumbrado_inteligente_con_software_libre-3fsl.pdf]'''{br}[Tercer Foro de Software Libre|http://3fsl.uptlax.edu.mx]{br}Universidad Politécnica Tlaxcala

'''[Alumbrado Inteligente con Software Libre|http://rabade.net/pub/alumbrado_inteligente/alumbrado_inteligente_con_software_libre-consol_2009.pdf]'''{br}[Congreso Nacional de Software Libre|http://consol.org.mx]{br}Universidad Autónoma Metropolitana

'''[Gestión de Alumbrado Público con Software Libre|http://rabade.net/pub/alumbrado_inteligente/gestion_de_alumbrado_publico_con_software_libre-pumasol_2009.pdf]'''{br}[II Coloquio Universitario de Software Libre|http://pumasol.org]{br}Universidad Nacional Autónoma de México

Gracias a los que me invitaron a estos eventos y a todos los que asistieron a alguna de mis platicas, espero terminar pronto mi tesis y publicar el software derivado. Aquí están unas capturas de pantalla y fotos de los prototipos:

[http://farm3.static.flickr.com/2454/3648460368_d0b1dfac59.jpg|http://www.flickr.com/photos/el_mig/3648460368/]
''Ciudad Universitaria, escala 1:10000''
[http://farm3.static.flickr.com/2427/3648460370_b3e70f3c39.jpg|http://www.flickr.com/photos/el_mig/3648460370/]
''Ciudad Universitaria, escala 1:5000''
[http://farm4.static.flickr.com/3312/3648460374_a52c74189c.jpg|http://www.flickr.com/photos/el_mig/3648460374/]
''Control para subestación y circuitos, escala 1:2500''
[http://farm4.static.flickr.com/3179/3648460378_a67ec33e71.jpg|http://www.flickr.com/photos/el_mig/2818665830/]
''Diagnostico y control de lampara, escala 1:500''
[http://farm4.static.flickr.com/3546/3647661541_376594a6e6.jpg|http://www.flickr.com/photos/el_mig/3647661541/]
''Radio base XBee''
[http://farm3.static.flickr.com/2442/3648460388_27fe6865f0.jpg|http://www.flickr.com/photos/el_mig/3648460388/]
''Lamparas prototipo''
<ins>[http://farm4.static.flickr.com/3577/3648460386_5bb448f9f9.jpg|http://www.flickr.com/photos/el_mig/3648460386/]
''Instrumentación''</ins>
</pre></description>
	</item>

	<item>
	  <title>Implementación del sistema de cifrado Merkle-Hellman</title>
	  <pubDate>Thu, 15 Oct 2009 01:15:39 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Implementaci%C3%B3n+del+sistema+de+cifrado+Merkle-Hellman</link>
	  <description><pre id="diff">Los sistemas de cifrado de llave pública o sistemas de cifrado asimétricos se inventaron con el fin de evitar por completo el problema del intercambio de claves de los sistemas de cifrado simétricos. Con las claves públicas no es necesario que el remitente y el destinatario se pongan de acuerdo en la clave a emplear. Todo lo que se requiere es que, antes de iniciar la comunicación secreta, el remitente consiga una copia de la clave pública del destinatario. Es más, esa misma clave pública puede ser usada por cualquiera que desee comunicarse con su propietario. Por tanto, se necesitarán sólo n pares de claves por cada n personas que deseen comunicarse entre sí{footnote}http://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica{/footnote}.

En 1976 W. Diffie y M. Hellman introdujeron el concepto de cifrado de llave pública. Dos años después R. Merkle y M. Hellman publicaron un sistema de cifrado basado en el problema de la suma de subconjuntos{footnote}Ralph C. Merkle, Martin E. Hellman: Hiding Information and Signatures in Trapdoor Knapsacks{/footnote}. En su tiempo este sistema fue la única alternativa al sistema de cifrado RSA.

El problema de la suma de subconjuntos podemos enunciarlo como: dado un conjunto de enteros A y un entero s, ¿existe algún subconjunto cuya suma sea s? La suma de subconjuntos también puede verse como un caso especial del problema ''knapsack''{footnote}La traducción mas cercana es ''problema de la mochila''{/footnote}.

Existen vectores ''knapsack'' tales que la solución de un problema (A, s) se puede calcular fácil y eficientemente como es el caso de los vectores ''knapsack'' super incrementales{footnote}http://www-fs.informatik.uni-tuebingen.de/~reinhard/krypto/English/SubsetSum_en.html{/footnote}. Por el otro lado puede ser muy difícil obtener una solución para (A, s) si A no es super incremental. Merkle y Hellman utilizaron este hecho para construir un sistema de cifrado basado en el problema de la suma de subconjuntos.

Empezando con un vector ''knapsack'' super incremental A, un segundo vector B es generado ocultado la propiedad super incremental de A. El vector ''knapsack'' A es parte de la llave privada mientras el vector ''knapsack'' B es la llave pública. Un mensaje p es cifrado calculando la suma c = pB = b{sub}1{/sub}p{sub}1{/sub} + ... + b{sub}n{/sub}p{sub}n{/sub}, donde p{sub}i{/sub} representa el bit i de p.

Cualquiera en posesión de la llave c se encuentra con el difícil problema (B, c). En cambio el propietario de la llave privada puede determinar fácilmente el mensaje original porque conoce la secuencia secreta super incremental A.

Como proyecto final de mi curso ''Estructuras Discretas'' con el Dr. Guillermo Fernández Anaya{footnote}http://www.uia.mx/wwwicquiamx/webicq/plantadocmaestingquim/guillermofernan.htm{/footnote} implemente el sistema de cifrado Merkle-Hellman con fines meramente didácticos (desde 1982 se le considera obsoleto{footnote}Adi Shamir: A Polynomial Time Algorithm for Breaking the Basic Merkle-Hellman Cryptosystem{/footnote}), puedes descargar el proyecto en formato [zip|http://rabade.net/pub/estructuras_discretas/merkle-hellman.zip] o [tar.gz|http://rabade.net/pub/estructuras_discretas/merkle-hellman.tar.gz]. El sistema de cifrado Merkle-Hellman consiste en lo siguiente:

!!Generación de Llaves

#Un parámetro n es fijado especificando el número de componentes en A y B.
#Se elige un vector super incremental A = (a{sub}1{/sub}, ..., a{sub}n{/sub}).
#Se elige un entero M tal que M &gt; SUM{sub}i=1...n{/sub}(a{sub}i{/sub}). M es llamado el módulo.
#Se elige un multiplicador W tal que mcd(M, W) = 1 y  1 &lt; W &lt; M. Esta elección de W garantiza que existe un elemento inverso U: UW = 1 (mod M).
#Para obtener los componentes b{sub}i{/sub} de la llave pública B se calcula: b{sub}i{/sub} = a{sub}i{/sub} W mod M, i = 1 ... n. La propiedad super incremental de A es oculta por la multiplicación modular.
#B representa la llave pública y la tupla (A, M, W) la llave privada.

!!Cifrado

#La longitud del mensaje p es determinada por el parámetro n. Es posible cifrar un mensaje p mas largo dividiéndolo en grupos de n-bits.
#Sea p = (p{sub}1{/sub}, p{sub}2{/sub}, ..., p{sub}n{/sub}) el mensaje a cifrar, la clave c se obtiene calculando: c = b{sub}1{/sub}p{sub}1{/sub} + b{sub}2{/sub}p{sub}2{/sub} + ... + b{sub}n{/sub}p{sub}n{/sub}. La componente i de B es sumada si el bit i de p es uno.

!!Descifrado

#Se debe calcular el inverso del multiplicador: q.
#Ahora resuelve el problema (A, c'). Como A es super incremental, (A, c') es fácilmente resuelto. Sea X = (x{sub}1{/sub}, ..., x{sub}n{/sub}) el vector de resultado, p{sub}i{/sub} = x{sub}i{/sub} y p = (p{sub}1{/sub}, ..., p{sub}n{/sub}) es el mensaje en texto plano.

!!Detalles de la Implementación

*La llave privada consiste en números aleatorios provenientes del generador de entropía del núcleo Linux.
*El multiplicador es la sumatoria del código ASCII correspondiente a los caracteres de la llave secreta proporcionada por el usuario. 
*El módulo es la adición del multiplicador y la sumatoria de todos los elementos de la llave privada.
*El multiplicador y módulo deben ser primos entre si, en caso contrario se genera un nuevo vector super incremental y se calcula nuevamente el módulo y multiplicador repitiendo este proceso hasta que el mínimo común divisor entre ambos sea la unidad.
*Las llaves se componen de 8 enteros y el mensaje es dividido en el código ASCII correspondiente a cada carácter.

!!Notas<del> y referencias</del>
{plugin:FOOT_NOTES}
</pre></description>
	</item>

	<item>
	  <title>Microprocesador von Neumann en VHDL</title>
	  <pubDate>Thu, 15 Oct 2009 01:13:50 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Microprocesador+von+Neumann+en+VHDL</link>
	  <description><pre id="diff">Basado en la <del>[arquitectura</del><ins>arquitectura</ins> von <del>Neumann|http://www.ias.edu/spfeatures/john_von_neumann/electronic-computer-project/]</del><ins>Neumann|{footnote}http://www.ias.edu/spfeatures/john_von_neumann/electronic-computer-project/{/footnote}</ins> y utilizando el lenguaje <del>[VHDL|http://www.eda.org/vhdl-200x/]</del><ins>VHDL{footnote}http://www.eda.org/vhdl-200x/{/footnote}</ins> diseñe e implemente un microprocesador experimental como proyecto final de mi curso<del> de</del> ''Arquitectura de Computadoras'' con el Ing. Rafael Prieto Melendez.

El microprocesador tiene una longitud de palabra de 8 bits, cuenta con 4 registros de propósito general e implementa segmentación encausada (pipeline) de 4 etapas.

La microarquitectura se compone de los siguientes elementos:

*Unidad de control de la computadora
**Memoria de microprograma (30x8 bits)
**Registro de microinstrucción
**Contador de microprograma
**Lógica de microselección

*Unidad de control de programa
**Contador de programa
**Registro de estado y banderas

*Unidad de procesos aritméticos
**4 operaciones: A + B, A &amp; B, A y -A
**Banderas de cero y negativo: Z y N

*Unidad de registros internos
**Registros de propósito general: A, B, C y D
**Registros de propósito especifico: PC y SP
**Registros constantes: 0 y +1
**Registro de corrimiento

El microprocesador también incluye los siguientes elementos externos a la microarquitectura:

*Divisor de frecuencia (4 subciclos)
*Registro de direcciones de memoria
*Registro de datos de memoria

Los elementos externos al microprocesador y esenciales para su funcionamiento son:

*Memoria de datos y programa (8x8 bits)
*Generador para señal de reloj

La ruta de datos interna consiste en tres buses: A, B y C. Los buses A y B conectan los registros A, B, C, D, 0, +1, PC y SP con los operandos de la unidad de procesos aritméticos. El resultado de la unidad de procesos aritméticos esta conectado directamente al registro de corrimiento. El bus C conecta el resultado del registro de corrimiento con los registros A, B, C, D, PC y SP.

La ruta de datos externa conecta la memoria de datos y programa con la microarquitectura por medio de los registros de datos y direcciones de memoria. El registro de direcciones de memoria esta conectado al bus B y el registro de datos de memoria esta conectado al bus A para lectura y al bus C para escritura. Para la decodificación del programa existe un bus de propósito especifico que interconecta la unidad de control de la computadora con el registro de datos de memoria.

Cada microinstrucción tiene una longitud de 30 bits; del bit más significativo al menos significativo el formato es:

|h Función |h Tamaño |
|l Decodificador para instrucción de programa | &amp;nbsp;1 bit |
|l Multiplexor del operando A de la unidad de procesos aritméticos | &amp;nbsp;1 bit |
|l Condición de ramificación para la unidad de control de la computadora | &amp;nbsp;2 bits |
|l Función de la unidad de procesos aritméticos | &amp;nbsp;2 bits |
|l Función del registro de corrimiento | &amp;nbsp;2 bits |
|l Escritura del registro de datos de memoria | &amp;nbsp;1 bit |
|l Escritura del registro de dirección de memoria | &amp;nbsp;1 bit |
|l Lectura de memoria| &amp;nbsp;1 bit |
|l Escritura de memoria | &amp;nbsp;1 bit |
|l Escritura en los registros internos | &amp;nbsp;1 bit |
|l Multiplexor del bus C | &amp;nbsp;3 bits |
|l Multiplexor del bus B | &amp;nbsp;3 bits |
|l Multiplexor del bus A | &amp;nbsp;3 bits |
|l Dirección para ramificación de microprograma | &amp;nbsp;8 bits |

El diseño tiene capacidad para un conjunto de 16 instrucciones tipo CISC y cada instrucción puede estar compuesta hasta por 16 microinstrucciones. El conjunto de instrucciones implementado es:

|h Instrucción |h Opcode |h Tamaño |h Descripción |
|l LDA ''#opr'' | &amp;nbsp;0x10 | &amp;nbsp;2 bytes |l Carga en el registro A el valor inmediato a la instrucción |
|l SUMA ''#opr'' | &amp;nbsp;0x20 | &amp;nbsp;2 bytes |l Suma al valor del registro A el valor inmediato a la instrucción |
|l BNZ ''opr'' | &amp;nbsp;0x30 | &amp;nbsp;2 bytes |l Ramifica a ''opr'' en caso de que el valor del registro A sea diferente de cero |
|l SHA | &amp;nbsp;0x40 | &amp;nbsp;1 byte |l Aplica un corrimiento a la derecha al valor del registro A |

Las etapas de la segmentación encausada son:

#Carga del registro de datos de programa
#Ejecución de la unidad de procesos aritméticos
#Carga del registro de direcciones de memoria
#Escritura del resultado de la unidad de procesos aritméticos

Cada etapa es sincronizada por una de las señales de reloj internas de la microarquitectura.

La inicialización de la microarquitectura ocurre en la dirección 0x00 de la memoria de microprograma y la ejecución del programa empieza en la dirección 0x00 de la memoria de datos y programa.

Como ejemplo implemente el siguiente algoritmo:

{{         LDA #226
ciclo-1: SUMA #5
         BNZ ciclo-1
         LDA #10
ciclo-2: SHA
         BNZ ciclo-2 }}

La codificación del programa en la memoria corresponde a:

|h Dirección |h Contenido |h Ensamblador |
| &amp;nbsp;0x00 | &amp;nbsp;0x10 |l LDA |
| &amp;nbsp;0x01 | &amp;nbsp;0xE2 |l &amp;nbsp;#226 |
| &amp;nbsp;0x02 | &amp;nbsp;0x20 |l &amp;nbsp;SUMA |
| &amp;nbsp;0x03 | &amp;nbsp;0x05 |l &amp;nbsp;#5 |
| &amp;nbsp;0x04 | &amp;nbsp;0x30 |l &amp;nbsp;BNZ |
| &amp;nbsp;0x05 | &amp;nbsp;0x02 |l &amp;nbsp;2 |
| &amp;nbsp;0x06 | &amp;nbsp;0x10 |l &amp;nbsp;LDA |
| &amp;nbsp;0x07 | &amp;nbsp;0x0A |l &amp;nbsp;10 |
| &amp;nbsp;0x08 | &amp;nbsp;0x40 |l &amp;nbsp;SHA |
| &amp;nbsp;0x09 | &amp;nbsp;0x30 |l &amp;nbsp;BNZ |
| &amp;nbsp;0x0A | &amp;nbsp;0x08 |l &amp;nbsp;8 |

Por cuestiones de falta de tiempo no implemente la escritura para la memoria de programa y datos además de que el juego de instrucciones microprogramado es muy limitado.

Las simulaciones del sistema desarrollado fueron exitosas. Me hubiera gustado poder realizar un analísis a fondo del desempeño y funcionamiento del microprocesador, en especial de la segmentación encausada ya que mi acercamiento es cauteloso e imagino es posible mejorar la implementación.

Como referencia consulte ampliamente las notas [Diseño de Microprocesadores|http://rabade.net/pub/arquitectura_de_computadoras/dise%C3%B1o_de_microprocesadores.pdf] del Dr. Jesús Savage Carmona, de parte de mi [Facultad de Ingeniería|http://www.ingenieria.unam.mx].

El entorno de desarrollo que utilice fue [MAX+PLUS II|https://www.altera.com/support/software/download/altera_design/mp2_baseline/dnl-baseline.jsp], puedes descargar el proyecto en formato [zip|http://rabade.net/pub/arquitectura_de_computadoras/microarquitectura.zip] o [tar.gz|http://rabade.net/pub/arquitectura_de_computadoras/microarquitectura.tar.gz], algunas capturas de pantalla del desarrollo y prueba del proyecto están acá:

[http://farm4.static.flickr.com/3250/3141668679_ca0a2f7b47.jpg|http://www.flickr.com/photos/el_mig/3141668679/]
''Arquitectura''
[http://farm4.static.flickr.com/3127/3141668687_a4d18aa61e.jpg|http://www.flickr.com/photos/el_mig/3141668687/]
''Unidad de control de la computadora''
[http://farm4.static.flickr.com/3167/3141668701_d142bd0cc7.jpg|http://www.flickr.com/photos/el_mig/3141668701/]
''Microprogramación''
[http://farm4.static.flickr.com/3228/3141668697_356390bccc.jpg|http://www.flickr.com/photos/el_mig/3141668697/]
''Ruta de datos''
[http://farm4.static.flickr.com/3255/3141672657_678e7d15fd.jpg|http://www.flickr.com/photos/el_mig/3141672657/]
''Programación de la memoria''
[http://farm4.static.flickr.com/3256/3141668677_3d07c29636.jpg|http://www.flickr.com/photos/el_mig/3141668677]
''Simulación''
<ins>
!!Notas
{plugin:FOOT_NOTES}</ins>
</pre></description>
	</item>

	<item>
	  <title>Implementación del sistema de cifrado Merkle-Hellman</title>
	  <pubDate>Thu, 15 Oct 2009 01:09:54 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Implementaci%C3%B3n+del+sistema+de+cifrado+Merkle-Hellman</link>
	  <description><pre id="diff">Los sistemas de cifrado de llave pública o sistemas de cifrado asimétricos se inventaron con el fin de evitar por completo el problema del intercambio de claves de los sistemas de cifrado simétricos. Con las claves públicas no es necesario que el remitente y el destinatario se pongan de acuerdo en la clave a emplear. Todo lo que se requiere es que, antes de iniciar la comunicación secreta, el remitente consiga una copia de la clave pública del destinatario. Es más, esa misma clave pública puede ser usada por cualquiera que desee comunicarse con su propietario. Por tanto, se necesitarán sólo n pares de claves por cada n personas que deseen comunicarse entre sí{footnote}http://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica{/footnote}.

En 1976 W. Diffie y M. Hellman introdujeron el concepto de cifrado de llave pública. Dos años después R. Merkle y M. Hellman publicaron un sistema de cifrado basado en el problema de la suma de subconjuntos{footnote}Ralph C. Merkle, Martin E. Hellman: Hiding Information and Signatures in Trapdoor Knapsacks{/footnote}. En su tiempo este sistema fue la única alternativa al sistema de cifrado RSA.

El problema de la suma de subconjuntos podemos enunciarlo como: dado un conjunto de enteros A y un entero s, ¿existe algún subconjunto cuya suma sea s? La suma de subconjuntos también puede verse como un caso especial del problema ''knapsack''{footnote}La traducción mas cercana es ''problema de la mochila''{/footnote}.

Existen vectores ''knapsack'' tales que la solución de un problema (A, s) se puede calcular fácil y eficientemente como es el caso de los vectores ''knapsack'' super incrementales{footnote}http://www-fs.informatik.uni-tuebingen.de/~reinhard/krypto/English/SubsetSum_en.html{/footnote}. Por el otro lado puede ser muy difícil obtener una solución para (A, s) si A no es super incremental. Merkle y Hellman utilizaron este hecho para construir un sistema de cifrado basado en el problema de la suma de subconjuntos.

Empezando con un vector ''knapsack'' super incremental A, un segundo vector B es generado ocultado la propiedad super incremental de A. El vector ''knapsack'' A es parte de la llave privada mientras el vector ''knapsack'' B es la llave pública. Un mensaje p es cifrado calculando la suma c = pB = b{sub}1{/sub}p{sub}1{/sub} + ... + b{sub}n{/sub}p{sub}n{/sub}, donde p{sub}i{/sub} representa el bit i de p.

Cualquiera en posesión de la llave c se encuentra con el difícil problema (B, <del>c){footnote}Desde {/footnote}.</del><ins>c).</ins> En cambio el propietario de la llave privada puede determinar fácilmente el mensaje original porque conoce la secuencia secreta super incremental A.

Como proyecto final de mi curso ''Estructuras Discretas'' con el Dr. Guillermo Fernández Anaya{footnote}http://www.uia.mx/wwwicquiamx/webicq/plantadocmaestingquim/guillermofernan.htm{/footnote} implemente el sistema de cifrado Merkle-Hellman con fines meramente didácticos (desde 1982 se le considera obsoleto{footnote}Adi Shamir: A Polynomial Time Algorithm for Breaking the Basic Merkle-Hellman Cryptosystem{/footnote}), puedes descargar el proyecto en formato [zip|http://rabade.net/pub/estructuras_discretas/merkle-hellman.zip] o [tar.gz|http://rabade.net/pub/estructuras_discretas/merkle-hellman.tar.gz]. El sistema de cifrado Merkle-Hellman consiste en lo siguiente:

!!Generación de Llaves

#Un parámetro n es fijado especificando el número de componentes en A y B.
#Se elige un vector super incremental A = (a{sub}1{/sub}, ..., a{sub}n{/sub}).
#Se elige un entero M tal que M &gt; SUM{sub}i=1...n{/sub}(a{sub}i{/sub}). M es llamado el módulo.
#Se elige un multiplicador W tal que mcd(M, W) = 1 y  1 &lt; W &lt; M. Esta elección de W garantiza que existe un elemento inverso U: UW = 1 (mod M).
#Para obtener los componentes b{sub}i{/sub} de la llave pública B se calcula: b{sub}i{/sub} = a{sub}i{/sub} W mod M, i = 1 ... n. La propiedad super incremental de A es oculta por la multiplicación modular.
#B representa la llave pública y la tupla (A, M, W) la llave privada.

!!Cifrado

#La longitud del mensaje p es determinada por el parámetro n. Es posible cifrar un mensaje p mas largo dividiéndolo en grupos de n-bits.
#Sea p = (p{sub}1{/sub}, p{sub}2{/sub}, ..., p{sub}n{/sub}) el mensaje a cifrar, la clave c se obtiene calculando: c = b{sub}1{/sub}p{sub}1{/sub} + b{sub}2{/sub}p{sub}2{/sub} + ... + b{sub}n{/sub}p{sub}n{/sub}. La componente i de B es sumada si el bit i de p es uno.

!!Descifrado

#Se debe calcular el inverso del multiplicador: q.
#Ahora resuelve el problema (A, c'). Como A es super incremental, (A, c') es fácilmente resuelto. Sea X = (x{sub}1{/sub}, ..., x{sub}n{/sub}) el vector de resultado, p{sub}i{/sub} = x{sub}i{/sub} y p = (p{sub}1{/sub}, ..., p{sub}n{/sub}) es el mensaje en texto plano.

!!Detalles de la Implementación

*La llave privada consiste en números aleatorios provenientes del generador de entropía del núcleo Linux.
*El multiplicador es la sumatoria del código ASCII correspondiente a los caracteres de la llave secreta proporcionada por el usuario. 
*El módulo es la adición del multiplicador y la sumatoria de todos los elementos de la llave privada.
*El multiplicador y módulo deben ser primos entre si, en caso contrario se genera un nuevo vector super incremental y se calcula nuevamente el módulo y multiplicador repitiendo este proceso hasta que el mínimo común divisor entre ambos sea la unidad.
*Las llaves se componen de 8 enteros y el mensaje es dividido en el código ASCII correspondiente a cada carácter.

<ins>!!Notas y referencias
{plugin:FOOT_NOTES}</ins>
</pre></description>
	</item>

	<item>
	  <title>Implementación del sistema de cifrado Merkle-Hellman</title>
	  <pubDate>Thu, 15 Oct 2009 01:02:56 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Implementaci%C3%B3n+del+sistema+de+cifrado+Merkle-Hellman</link>
	  <description><pre id="diff"><ins>Los sistemas de cifrado de llave pública o sistemas de cifrado asimétricos se inventaron con el fin de evitar por completo el problema del intercambio de claves de los sistemas de cifrado simétricos. Con las claves públicas no es necesario que el remitente y el destinatario se pongan de acuerdo en la clave a emplear. Todo lo que se requiere es que, antes de iniciar la comunicación secreta, el remitente consiga una copia de la clave pública del destinatario. Es más, esa misma clave pública puede ser usada por cualquiera que desee comunicarse con su propietario. Por tanto, se necesitarán sólo n pares de claves por cada n personas que deseen comunicarse entre sí{footnote}http://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica{/footnote}.

En 1976 W. Diffie y M. Hellman introdujeron el concepto de cifrado de llave pública. Dos años después R. Merkle y M. Hellman publicaron un sistema de cifrado basado en el problema de la suma de subconjuntos{footnote}Ralph C. Merkle, Martin E. Hellman: Hiding Information and Signatures in Trapdoor Knapsacks{/footnote}. En su tiempo este sistema fue la única alternativa al sistema de cifrado RSA.

El problema de la suma de subconjuntos podemos enunciarlo como: dado un conjunto de enteros A y un entero s, ¿existe algún subconjunto cuya suma sea s? La suma de subconjuntos también puede verse como un caso especial del problema ''knapsack''{footnote}La traducción mas cercana es ''problema de la mochila''{/footnote}.

Existen vectores ''knapsack'' tales que la solución de un problema (A, s) se puede calcular fácil y eficientemente como es el caso de los vectores ''knapsack'' super incrementales{footnote}http://www-fs.informatik.uni-tuebingen.de/~reinhard/krypto/English/SubsetSum_en.html{/footnote}. Por el otro lado puede ser muy difícil obtener una solución para (A, s) si A no es super incremental. Merkle y Hellman utilizaron este hecho para construir un sistema de cifrado basado en el problema de la suma de subconjuntos.

Empezando con un vector ''knapsack'' super incremental A, un segundo vector B es generado ocultado la propiedad super incremental de A. El vector ''knapsack'' A es parte de la llave privada mientras el vector ''knapsack'' B es la llave pública. Un mensaje p es cifrado calculando la suma c = pB = b{sub}1{/sub}p{sub}1{/sub} + ... + b{sub}n{/sub}p{sub}n{/sub}, donde p{sub}i{/sub} representa el bit i de p.

Cualquiera en posesión de la llave c se encuentra con el difícil problema (B, c){footnote}Desde {/footnote}. En cambio el propietario de la llave privada puede determinar fácilmente el mensaje original porque conoce la secuencia secreta super incremental A.

Como proyecto final de mi curso ''Estructuras Discretas'' con el Dr. Guillermo Fernández Anaya{footnote}http://www.uia.mx/wwwicquiamx/webicq/plantadocmaestingquim/guillermofernan.htm{/footnote} implemente el sistema de cifrado Merkle-Hellman con fines meramente didácticos (desde 1982 se le considera obsoleto{footnote}Adi Shamir: A Polynomial Time Algorithm for Breaking the Basic Merkle-Hellman Cryptosystem{/footnote}), puedes descargar el proyecto en formato [zip|http://rabade.net/pub/estructuras_discretas/merkle-hellman.zip] o [tar.gz|http://rabade.net/pub/estructuras_discretas/merkle-hellman.tar.gz]. El sistema de cifrado Merkle-Hellman consiste en lo siguiente:

!!Generación de Llaves

#Un parámetro n es fijado especificando el número de componentes en A y B.
#Se elige un vector super incremental A = (a{sub}1{/sub}, ..., a{sub}n{/sub}).
#Se elige un entero M tal que M &gt; SUM{sub}i=1...n{/sub}(a{sub}i{/sub}). M es llamado el módulo.
#Se elige un multiplicador W tal que mcd(M, W) = 1 y  1 &lt; W &lt; M. Esta elección de W garantiza que existe un elemento inverso U: UW = 1 (mod M).
#Para obtener los componentes b{sub}i{/sub} de la llave pública B se calcula: b{sub}i{/sub} = a{sub}i{/sub} W mod M, i = 1 ... n. La propiedad super incremental de A es oculta por la multiplicación modular.
#B representa la llave pública y la tupla (A, M, W) la llave privada.

!!Cifrado

#La longitud del mensaje p es determinada por el parámetro n. Es posible cifrar un mensaje p mas largo dividiéndolo en grupos de n-bits.
#Sea p = (p{sub}1{/sub}, p{sub}2{/sub}, ..., p{sub}n{/sub}) el mensaje a cifrar, la clave c se obtiene calculando: c = b{sub}1{/sub}p{sub}1{/sub} + b{sub}2{/sub}p{sub}2{/sub} + ... + b{sub}n{/sub}p{sub}n{/sub}. La componente i de B es sumada si el bit i de p es uno.

!!Descifrado

#Se debe calcular el inverso del multiplicador: q.
#Ahora resuelve el problema (A, c'). Como A es super incremental, (A, c') es fácilmente resuelto. Sea X = (x{sub}1{/sub}, ..., x{sub}n{/sub}) el vector de resultado, p{sub}i{/sub} = x{sub}i{/sub} y p = (p{sub}1{/sub}, ..., p{sub}n{/sub}) es el mensaje en texto plano.

!!Detalles de la Implementación

*La llave privada consiste en números aleatorios provenientes del generador de entropía del núcleo Linux.
*El multiplicador es la sumatoria del código ASCII correspondiente a los caracteres de la llave secreta proporcionada por el usuario. 
*El módulo es la adición del multiplicador y la sumatoria de todos los elementos de la llave privada.
*El multiplicador y módulo deben ser primos entre si, en caso contrario se genera un nuevo vector super incremental y se calcula nuevamente el módulo y multiplicador repitiendo este proceso hasta que el mínimo común divisor entre ambos sea la unidad.
*Las llaves se componen de 8 enteros y el mensaje es dividido en el código ASCII correspondiente a cada carácter.
</ins>
</pre></description>
	</item>

	<item>
	  <title>Main page</title>
	  <pubDate>Thu, 15 Oct 2009 00:13:43 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Main+page</link>
	  <description><pre id="diff"></pre></description>
	</item>

	<item>
	  <title>Main page</title>
	  <pubDate>Thu, 15 Oct 2009 00:12:40 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Main+page</link>
	  <description><pre id="diff">!Proyectos Universitarios
*[Microprocesador von Neumann en VHDL]
<ins>*[Implementación del sistema de cifrado Merkle-Hellman]
*[Alumbrado inteligente para Ciudad Universitaria|http://alumbradointeligente.unam.mx/]
</ins>
!Platicas y Conferencias
*[Gestión de Alumbrado Público con Software Libre]
<ins></ins>
!Acerca de mi
* Mi página personal: [http://rabade.net]
* Mi correo electrónico: [manuel@rabade.net]

</pre></description>
	</item>

	<item>
	  <title>Gestión de Alumbrado Público con Software Libre</title>
	  <pubDate>Thu, 15 Oct 2009 00:06:28 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Gesti%C3%B3n+de+Alumbrado+P%C3%BAblico+con+Software+Libre</link>
	  <description><pre id="diff">Para mi proyecto de tesis tuve la oportunidad de colaborar en la linea de investigación ''Alumbrado Público con Energía Solar y Sistema de Autodiagnóstico'' del macroproyecto [La Ciudad Universitaria y la Energía|http://energia.fi-b.unam.mx/].

El tema de mi tesis es el desarrollo del software para un prototipo de alumbrado público con capacidad de diagnostico y control remoto. Todo el desarrollo fue exitosamente llevado a cabo con la ayuda de tecnologías con licencia de tipo libre. Una de mis intenciones era la de llevar a cabo un proyecto de ingeniería con software libre para demostrar sus posibilidades en aplicaciones de propósito especifico como esta.

Durante este año he presentado los avances de mi tesis en tres diferentes congresos relacionados con el software libre. Las presentaciones estuvieron dirigidas a diferentes tipos de audiencia y aquí esta el material de cada una de las platicas:

'''[Alumbrado Inteligente con Software Libre|http://rabade.net/pub/alumbrado_inteligente/alumbrado_inteligente_con_software_libre-3fsl.pdf]'''{br}[Tercer Foro de Software Libre|http://3fsl.uptlax.edu.mx]{br}Universidad Politécnica Tlaxcala

'''[Alumbrado Inteligente con Software Libre|http://rabade.net/pub/alumbrado_inteligente/alumbrado_inteligente_con_software_libre-consol_2009.pdf]'''{br}[Congreso Nacional de Software Libre|http://consol.org.mx]{br}Universidad Autónoma Metropolitana

'''[Gestión de Alumbrado Público con Software Libre|http://rabade.net/pub/alumbrado_inteligente/gestion_de_alumbrado_publico_con_software_libre-pumasol_2009.pdf]'''{br}[II Coloquio Universitario de Software Libre|http://pumasol.org]{br}Universidad Nacional Autónoma de México

Gracias a los que me invitaron a estos eventos y a todos los que asistieron a alguna de mis platicas, espero terminar pronto mi tesis y publicar todo el software <del>derivado, acá</del><ins>derivado. Aquí</ins> están unas capturas de pantalla y fotos de los prototipos:

[http://farm3.static.flickr.com/2454/3648460368_d0b1dfac59.jpg|http://www.flickr.com/photos/el_mig/3648460368/]
''Ciudad Universitaria, escala 1:10000''
[http://farm3.static.flickr.com/2427/3648460370_b3e70f3c39.jpg|http://www.flickr.com/photos/el_mig/3648460370/]
''Ciudad Universitaria, escala 1:5000''
[http://farm4.static.flickr.com/3312/3648460374_a52c74189c.jpg|http://www.flickr.com/photos/el_mig/3648460374/]
''Control para subestación y circuitos, escala 1:2500''
[http://farm4.static.flickr.com/3179/3648460378_a67ec33e71.jpg|http://www.flickr.com/photos/el_mig/2818665830/]
''Diagnostico y control de lampara, escala 1:500''
[http://farm4.static.flickr.com/3546/3647661541_376594a6e6.jpg|http://www.flickr.com/photos/el_mig/3647661541/]
''Radio base XBee''
[http://farm3.static.flickr.com/2442/3648460388_27fe6865f0.jpg|http://www.flickr.com/photos/el_mig/3648460388/]
''Lamparas prototipo''
<ins></ins>
</pre></description>
	</item>

	<item>
	  <title>Main page</title>
	  <pubDate>Wed, 14 Oct 2009 23:59:02 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Main+page</link>
	  <description><pre id="diff">!Proyectos Universitarios
*[Microprocesador von Neumann en VHDL]
!Platicas y Conferencias
*[Gestión de Alumbrado Público con Software Libre]
<ins>!Acerca de mi
* Mi página personal: [http://rabade.net]
* Mi correo electrónico: [manuel@rabade.net]</ins>

</pre></description>
	</item>

	<item>
	  <title>Gestión de Alumbrado Público con Software Libre</title>
	  <pubDate>Wed, 14 Oct 2009 23:53:00 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Gesti%C3%B3n+de+Alumbrado+P%C3%BAblico+con+Software+Libre</link>
	  <description><pre id="diff"><ins>Para mi proyecto de tesis tuve la oportunidad de colaborar en la linea de investigación ''Alumbrado Público con Energía Solar y Sistema de Autodiagnóstico'' del macroproyecto [La Ciudad Universitaria y la Energía|http://energia.fi-b.unam.mx/].

El tema de mi tesis es el desarrollo del software para un prototipo de alumbrado público con capacidad de diagnostico y control remoto. Todo el desarrollo fue exitosamente llevado a cabo con la ayuda de tecnologías con licencia de tipo libre. Una de mis intenciones era la de llevar a cabo un proyecto de ingeniería con software libre para demostrar sus posibilidades en aplicaciones de propósito especifico como esta.

Durante este año he presentado los avances de mi tesis en tres diferentes congresos relacionados con el software libre. Las presentaciones estuvieron dirigidas a diferentes tipos de audiencia y aquí esta el material de cada una de las platicas:

'''[Alumbrado Inteligente con Software Libre|http://rabade.net/pub/alumbrado_inteligente/alumbrado_inteligente_con_software_libre-3fsl.pdf]'''{br}[Tercer Foro de Software Libre|http://3fsl.uptlax.edu.mx]{br}Universidad Politécnica Tlaxcala

'''[Alumbrado Inteligente con Software Libre|http://rabade.net/pub/alumbrado_inteligente/alumbrado_inteligente_con_software_libre-consol_2009.pdf]'''{br}[Congreso Nacional de Software Libre|http://consol.org.mx]{br}Universidad Autónoma Metropolitana

'''[Gestión de Alumbrado Público con Software Libre|http://rabade.net/pub/alumbrado_inteligente/gestion_de_alumbrado_publico_con_software_libre-pumasol_2009.pdf]'''{br}[II Coloquio Universitario de Software Libre|http://pumasol.org]{br}Universidad Nacional Autónoma de México

Gracias a los que me invitaron a estos eventos y a todos los que asistieron a alguna de mis platicas, espero terminar pronto mi tesis y publicar todo el software derivado, por acá están unas capturas de pantalla y fotos de los prototipos:

[http://farm3.static.flickr.com/2454/3648460368_d0b1dfac59.jpg|http://www.flickr.com/photos/el_mig/3648460368/]
''Ciudad Universitaria, escala 1:10000''
[http://farm3.static.flickr.com/2427/3648460370_b3e70f3c39.jpg|http://www.flickr.com/photos/el_mig/3648460370/]
''Ciudad Universitaria, escala 1:5000''
[http://farm4.static.flickr.com/3312/3648460374_a52c74189c.jpg|http://www.flickr.com/photos/el_mig/3648460374/]
''Control para subestación y circuitos, escala 1:2500''
[http://farm4.static.flickr.com/3179/3648460378_a67ec33e71.jpg|http://www.flickr.com/photos/el_mig/2818665830/]
''Diagnostico y control de lampara, escala 1:500''
[http://farm4.static.flickr.com/3546/3647661541_376594a6e6.jpg|http://www.flickr.com/photos/el_mig/3647661541/]
''Radio base XBee''
[http://farm3.static.flickr.com/2442/3648460388_27fe6865f0.jpg|http://www.flickr.com/photos/el_mig/3648460388/]
''Lamparas prototipo''</ins>
</pre></description>
	</item>

	<item>
	  <title>Manuel Rábade</title>
	  <pubDate>Wed, 14 Oct 2009 23:27:20 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Manuel+R%C3%A1bade</link>
	  <description><pre id="diff"></pre></description>
	</item>

	<item>
	  <title>Microprocesador von Neumann en VHDL</title>
	  <pubDate>Wed, 14 Oct 2009 23:25:47 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Microprocesador+von+Neumann+en+VHDL</link>
	  <description><pre id="diff"></pre></description>
	</item>

	<item>
	  <title>Microprocesador von Neumann en VHDL</title>
	  <pubDate>Wed, 14 Oct 2009 23:25:08 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Microprocesador+von+Neumann+en+VHDL</link>
	  <description><pre id="diff"><ins>Basado en la [arquitectura von Neumann|http://www.ias.edu/spfeatures/john_von_neumann/electronic-computer-project/] y utilizando el lenguaje [VHDL|http://www.eda.org/vhdl-200x/] diseñe e implemente un microprocesador experimental como proyecto final de mi curso de ''Arquitectura de Computadoras'' con el Ing. Rafael Prieto Melendez.

El microprocesador tiene una longitud de palabra de 8 bits, cuenta con 4 registros de propósito general e implementa segmentación encausada (pipeline) de 4 etapas.

La microarquitectura se compone de los siguientes elementos:

*Unidad de control de la computadora
**Memoria de microprograma (30x8 bits)
**Registro de microinstrucción
**Contador de microprograma
**Lógica de microselección

*Unidad de control de programa
**Contador de programa
**Registro de estado y banderas

*Unidad de procesos aritméticos
**4 operaciones: A + B, A &amp; B, A y -A
**Banderas de cero y negativo: Z y N

*Unidad de registros internos
**Registros de propósito general: A, B, C y D
**Registros de propósito especifico: PC y SP
**Registros constantes: 0 y +1
**Registro de corrimiento

El microprocesador también incluye los siguientes elementos externos a la microarquitectura:

*Divisor de frecuencia (4 subciclos)
*Registro de direcciones de memoria
*Registro de datos de memoria

Los elementos externos al microprocesador y esenciales para su funcionamiento son:

*Memoria de datos y programa (8x8 bits)
*Generador para señal de reloj

La ruta de datos interna consiste en tres buses: A, B y C. Los buses A y B conectan los registros A, B, C, D, 0, +1, PC y SP con los operandos de la unidad de procesos aritméticos. El resultado de la unidad de procesos aritméticos esta conectado directamente al registro de corrimiento. El bus C conecta el resultado del registro de corrimiento con los registros A, B, C, D, PC y SP.

La ruta de datos externa conecta la memoria de datos y programa con la microarquitectura por medio de los registros de datos y direcciones de memoria. El registro de direcciones de memoria esta conectado al bus B y el registro de datos de memoria esta conectado al bus A para lectura y al bus C para escritura. Para la decodificación del programa existe un bus de propósito especifico que interconecta la unidad de control de la computadora con el registro de datos de memoria.

Cada microinstrucción tiene una longitud de 30 bits; del bit más significativo al menos significativo el formato es:

|h Función |h Tamaño |
|l Decodificador para instrucción de programa | &amp;nbsp;1 bit |
|l Multiplexor del operando A de la unidad de procesos aritméticos | &amp;nbsp;1 bit |
|l Condición de ramificación para la unidad de control de la computadora | &amp;nbsp;2 bits |
|l Función de la unidad de procesos aritméticos | &amp;nbsp;2 bits |
|l Función del registro de corrimiento | &amp;nbsp;2 bits |
|l Escritura del registro de datos de memoria | &amp;nbsp;1 bit |
|l Escritura del registro de dirección de memoria | &amp;nbsp;1 bit |
|l Lectura de memoria| &amp;nbsp;1 bit |
|l Escritura de memoria | &amp;nbsp;1 bit |
|l Escritura en los registros internos | &amp;nbsp;1 bit |
|l Multiplexor del bus C | &amp;nbsp;3 bits |
|l Multiplexor del bus B | &amp;nbsp;3 bits |
|l Multiplexor del bus A | &amp;nbsp;3 bits |
|l Dirección para ramificación de microprograma | &amp;nbsp;8 bits |

El diseño tiene capacidad para un conjunto de 16 instrucciones tipo CISC y cada instrucción puede estar compuesta hasta por 16 microinstrucciones. El conjunto de instrucciones implementado es:

|h Instrucción |h Opcode |h Tamaño |h Descripción |
|l LDA ''#opr'' | &amp;nbsp;0x10 | &amp;nbsp;2 bytes |l Carga en el registro A el valor inmediato a la instrucción |
|l SUMA ''#opr'' | &amp;nbsp;0x20 | &amp;nbsp;2 bytes |l Suma al valor del registro A el valor inmediato a la instrucción |
|l BNZ ''opr'' | &amp;nbsp;0x30 | &amp;nbsp;2 bytes |l Ramifica a ''opr'' en caso de que el valor del registro A sea diferente de cero |
|l SHA | &amp;nbsp;0x40 | &amp;nbsp;1 byte |l Aplica un corrimiento a la derecha al valor del registro A |

Las etapas de la segmentación encausada son:

#Carga del registro de datos de programa
#Ejecución de la unidad de procesos aritméticos
#Carga del registro de direcciones de memoria
#Escritura del resultado de la unidad de procesos aritméticos

Cada etapa es sincronizada por una de las señales de reloj internas de la microarquitectura.

La inicialización de la microarquitectura ocurre en la dirección 0x00 de la memoria de microprograma y la ejecución del programa empieza en la dirección 0x00 de la memoria de datos y programa.

Como ejemplo implemente el siguiente algoritmo:

{{         LDA #226
ciclo-1: SUMA #5
         BNZ ciclo-1
         LDA #10
ciclo-2: SHA
         BNZ ciclo-2 }}

La codificación del programa en la memoria corresponde a:

|h Dirección |h Contenido |h Ensamblador |
| &amp;nbsp;0x00 | &amp;nbsp;0x10 |l LDA |
| &amp;nbsp;0x01 | &amp;nbsp;0xE2 |l &amp;nbsp;#226 |
| &amp;nbsp;0x02 | &amp;nbsp;0x20 |l &amp;nbsp;SUMA |
| &amp;nbsp;0x03 | &amp;nbsp;0x05 |l &amp;nbsp;#5 |
| &amp;nbsp;0x04 | &amp;nbsp;0x30 |l &amp;nbsp;BNZ |
| &amp;nbsp;0x05 | &amp;nbsp;0x02 |l &amp;nbsp;2 |
| &amp;nbsp;0x06 | &amp;nbsp;0x10 |l &amp;nbsp;LDA |
| &amp;nbsp;0x07 | &amp;nbsp;0x0A |l &amp;nbsp;10 |
| &amp;nbsp;0x08 | &amp;nbsp;0x40 |l &amp;nbsp;SHA |
| &amp;nbsp;0x09 | &amp;nbsp;0x30 |l &amp;nbsp;BNZ |
| &amp;nbsp;0x0A | &amp;nbsp;0x08 |l &amp;nbsp;8 |

Por cuestiones de falta de tiempo no implemente la escritura para la memoria de programa y datos además de que el juego de instrucciones microprogramado es muy limitado.

Las simulaciones del sistema desarrollado fueron exitosas. Me hubiera gustado poder realizar un analísis a fondo del desempeño y funcionamiento del microprocesador, en especial de la segmentación encausada ya que mi acercamiento es cauteloso e imagino es posible mejorar la implementación.

Como referencia consulte ampliamente las notas [Diseño de Microprocesadores|http://rabade.net/pub/arquitectura_de_computadoras/dise%C3%B1o_de_microprocesadores.pdf] del Dr. Jesús Savage Carmona, de parte de mi [Facultad de Ingeniería|http://www.ingenieria.unam.mx].

El entorno de desarrollo que utilice fue [MAX+PLUS II|https://www.altera.com/support/software/download/altera_design/mp2_baseline/dnl-baseline.jsp], puedes descargar el proyecto en formato [zip|http://rabade.net/pub/arquitectura_de_computadoras/microarquitectura.zip] o [tar.gz|http://rabade.net/pub/arquitectura_de_computadoras/microarquitectura.tar.gz], algunas capturas de pantalla del desarrollo y prueba del proyecto están acá:

[http://farm4.static.flickr.com/3250/3141668679_ca0a2f7b47.jpg|http://www.flickr.com/photos/el_mig/3141668679/]
''Arquitectura''
[http://farm4.static.flickr.com/3127/3141668687_a4d18aa61e.jpg|http://www.flickr.com/photos/el_mig/3141668687/]
''Unidad de control de la computadora''
[http://farm4.static.flickr.com/3167/3141668701_d142bd0cc7.jpg|http://www.flickr.com/photos/el_mig/3141668701/]
''Microprogramación''
[http://farm4.static.flickr.com/3228/3141668697_356390bccc.jpg|http://www.flickr.com/photos/el_mig/3141668697/]
''Ruta de datos''
[http://farm4.static.flickr.com/3255/3141672657_678e7d15fd.jpg|http://www.flickr.com/photos/el_mig/3141672657/]
''Programación de la memoria''
[http://farm4.static.flickr.com/3256/3141668677_3d07c29636.jpg|http://www.flickr.com/photos/el_mig/3141668677]
''Simulación''</ins>
</pre></description>
	</item>

	<item>
	  <title>Manuel Rábade</title>
	  <pubDate>Wed, 14 Oct 2009 22:32:00 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Manuel+R%C3%A1bade</link>
	  <description><pre id="diff">!Proyectos <del>universitarios</del><ins>Universitarios
*[Microprocesador von Neumann en VHDL]</ins>
!Platicas y <del>conferencias</del><ins>Conferencias
*[Gestión de Alumbrado Público con Software Libre]
</ins>
</pre></description>
	</item>

	<item>
	  <title>Main page</title>
	  <pubDate>Wed, 14 Oct 2009 21:55:26 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Main+page</link>
	  <description><pre id="diff"><del>:-)</del><ins>!Proyectos universitarios
!Platicas y conferencias</ins>
</pre></description>
	</item>

	<item>
	  <title>Main page</title>
	  <pubDate>Wed, 14 Oct 2009 02:33:44 -0500</pubDate>
	  <link>http://rabade.net/wiki/index.php?page=Main+page</link>
	  <description><pre id="diff"><ins>:-)</ins>
</pre></description>
	</item>



















</channel>
</rss>