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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
`include "timescale.v"
module testHarness( );
// -----------------------------------
// Local Wires
// -----------------------------------
reg clk;
reg rst;
reg spiSysClk;
wire [7:0] adr;
wire [7:0] masterDout;
wire [7:0] masterDin;
wire stb;
wire we;
wire ack;
wire spiClk;
wire spiMasterDataIn;
wire spiMasterDataOut;
wire spiCS_n;
initial begin
$dumpfile("wave.vcd");
$dumpvars(0, u_spiMaster);
end
spiMaster u_spiMaster (
//Wishbone bus
.clk_i(clk),
.rst_i(rst),
.address_i(adr),
.data_i(masterDout),
.data_o(masterDin),
.strobe_i(stb),
.we_i(we),
.ack_o(ack),
// SPI logic clock
.spiSysClk(spiSysClk),
//SPI bus
.spiClkOut(spiClk),
.spiDataIn(spiMasterDataIn),
.spiDataOut(spiMasterDataOut),
.spiCS_n(spiCS_n)
);
wb_master_model #(.dwidth(8), .awidth(8)) u_wb_master_model (
.clk(clk),
.rst(rst),
.adr(adr),
.din(masterDin),
.dout(masterDout),
.cyc(),
.stb(stb),
.we(we),
.sel(),
.ack(ack),
.err(1'b0),
.rty(1'b0)
);
sdModel u_sdModel (
.spiClk(spiClk),
.spiDataIn(spiMasterDataOut),
.spiDataOut(spiMasterDataIn),
.spiCS_n(spiCS_n)
);
//--------------- reset ---------------
initial begin
@(posedge clk);
@(posedge clk);
@(posedge clk);
@(posedge clk);
@(posedge clk);
@(posedge clk);
@(posedge clk);
@(posedge clk);
rst <= 1'b1;
@(posedge clk);
rst <= 1'b0;
@(posedge clk);
end
// ****************************** Clock section ******************************
`define CLK_50MHZ_HALF_PERIOD 10
`define CLK_25MHZ_HALF_PERIOD 20
always begin
#`CLK_25MHZ_HALF_PERIOD clk <= 1'b0;
#`CLK_25MHZ_HALF_PERIOD clk <= 1'b1;
end
always begin
#`CLK_50MHZ_HALF_PERIOD spiSysClk <= 1'b0;
#`CLK_50MHZ_HALF_PERIOD spiSysClk <= 1'b1;
end
endmodule
|