El ejercicio consiste en describir en Chisel los bloques Adder 2, Carry select adder y Adder substractor de la plataforma HDLbits
El bloque Adder 2 consiste en 3 módulos, el módulo add1.scala
es un full adder de 1 bit, el cual realiza la suma y "carry-out" de las entradas "a", "b" y "cin", el módulo add16.scala
es un full adder de 16 bit descrito a partir del add1.scala
, cuya entrada "cin" es igual a 0 y su salida cout se ignora en la descripción del módulo top_module.scala
. Este módulo realiza la suma binaria de "a"y "b" ambas entradas de 32 bits, y cuenta con una salida "sum" también de 32 bits.
El bloque se muestra a continuación
El test realiza dos pruebas:
A=50, B=60 -> El bloque funciona correctamente si sum=110
A=20, B=30 --> El bloque funciona correctamente si sum=50
Clonar el repositorio workshop_chisel-kvflorez
Dentro de la carpeta abrir un terminal y ejecutar el siguiente comando
./run-examples.sh top_module
La simulación funciona si en el terminal puede leer las palabras "Success" y el número de ciclos probados.
Si quiere crear un archivo .v a partir del .scala utilice el siguiente comando
./run-examples.sh top_module --backend-name verilator
4. Para observar la simulación en gtkwave utilice el siguiente comando
```sh
gtkwave test_run_dir/examples/top_module/top_module.vcd
El bloque Carry select adder consiste en 3 módulos, el módulo add1.scala
es un full adder de 1 bit, el cual realiza la suma y "carry-out" de las entradas "a", "b" y "cin", el módulo add16.scala
es un full adder de 16 bit descrito a partir del add1.scala
. El módulo top_module_carry
tiene una mejora respecto al top_module.scala
ya que la segunda etapa del sumador se duplica, y la entrada "cin" de uno es 0 y del otro 1. Las salidas de estos dos módulos se conectan a un MUX2-1 lo cual permite que la suma sea más rápida, y obtener la salida "sum" del módulo top_module_carry
.
El bloque se muestra a continuación
El test realiza dos pruebas:
A=50, B=60 -> El bloque funciona correctamente si sum=110
A=20, B=30 --> El bloque funciona correctamente si sum=50
Clonar el repositorio workshop_chisel-kvflorez
Dentro de la carpeta abrir un terminal y ejecutar el siguiente comando
./run-examples.sh top_module_carry
La simulación funciona si en el terminal puede leer las palabras "Success" y el número de ciclos probados.
Si quiere crear un archivo .v a partir del .scala utilice el siguiente comando
./run-examples.sh top_module_carry --backend-name verilator
4. Para observar la simulación en gtkwave utilice el siguiente comando
```sh
gtkwave test_run_dir/examples/top_module_carry/top_module_carry.vcd
El bloque Adder substractor consiste en 3 módulos, el módulo add1.scala
es un full adder de 1 bit, el cual realiza la suma y "carry-out" de las entradas "a", "b" y "cin", el módulo add16.scala
es un full adder de 16 bit descrito a partir del add1.scala
. El módulo top_module_addsub
permite realizar tanto suma o resta de las entradas al añadir una compuerta XOR al módulo top_module.scala
, la cual tiene como entradas "b" de 32 bits y "sub" de 1 bit, y su salida se conecta a la entrada "b" de cada uno de los bloques add16.scala
.
El bloque se muestra a continuación
El test realiza dos pruebas:
A=90, B=30, Sub=1 -> El bloque funciona correctamente si sum=60, ya que se está realizando una resta
A=90, B=30, Sub=0 --> El bloque funciona correctamente si sum=120, ya que se está realizando una suma
Clonar el repositorio workshop_chisel-kvflorez
Dentro de la carpeta abrir un terminal y ejecutar el siguiente comando
./run-examples.sh top_module_addsub
La simulación funciona si en el terminal puede leer las palabras "Success" y el número de ciclos probados.
Si quiere crear un archivo .v a partir del .scala utilice el siguiente comando
./run-examples.sh top_module_addsub --backend-name verilator
4. Para observar la simulación en gtkwave utilice el siguiente comando
```sh
gtkwave test_run_dir/examples/top_module_addsub/top_module_addsub.vcd