123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /*
- * mc97_rfi_tb.v
- *
- * vim: ts=4 sw=4
- *
- */
- `default_nettype none
- module mc97_rfi_tb;
- localparam integer GEN_FREQ = 15; /* Hz */
- // Signals
- // -------
- // Tick
- reg [15:0] tick_cnt;
- wire tick;
- // Tone Generation
- real phase;
- real phase_inc = 6.28 * GEN_FREQ / 8000;
- real tmp;
- // DUT connections
- reg [15:0] pcm_data = 0;
- wire pcm_stb;
- wire rfi;
- // Clock reset
- reg clk = 1'b0;
- reg rst = 1'b1;
- // Setup recording
- // ---------------
- initial begin
- $dumpfile("mc97_rfi_tb.vcd");
- $dumpvars(0,mc97_rfi_tb);
- # 600000000 $finish;
- end
- always #500 clk <= !clk; // 1 MHz
- initial begin
- #2000 rst = 0;
- end
- // Generate tone
- // -------------
- // Tick at 8000 Hz
- always @(posedge clk)
- if (rst)
- tick_cnt <= 0;
- else
- tick_cnt <= tick ? 16'd123 : (tick_cnt - 1);
- assign tick = tick_cnt[15];
- // Tone
- always @(posedge clk)
- if (rst)
- phase <= 0.0;
- else if (tick)
- phase <= phase + phase_inc;
- always @(*)
- begin
- tmp = $cos(phase) * (1 << 24) / GEN_FREQ;
- if (tmp > 32767)
- pcm_data = 32767;
- else if (tmp < -32768)
- pcm_data = -32768;
- else
- pcm_data = tmp;
- end
- assign pcm_stb = tick;
- // DUT
- // ---
- mc97_rfi #(
- .CLK_FREQ(1_000_000),
- .F_MIN(10),
- .F_MAX(100)
- ) rfi_I (
- .pcm_data (pcm_data),
- .pcm_stb (pcm_stb),
- .rfi (rfi),
- .clk (clk),
- .rst (rst)
- );
- endmodule // mc97_rfi_tb
|