Advertisement
kekellner

Lab09 - Ej04 - Código y testbench

Nov 7th, 2021 (edited)
2,299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `include "contador.v"
  2. `include "rom.v"
  3.  
  4. module ej04 (input clk, reset, en, load, input [3:0] loadValue, output [7:0] data);
  5.  
  6.     wire [3:0] contador_a_rom;
  7.  
  8.     contador U1 (clk, reset, en, load, loadValue, contador_a_rom);
  9.     rom U2(contador_a_rom, data);
  10.  
  11. endmodule
  12.  
  13.  
  14.  
  15. module tb();
  16.  
  17.     reg clk, reset, en, load;
  18.     reg [3:0] loadValue;
  19.     wire [7:0] data;
  20.  
  21.     ej04 U1(clk, reset, en, load, loadValue, data);
  22.  
  23.     initial begin
  24.         $dumpfile("timing.vcd");
  25.         $dumpvars(0, tb);
  26.     end
  27.  
  28.     initial begin
  29.         clk = 0; reset = 0; en = 0; load = 0; loadValue = 4'b0;
  30.  
  31.         $monitor("reset: %b enable: %b load: %b loadValue: %b || data: %b\t %d", reset, en, load, loadValue, data, $time);
  32.  
  33.         $display("Al activar el enable la salida es siempre xxxxxxxx porque no hemos hecho reset");
  34.         en = 1;
  35.         #22
  36.         en = 0;
  37.         #10
  38.         $display("Al activar el load sí cargamos un valor en el contador por lo que la ROM responde con el dato correspondiente. La salida de data es xxxxxxxx por un momento por la forma en la que funciona la instrucción $monitor. Primero se ejecuta porque load cambió y luego porque data cambió.");
  39.         load = 1;
  40.         #20
  41.         load = 0;
  42.         $display("Cambiamos el valor de precarga del contador");
  43.         loadValue = 4'b1111;
  44.         #10
  45.         $display("Al activar load de nuevo la memoria ROM muestra el dato correspondiente. Data pareciera no cambiar al principio, pero de nuevo es por la forma en la que funciona $monitor.");
  46.         load = 1;
  47.         #10
  48.         $display("Activamos el enable del contador para que cuente. El valor de data muestra la salida de la ROM hasta que $finish se ejecuta. LoadValue es irrelevante porque la señal de load = 0. La instrucción JC pareciera no ejecutarse correctamente (en data falta 0000_0000). Sin embargo, como 'data' es igual en ambas líneas (0000_0000) entonces $monitor no lo detecta y por ende no lo imprime.");
  49.         load = 0;
  50.         en = 1;
  51.  
  52.     end
  53.  
  54.     always
  55.         #5 clk = ~clk;
  56.  
  57.     initial
  58.         #230 $finish;
  59.  
  60. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement