Comunicaciones entre CPU

5

Entonces, tengo una pequeña situación. Tengo un MC68000 como la CPU principal de mi sistema y un 68008 como mi CPU de sonido para interactuar con un YM2612 y mi generador de video RGB. En este momento, solo detendré la CPU secundaria cada vez que necesite decirle algo, pero eso parece horriblemente ineficiente.

He programado la Sega Mega Drive antes, e implementan un concepto de "Comms RAM" que es básicamente una parte de la memoria en la que una CPU puede escribir y la otra lee. ¿Cómo implementaría algo como esto sin colisiones de autobuses?

    
pregunta Tristan Seifert

3 respuestas

5

Lo que se refiere puede lograrse con una "RAM de doble puerto", que permite el acceso simultáneo a la misma ubicación de memoria utilizando la lógica de arbitraje en el chip.

Están disponibles desde 1 KB hasta varios MB, y no son baratos: a dispositivo de 16KB cuesta $ 30 en cantidades de 1 y $ 22 en cientos en Digi-Key. Aquí hay una hoja de datos para el dispositivo. Supuse que quería una interfaz de 8 bits, ya que está conectando un lado con un 68008. Puede encontrar más dispositivos en Digi-Key buscando " puerto dual ".

    
respondido por el tcrosley
3

No recuerdo los detalles de la serie 68K lo suficientemente bien, pero aquí está la esencia de una idea: si su RAM es lo suficientemente rápida, y los dos relojes de la CPU se derivan del mismo oscilador maestro, es posible que pueda Obtenga acceso libre de conflictos mediante el intercalado. Motorola usó un esquema como este con el conjunto de chips 6809/6847/6883, donde la CPU 6809 consiguió el bus durante la E alta del reloj, y el chip de video 6847 lo consiguió durante los tiempos bajos del E Clock. Funcionó b / c cada bus maestro pudo completar una lectura o escritura en un ciclo, y se sincronizaron desde el mismo reloj.

Si recuerdo, el 68K tenía la capacidad de extender el acceso a la memoria a través de varios relojes usando DTACK o BUSERR para completar los ciclos. El hecho de que pueda estirar los relojes no significa que tenga que hacerlo, o que deba hacerlo. Si su RAM es lo suficientemente rápida, lo cual es una posibilidad distinta dada la RAM estática moderna y la velocidad de reloj probablemente baja de 68 K, es posible que pueda ejecutar con DTACK a tierra, para acceder al ámbito del acceso de un solo ciclo. El único problema es si tiene algo como el reloj 6800 E con un 68 k y con el 68008. Vale la pena mirar, b / c si puede hacer que funcione, ninguna CPU tiene que disminuir la velocidad y obtienes memoria compartida libre de fallas.

    
respondido por el JustJeff
2

Suponiendo que se permite que cualquiera de los dos direccione un bus común, y esto no está claro en la descripción, entonces puede transferir bloques de datos con dos bits de semáforo. Los bits en la RAM implican un acceso compartido sin colisión. Pero los bits pueden estar en los pines del puerto, ver más abajo.

Muchas lunas desde la última vez que hice esto, pero debería ser tan simple como

  • Maestro: datos de depósito. Establecer "Datos listos"
  • Esclavo: leer datos. Establecer "Datos tomados"
  • Maestro: Restablecer "Listo" (primero). Restablecer "tomado" ciclo completo.

Si su hardware no lo permite directamente, puede implementar un dispositivo de hardware que cambie de bus a bus utilizando un protocolo similar con los "bits" en los pines del puerto. (Ligero cambio en el apretón de manos pero el mismo principio). (M: Toma esto, S: OK, M: Observado, S: Gracias = p. Ej., GPIB)

PERO : ¿por qué limitarse a la "RAM compartida genuina" cuando puede lograr un resultado funcionalmente equivalente con un enlace COMS? La velocidad puede ser una razón. ¿Cuánta velocidad necesitas? Algunos de los métodos a continuación pueden ser muy rápidos.

Hay una gran cantidad de esquemas de interconexión en serie que permiten este tipo de interacción, algunas hechas para el uso del intérprete y otras bastante fáciles de adaptar. SPI, IIC (multimaster), RS485 (... CAN) e incluso / por supuesto RS232. Cuando todo lo demás falla, hay "Ethernet" en todas sus variantes (hasta ~ Gb / s) o USB (hasta cientos de Mb / s.)

    
respondido por el Russell McMahon

Lea otras preguntas en las etiquetas