1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
//
// Copyright 2014 Ettus Research LLC
// Copyright 2018 Ettus Research, a National Instruments Company
//
// SPDX-License-Identifier: LGPL-3.0-or-later
//
module mult_tb();
xlnx_glbl glbl (.GSR(),.GTS());
localparam STR_SINK_FIFOSIZE = 9;
reg clk, reset;
always
#100 clk = ~clk;
initial clk = 0;
initial reset = 1;
initial #1000 reset = 0;
initial $dumpfile("mult_tb.vcd");
initial $dumpvars(0,mult_tb);
initial #1000000 $finish;
localparam AW=25;
localparam BW=18;
localparam PW=48;
wire [AW-1:0] a_tdata;
wire [BW-1:0] b_tdata;
wire [PW-1:0] p_tdata;
wire a_tlast, a_tvalid, a_tready, b_tlast, b_tvalid, b_tready;
wire p_tlast, p_tvalid;
reg p_tready = 0;
reg ai_tvalid = 0;
reg bi_tvalid = 0;
counter #(.WIDTH(AW)) ca
(.clk(clk), .reset(reset), .clear(0),
.max(20),
.i_tlast(0), .i_tvalid(ai_tvalid), .i_tready(),
.o_tdata(a_tdata), .o_tlast(a_tlast), .o_tvalid(a_tvalid), .o_tready(a_tready));
counter #(.WIDTH(BW)) cb
(.clk(clk), .reset(reset), .clear(0),
.max(20),
.i_tlast(0), .i_tvalid(bi_tvalid), .i_tready(),
.o_tdata(b_tdata), .o_tlast(b_tlast), .o_tvalid(b_tvalid), .o_tready(b_tready));
mult #(.WIDTH_A(AW), .WIDTH_B(BW), .WIDTH_P(PW), .LATENCY(4)) mult
(.clk(clk), .reset(reset),
.a_tdata(a_tdata), .a_tlast(a_tlast), .a_tvalid(a_tvalid), .a_tready(a_tready),
.b_tdata(b_tdata), .b_tlast(b_tlast), .b_tvalid(b_tvalid), .b_tready(b_tready),
.p_tdata(p_tdata), .p_tlast(p_tlast), .p_tvalid(p_tvalid), .p_tready(p_tready));
initial
begin
@(negedge reset);
repeat (100)
@(posedge clk);
ai_tvalid <= 1;
repeat (10)
@(posedge clk);
bi_tvalid <= 1;
repeat (10)
@(posedge clk);
p_tready <= 1;
end
endmodule // mult_tb
|