Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ISSN 0122-1701 1
Resumen— Los módulos de memorias como la unidad de de la ciencia ha permitido lograr la obtención de lo que hoy se
registros, la memoria de datos y la memoria de instrucciones son conoce como la ya mencionada computadora.
los que permiten manejar el flujo de información en forma de
almacenamiento. Su comprensión (con ayuda de otras ideas) En un intento por conocer todo sobre una pc, se propone en
permite conocer un poco más sobre cómo se comporta por este documento el desarrollo de ciertos programas que
ejemplo el procesador con el cual fue escrito este documento. Es
entonces que gracias al desarrollo tanto teórico como virtual describen el funcionamiento de piezas que se encuentran
utilizando el lenguaje de descripción de hardware Verilog se dentro de una CPU y que sirven para almacenar datos, es
logró describir el funcionamiento de dichas memorias, así como decir, las memorias.
adquirir nuevos conocimientos sobre la sintaxis del lenguaje.
El desarrollo de cada programa (de ahora en adelante modulo)
se propone de la siguiente manera:
Palabras clave— Descripción de hardware, memoria de datos,
• Conceptualización y proposición del módulo como
memoria de instrucciones, Unidad de registros , Verilog.
un diagrama de bloque que permita conocer el flujo
de datos.
Abstract— Memory modules such as the register unit, data
memory, and instruction memory are what allow you to handle • Parte de implementación, en donde se usará el
the flow of information in the form of storage. Their lenguaje de Verilog para describir tanto el diseño del
understanding (with the help of other ideas) allows us to know a módulo a partir del diagrama del apartado anterior,
little more about how it behaves, for example, the processor with como pruebas que permitan validar los resultados al
which this document was written. It is then thatin terms of both momento de ejecución los modulos.
theoretical and virtual development using the Verilog hardware • Parte analítica y de validación de resultados
description language, it was possible to describe the operation of
these memories, as well as to acquire new knowledge about the
II. MÉTODOLOGÍA Y DESARROLLO
syntax of the language.
(cada módulo tendrá un archivo independiente) y la carga de - dataWr: Almacena la información a escribir.
datos en una matriz. Por ejemplo, para el caso de la unidad de - Rd: Uno de los 32 registros de la unidad de
registros la matriz representaría los 32 registros, para la registros en donde irá a parar la información que
unidad de memoria sería el lugar donde reposan los datos, y se quiere escribir. Trabajo conjunto a regWr.
para la memoria de instrucciones sería el lugar donde se - regWr: Controlador, indicativo de que se va a
almacenan las instrucciones de cada operación. escribir información.
- clk: reloj de sincronización.
Nota: Los archivos son similares a como se presenta en la
figura registerFIle.txt Como salidas:
- regs[Rn]: Información almacenada en el registro
A. Descripción del modulo Rn.
- regs[Rm]: Información almacenada en el
• Unidad-archivo de Registros registro Rm
El circuito de la unidad de registros es descrito mediante el - Las entradas cambian según sea la acción, es
diagrama de bloque que se muestra a continuación: decir, si se busca leer o escribir. Para la primera
acción se proporcionan datos a Rn y Rm, datos
que consisten en cadenas de 5 bits los cuales
indican las direcciones de los registros de entre
los del conjunto; cadenas de 5 bits porque se
tiene que 25 es igual a 32 diferentes
posibilidades. Por otra parte, si se busca escribir
se debe de proporcionar valores a las entradas de
dataWr, Rd y regWr; Rd funciona de manera
similar a las direcciones ingresadas para lectura.
- Las salidas serán algún dato en específico
cuando la acción del módulo es lectura. Cuando
es escritura no se obtiene algún valor en
particular.
Implementación en código
registerFile.txt
Esta indica que RF_rs1 será la concatenación de los bits que Tipos de entrega de datos en el modo lectura de la memoria de
se encuentran en la posición memory[temp] (inicio), datos
memory[temp+1] y así sucesivamente.
La memoria de datos es el módulo encargado de almacenar
Al final de las asignaciones se ejecuta una estructura always datos de procesamiento. Es similar en cuanto al
condicionada por los posedge (flancos positivos) de clk. Por funcionamiento descrito por la unidad de registros, solo que
cada flanco positivo alcanzado se hará una verificación de la esta vez se añaden ciertos tipos de retorno de información
entrada en_wr para establecer si se quiere realizar escritura. descrito en la figura anterior.
En caso de que la verificación sea verdadera se hace la
asignación de los nuevos valores a las posiciones de memoria Cuenta con cuatro entradas y una salida. Las funciones de
(matriz), como se puede ver con el conjunto de línea 31-34. El cada una son las siguientes:
recorrido y asignación son similares al caso de lectura
anterior. - Address: Recibe la dirección en donde va a leer
o escribir información.
____________________________
4 Scientia et Technica Año 2022, No 01, Mes 09 de 2022. Universidad Tecnológica de Pereira.
…<={{{8{Memory[temp][7]}}, …, }}
Implementación en código Verilog de la memoria de
Esta sintaxis permite multiplicar un número de instrucciones
veces determinado la información que se encuentre
en Memory[temp][7]. Esto es más que todo usado Luego de la definición de las entradas y salidas dadas por el
para las operaciones en donde no se retorna todo el diagrama de bloques, se procede con creación de la matriz INS
contenido del registro (32 bits). y el valor que calculará la posición de inició de cada
cuadrupla dentro del archivo de texto.
• Memoria de instrucciones
Luego de leer el archivo de texto se hace la asignación de los
valores leídos hacia las variables de salida.
Información
B. Resultados y análisis
El circuito de la memoria de instrucciones es descrito
mediante el diagrama de bloque que se muestra a
Para cada test se mostrará su respectivo testbench, también
continuación:
conocido como banco de pruebas. En este se debe hacer
claridad sobre ciertas generalidades:
____________________________
6 Scientia et Technica Año 2022, No 01, Mes 09 de 2022. Universidad Tecnológica de Pereira.
• Memoria de datos
Testbench
Testbench unidad de registros #2 El banco de pruebas definido para la memoria de datos fue el
siguiente:
Resultados y análisis
2. simtime=10,
DMAddress=00000000000000000000000000000001,
DataWr=00000000000000000000000000000000,
DMCtrl=001,en_wr_tb=0,
DataRead=00000000000000000000000011000000
3. simtime=20,
DMAddress=00000000000000000000000000000001,
DataWr=00000000000000000000000000000000,
DMCtrl=010,en_wr_tb=0,
Testbench memoria de datos #1. DataRead=00000000110000000000001010110011
4. simtime=30,
DMAddress=00000000000000000000000000000001,
DataWr=00000000000000000000000000000000,
DMCtrl=011,en_wr_tb=0,
DataRead=00000000110000000000001010110011
5. simtime=40,
DMAddress=00000000000000000000000000000001,
DataWr=00000000000000000000000000000000,
DMCtrl=100,en_wr_tb=0,
DataRead=00000000000000000000000000000000
6. simtime=50,
DMAddress=00000000000000000000000000000001,
DataWr=00000000000000000000000000000000,
DMCtrl=101,en_wr_tb=0,
DataRead=00000000000000000000000011000000
Testbench memoria de datos #2. 7. simtime=70,
DMAddress=00000000000000000000000000000001,
DataWr=00000000000000000000000000001111,
DMCtrl=000,en_wr_tb=1,
DataRead=00000000000000000000000000000000
8. simtime=80,
DMAddress=00000000000000000000000000000001,
DataWr=00000000000000000000000000000000,
DMCtrl=010,en_wr_tb=0,
DataRead=00001111110000000000001010110011
9. simtime=90,
DMAddress=00000000000000000000000000000001,
DataWr=00000000000000000000000000001111,
DMCtrl=001,en_wr_tb=1,
Testbench memoria de datos #3. DataRead=00000000000000000000111111000000
____________________________
8 Scientia et Technica Año 2022, No 01, Mes 09 de 2022. Universidad Tecnológica de Pereira.
11. simtime=110,
DMAddress=00000000000000000000000000000001, Con todo lo anterior, se define entonces la siguiente
DataWr=00000000000000000000000000001111, comprobación:
DMCtrl=010,en_wr_tb=1,
DataRead=00000000000011110000001010110011
12. simtime=120,
DMAddress=00000000000000000000000000000001,
DataWr=00000000000000000000000000000000,
DMCtrl=010,en_wr_tb=0,
Dirección enviada al módulo memoria de datos
DataRead=00000000000000000000000000001111
000 – Word Byte (8 bits)
13. simtime=130,
001 – Half word (16 bits)
DMAddress=00000000000000000000000000000001,
010 – Word (32 bits)
DataWr=00000000000000000000000000001111,
011 – Unsigned Word (32 bits)
DMCtrl=011,en_wr_tb=1,
100 – Unsigned Byte (8 bits)
DataRead=00000000000000000000000000001111
101 – Unsigned Half Word (16 bits)
14. simtime=140,
Nota: Esta última opción fue añadida para igualar el número
DMAddress=00000000000000000000000000000001,
de posibilidades usadas por la fase de escritura.
DataWr=00000000000000000000000000000000,
DMCtrl=010,en_wr_tb=0,
Fase de lectura
DataRead=00000000000000000000000000001111
Tabla de verificación de resultados en fase de lectura,
15. simtime=150,
memoria de datos
DMAddress=00000000000000000000000000000001,
FA Resultado Resultado
DataWr=00000000000000000000000000001111, SE esperado obtenido
DMCtrl=100,en_wr_tb=1, 0 00000000000 00000000000
DataRead=00000000000000000000000000000000 00000000000 00000000000
0000000000 0000000000
16. simtime=160, 10 00000000000 00000000000
DMAddress=00000000000000000000000000000001, 00000000000 00000000000
DataWr=00000000000000000000000000000000, 0011000000 0011000000
DMCtrl=010,en_wr_tb=0, 20 00000000110 00000000110
DataRead=00001111000000000000000000001111 00000000000 00000000000
1010110011 1010110011
30 00000000110 00000000110
17. simtime=170, 00000000000 00000000000
DMAddress=00000000000000000000000000000001, 1010110011 1010110011
DataWr=00000000000000000000000000001111, 40 00000000000 00000000000
DMCtrl=101,en_wr_tb=1, 00000000000 00000000000
DataRead=00000000000000000000111100000000 0000000000 0000000000
50 00000000000 00000000000
18. simtime=180, 00000000000 00000000000
DMAddress=00000000000000000000000000000001, 0011000000 0011000000
DataWr=00000000000000000000000000000000,
19. DMCtrl=010,en_wr_tb=0, Fase de escritura
DataRead=00000000000011110000000000001111
Dato a escribir:
Para poder validar los resultados obtenidos se puede hacer una
comparación con el archivo que el módulo debe de leer y 00000000000000000000000000001111
posteriormente deducir el valor el cual debe de ser arrojado
por el módulo. Tabla de verificación de resultados en fase de escritura,
memoria de datos
Toda la prueba tiene dos fases, la fase de lectura y la fase de FAS Resultado esperado Resultado obtenido de
escritura. Ambas funcionan en la misma dirección, lo que E lectura
cambia es el tipo de lectura/escritura a realizar, es decir , las 70, 000011111100000000000 000011111100000000000
operaciones descritas en la figura Tipos de entrega de datos 80 01010110011 01010110011
en el modo lectura de la memoria de datos. 90, 000000000000111100000 000000000000111100000
Scientia et Technica Año 2022, No 01, Mes 08 de 2022. Universidad Tecnológica de Pereira. 9
100 01010110011 01010110011
110, 000000000000000000000 000000000000000000000
120 00000001111 00000001111
130, 000000000000000000000 000000000000000000000
140 00000001111 00000001111
150, 000011110000000000000 000011110000000000000
160 00000001111 00000001111
170, 000000000000111100000 000000000000111100000
180 00000001111 00000001111
• Memoria de instrucciones
Dirección 15
Testbench
La instrucción esperada para el resultado 3 es:
El banco de pruebas definido para la memoria de
instrucciones fue el siguiente:
____________________________
10 Scientia et Technica Año 2022, No 01, Mes 09 de 2022. Universidad Tecnológica de Pereira.
Dirección 10
Dirección 63
III. CONCLUSIONES
REFERENCIAS
____________________________