Aprenda por la fijación: una CPU más verilog

October 8, 2022 0 By cpiy

, ya que comúnmente trabajo con los estudiantes, siempre estoy buscando una CPU simple, preferiblemente en Verilog, en la zona de Goldilocks. Es decir, no tan bien simple como no tan bien. Tenía muchas esperanzas de este procesador RISC de 16 bits presentado por [FPGA4Student], sin embargo, sin algún trabajo adicional, lo más probable es que no sea utilizable para su propósito previsto.

La CPU en sí es bastante simple y se ajusta a una página web relativamente larga. Sin embargo, los detalles sobre esto son un poco escasos. Esto no es siempre una mala cosa. Puedes ofrecer a los alumnos de la ayuda de la ayuda. Luego, de nuevo, también puede ofrecer también poco. Sin embargo, ¿qué era peor es uno de los módulos necesarios para que desapareciera el trabajo? Puede sugerir que fue un ejercicio delegado al lector, sin embargo, lo más probable es que se haya explicado de esa manera.

Al principio, estaba preparado para eliminar el marcador y seguir adelante. Luego, decidí que el proceso de arreglar este estilo, así como el análisis de un bit, puede ser realmente más instructivo que solo estudiar un diseño completamente de trabajo. Así que decidí compartir mi reparación con usted, así como mirar dentro del diseño un poco más. Además de eso, le mostraré exactamente cómo hacer que la cosa se ejecute en un simulador de Internet para que pueda experimentar sin instalación de aplicaciones de software. Por supuesto, si se siente cómodo con un cuadro de herramientas de Verilog (como los de Xilinx o Altera, o incluso los GRATIS como Icarus o CVER), debe tener ningún problema para hacer ese trabajo, tampoco. Esta vez me centraré en exactamente cómo funciona la CPU, así como la próxima vez, le mostraré exactamente cómo simularlo con algunas herramientas gratuitas.

El diseño

Comencemos con un diagrama de bloques de la CPU. No es muy diferente de otras arquitecturas de RISC, particularmente cualquier tipo de que no utilice un oleoducto. Un contador de programas (PC) conduce la memoria de la dirección. Hay un sumador dedicado para agregar cuatro a la PC para cada dirección, ya que cada dirección es de cuatro bytes. Un MUX le permite hacer toneladas la PC para la siguiente dirección o con un objetivo de salto (en realidad, un salto absoluto, una rama computarizada o una dirección de retorno). Hay un addador más dedicado para las sucursales computadas.

El procesamiento se produce en un sistema lógico aritmético (ALU) que realiza diferentes operaciones. El destino puede ser memoria primaria o uno de los registros. Los datos de registro utilizan una técnica antigua para evitar un problema típico. Supongamos que puede verificar un registro por ciclo. Si solo habilita un registro en una instrucción, está bien. Sin embargo, si habilita una dirección para hacer algo como agregar dos registros, tendrá dificultad para cargarlos a ambos a menos que estire la dirección de la dirección. Es por eso que el archivo de registro tiene dos puertos de salida.

La realidad es que los datos del registro son al menos un área donde el estilo no se sintetizaría al hardware genuino además de lo que podría. Por un lado, hay un bucle para el bloque preliminar a cero los registros. La mayoría de las herramientas de síntesis simplemente lo tirarían. Estarías mucho mejor con una señal de reinicio. El otro problema posible depende de qué FPGA preciso se dirigirá, así como las herramientas que usa.

El diseñador proporciona dos puertos revisados ​​a los registros, sin embargo, el almacenamiento subyacente es el mismo. Esto dificultaría utilizar células de carnero especializadas si estaban disponibles. Un método más típico es simplemente utilizar dos bloques de registro separados, uno para cada puerto revisado. Un componer enviará datos a ambos bloques, por lo que desde el exterior no puede indicar la diferencia. Sin embargo, con frecuencia, esto resultará en un diseño más rápido y más compacto.

Sería fascinante (y no extremadamente difícil) reescribir los datos del registro para hacer esto. Sin embargo, si no se va a desarrollar hasta el hardware, lo más probable es que no observe ningún tipo de diferencia.

Como la mayoría de las CPUs similares, todo el control funciona a MUXES seleccionando qué datos se envían dónde. En particular, hay cuatro MUXES en la trayectoria de datos del procesador:

PCSRC – Ruta el valor de la PC “siguiente” al mostrador del programa

Regdst: selecciona qué registro para componer de dos campos en la dirección (el diagrama muestra tres entradas, sin embargo, eso parece ser un error)

BSRC: selecciona el segundo desacuerdo con la ALU (ya sea un valor instantáneo o un valor de registro)

WBSRC: la “Escribir Atrás” MUX selecciona qué datos se devuelven a los registros para escribir

Mesas de diseño

El resto del estilo muestra las trece instrucciones, los cinco formatos de dirección, así como las señales de control requeridas para cada uno de los formatos. Los matices de las instrucciones en cada clasificación dependen de lo que se establece el ALU. En otras palabras, una dirección Agregar, así como una dirección de restar, exactamente exactamente lo mismo, excepto lo que hace la ALU. Como puede imaginar, la ALU toma dos entradas, así como un código de operación, además de crea una salida.

La publicación original no afirma realmente qué instrucciones se encuentran en qué categoría, sin embargo, es bastante simple para rompecabezasfuera. Las toneladas, así como las instrucciones de la tienda están en la memoria de acceso a los formatos. La sucursal en las instrucciones iguales y iguales se encuentran en la categoría de sucursales. La dirección de salto tiene su propio formato. Todas las demás instrucciones son “procesamiento de datos”. La tabla muestra un código OP “Distancia de la Hamming”, sin embargo, esto no aparece en ningún otro lugar, incluso en el código, por lo que sospecho que es un corte, así como un error de pegado.

Las dos tablas hacen una gran tarea de resumir el requisito de operaciones para hacer que el trabajo de la CPU. Hay nueve señales de control únicas:

Regdst: esto corresponde al MUX en el diagrama del nombre exacto del mismo nombre, así como selecciona si el destino es un registro (aparece como reg_dst en el código)

AlUSRC: selecciona la fuente del desacuerdo de ALU (igual que el BSRC MUX en el diagrama, así como se muestra como ALU_SRC en el código)

Memtoreg – Activo cuando se produce una memoria para registrarse (MEM_TO_REG en el código)

Regwrit – se establece cuando se compone debe ir a un registro (reg_write en el código)

MemeRead: se establece cuando una memoria revisada son los datos de origen de la dirección (MEM_READ en el código)

MemWrite: se establece cuando la memoria es el destino de composición (MEM_WRITE en el código)

Sucursal – activo cuando una sucursal está en desarrollo (combinación de BEQ, así como señales BNE en el código)

Aluop: combinado con parte de la instrucción, selecciona la operación para realizar en la ALU (ALU_OP en el código)

Saltar – activo cuando un salto está en progreso

La tabla corresponde directamente a Verilog en el sistema de control, excepto los cambios de nombre, que es lamentable, ya que hace que la tabla sea un poco más difícil de seguir. Por ejemplo, aquí está el código para una dirección de procesamiento de datos con Opcode 0010:

4’b0010: // data_processing
empezar
reg_dst = 1’b1;
ALU_SRC = 1’B0;
mem_to_reg = 1’B0;
REG_WRITE = 1’B1;
MEM_READ = 1’B0;
mem_write = 1’B0;
BEQ = 1’B0;
bne = 1’b0;
ALU_OP = 2’B00;
salto = 1’B0;
final
Compare eso a la tabla en la publicación original, así como lo verá, lo verá directamente. En inglés, la dirección es un aparecido de dos registros que escriben a los registros con un código de operación de ALU de 0, así como es un salto o una sucursal.

Inexplicablemente, este bloque se duplica para todas las instrucciones de procesamiento de datos aunque no sea necesario. Afortunadamente, para la simulación, realmente no importará, así como la mayoría de las herramientas de síntesis lo resolverán, así como la fusionará el código idéntico para usted.

La próxima vez

En la próxima entrega, le mostraré exactamente cómo ensuciar el estilo en una de mis herramientas de estilo rápido preferidas, EDA Playground. Hubo un dato faltante, así como un poco de masaje necesarios para que funcione con la herramienta de Internet. Sin embargo, la CPU funciona según lo prometido, una vez que descubras algunas peculiaridades. Si desea una mirada furtiva en la simulación, puede inspeccionar el video, a continuación.