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
|
module cbus_tb;
`define ch1in_freq 0
`define ch2in_freq 1
`define ch3in_freq 2
`define ch4in_freq 3
`define ch1out_freq 4
`define ch2out_freq 5
`define ch3out_freq 6
`define ch4out_freq 7
`define rates 8
`define misc 9
task send_config_word;
input [7:0] addr;
input [31:0] data;
integer i;
begin
#10 serenable = 1;
for(i=7;i>=0;i=i-1)
begin
#10 serdata = addr[i];
#10 serclk = 0;
#10 serclk = 1;
#10 serclk = 0;
end
for(i=31;i>=0;i=i-1)
begin
#10 serdata = data[i];
#10 serclk = 0;
#10 serclk = 1;
#10 serclk = 0;
end
#10 serenable = 0;
// #10 serclk = 1;
// #10 serclk = 0;
end
endtask // send_config_word
initial $dumpfile("cbus_tb.vcd");
initial $dumpvars(0,cbus_tb);
initial reset = 1;
initial #500 reset = 0;
reg serclk, serdata, serenable, reset;
wire SDO;
control_bus control_bus
( .serial_clock(serclk),
.serial_data_in(serdata),
.enable(serenable),
.reset(reset),
.serial_data_out(SDO) );
initial
begin
#1000 send_config_word(8'd1,32'hDEAD_BEEF);
#1000 send_config_word(8'd3,32'hDDEE_FF01);
#1000 send_config_word(8'd19,32'hFFFF_FFFF);
#1000 send_config_word(8'd23,32'h1234_FEDC);
#1000 send_config_word(8'h80,32'h0);
#1000 send_config_word(8'h81,32'h0);
#1000 send_config_word(8'h82,32'h0);
#1000 reset = 1;
#1 $finish;
end
endmodule // cbus_tb
|