sim_simple
1 `timescale 1ns / 1ps 2 ////////////////////////////////////////////////////////////////////////////////// 3 //sim_sample.v 4 ////////////////////////////////////////////////////////////////////////////////// 5 6 7 module sim_sample( 8 input clk, 9 input reset, 10 input [7:0] dat_in, 11 input enable, 12 output reg [9:0] comp_cnt 13 ); 14 reg [7:0] dat_in_dl; 15 always @ (posedge clk or posedge reset ) 16 begin 17 if (reset) 18 begin 19 dat_in_dl <= 8'h00; 20 comp_cnt <= 10'd0; 21 end 22 else if (enable) 23 begin 24 dat_in_dl <= dat_in; 25 if (dat_in_dl == dat_in ) 26 comp_cnt <= comp_cnt + 1; 27 end 28 end 29 endmodule
1 `timescale 1ns / 1ps 2 ////////////////////////////////////////////////////////////////////////////////// 3 // tb_sim_sample 4 ////////////////////////////////////////////////////////////////////////////////// 5 6 7 module tb_sim_sample_2; 8 parameter QUANT_VECTORS = 32; // quantity of vector samples 9 // input signal to the test module 10 reg reset; 11 reg sim_clk; 12 reg [7:0] dat_in; 13 reg enable; 14 reg [31:0] random_num; 15 // output signals from the test module 16 wire [9:0] comp_cnt; 17 18 // testbench signals 19 integer i; 20 integer j; 21 22 // clock periods 23 parameter CLK_PERIOD = 10; // 10 ns = 100 MHz 24 25 // ------------ Design implementation 26 27 // module under test 28 sim_sample mut 29 ( 30 .clk ( sim_clk ), 31 .reset ( reset ), 32 .dat_in ( dat_in ), 33 .enable ( enable ), 34 .comp_cnt ( comp_cnt ) 35 ); 36 37 // generate clock and reset 38 39 initial sim_clk = 1'b0; 40 41 always #( CLK_PERIOD/2.0 ) 42 sim_clk = ~sim_clk; 43 44 initial reset = 1'b1; 45 initial i = 0; 46 47 // reset goes inactive after 20 clocks 48 always @ (posedge sim_clk) 49 begin 50 i = i + 1; 51 if (i == 20) 52 #1 reset <= 1'b0; 53 end 54 55 // feed stimulus vectors to module under test 56 initial begin 57 dat_in = 8'b0; 58 enable = 1'b0; 59 random_num = $random(1); 60 // 61 wait (reset); 62 wait (~reset); 63 @(posedge sim_clk) 64 for ( j = 0; j< 20 ; j = j+ 1) 65 begin 66 @ (posedge sim_clk); 67 end 68 69 enable = 1'b1; 70 dat_in = 8'h00; 71 // 72 for (j = 0; j< ( QUANT_VECTORS) ; j = j+ 1) 73 begin 74 @ (posedge sim_clk); 75 random_num = $random; 76 if (random_num[2:0] != 3'h0) 77 dat_in = dat_in + 1; 78 end 79 80 // 81 @ (posedge sim_clk); 82 enable = 1'b0; 83 84 forever 85 begin 86 @ (posedge sim_clk) 87 enable = 1'b0; 88 end 89 end 90 91 endmodule