@@ -4,26 +4,38 @@ module tb;
4
4
5
5
reg clk;
6
6
reg rst_n;
7
- reg rx;
8
- wire [7 :0 ] uo_out;
9
-
10
- // UART parámetros
11
- parameter CLK_PERIOD = 40 ; // 25 MHz
12
- parameter BIT_PERIOD = 10417 ; // 9600 baud (1/9600 seconds)
13
-
14
- // Instancia del módulo principal
7
+ reg ena;
8
+ reg [7 :0 ] ui_in; // Dedicated inputs
9
+ reg [7 :0 ] uio_in; // IO inputs
10
+ wire [7 :0 ] uo_out; // Dedicated outputs
11
+ wire [7 :0 ] uio_out;
12
+ wire [7 :0 ] uio_oe;
13
+
14
+ // UART parameters
15
+ parameter CLK_PERIOD = 40 ; // 25 MHz clock period
16
+ parameter BIT_PERIOD = 10417 ; // 9600 baud (1/9600 seconds)
17
+
18
+ // Assign UART RX to ui_in[0]
19
+ assign ui_in[0 ] = rx;
20
+ reg rx; // UART RX line
21
+
22
+ // Instantiate the module under test (MUT)
15
23
tt_um_waves uut (
16
24
.clk(clk),
17
25
.rst_n(rst_n),
18
- .rx(rx),
19
- .uo_out(uo_out)
26
+ .ena(ena),
27
+ .ui_in(ui_in),
28
+ .uo_out(uo_out),
29
+ .uio_in(uio_in),
30
+ .uio_out(uio_out),
31
+ .uio_oe(uio_oe)
20
32
);
21
33
22
- // Generar el reloj de 25 MHz
34
+ // Clock generation ( 25 MHz)
23
35
initial clk = 0 ;
24
36
always #(CLK_PERIOD / 2 ) clk = ~clk ;
25
37
26
- // Procedimiento para enviar un byte por UART
38
+ // UART Byte Transmission Task
27
39
task send_uart_byte (input [7 :0 ] byte);
28
40
integer i;
29
41
begin
@@ -44,28 +56,55 @@ module tb;
44
56
endtask
45
57
46
58
initial begin
47
- // Inicialización
59
+ // Initialize signals
48
60
rst_n = 0 ;
49
- rx = 1 ; // UART idle
61
+ ena = 1 ;
62
+ ui_in = 8'b00000000 ; // All inputs LOW
63
+ uio_in = 8'b00000000 ; // No external IO interaction
64
+ rx = 1 ; // UART idle state
65
+
66
+ // Reset pulse
50
67
#100 ;
51
68
rst_n = 1 ;
52
69
53
- // Enviar 'T' para onda triangular
70
+ // UART Commands - Testing Waveform Selection
71
+
72
+ // Select TRIANGLE Wave ('T')
54
73
send_uart_byte(8'h54 ); // ASCII 'T'
55
- #50000 ; // Esperar procesamiento
56
- $display ("uo_out: %b" , uo_out); // wave_select debería ser 000 (onda triangular)
74
+ #50000 ;
75
+ $display ("Triangle wave selected, uo_out = %b" , uo_out);
57
76
58
- // Enviar 'N' para habilitar ruido blanco
77
+ // Select SAWTOOTH Wave ('S')
78
+ send_uart_byte(8'h53 ); // ASCII 'S'
79
+ #50000 ;
80
+ $display ("Sawtooth wave selected, uo_out = %b" , uo_out);
81
+
82
+ // Select SQUARE Wave ('Q')
83
+ send_uart_byte(8'h51 ); // ASCII 'Q'
84
+ #50000 ;
85
+ $display ("Square wave selected, uo_out = %b" , uo_out);
86
+
87
+ // Select SINE Wave ('W')
88
+ send_uart_byte(8'h57 ); // ASCII 'W'
89
+ #50000 ;
90
+ $display ("Sine wave selected, uo_out = %b" , uo_out);
91
+
92
+ // Enable WHITE NOISE ('N')
59
93
send_uart_byte(8'h4E ); // ASCII 'N'
60
- #50000 ; // Esperar procesamiento
61
- $display ("uo_out: %b" , uo_out); // white_noise_en debería ser 1
94
+ #50000 ;
95
+ $display ("White noise enabled, uo_out = %b" , uo_out);
62
96
63
- // Enviar 'F' para deshabilitar ruido blanco
97
+ // Disable WHITE NOISE ( 'F')
64
98
send_uart_byte(8'h46 ); // ASCII 'F'
65
- #50000 ; // Esperar procesamiento
66
- $display ("uo_out: %b" , uo_out); // white_noise_en debería ser 0
99
+ #50000 ;
100
+ $display ("White noise disabled, uo_out = %b" , uo_out);
101
+
102
+ // Select Frequency 'A' (First test frequency)
103
+ send_uart_byte(8'h41 ); // ASCII 'A'
104
+ #50000 ;
105
+ $display ("Frequency A selected, uo_out = %b" , uo_out);
67
106
68
- // Fin de simulación
107
+ // Finish simulation
69
108
$finish ;
70
109
end
71
110
endmodule
0 commit comments