source: XOpenSparcT1/trunk/sim/tb_top.v @ 11

Revision 11, 5.6 KB checked in by pntsvt00, 14 years ago (diff)

commit versione simulabile

RevLine 
[11]1`timescale 1ns / 1ps
2
3module tb_top;
4   
5   parameter CLK_WIDTH             = 3;      // # of clock outputs
6   parameter CS_NUM                = 1;      // # of separate memory chip selects
7   parameter CS_WIDTH              = 1;      // # of total memory chip selects
8   parameter DQ_WIDTH              = 64;      // # of data width
9   parameter DQS_WIDTH             = 8;      // # of DQS strobes
10   parameter ODT_WIDTH             = 1;      // # of memory on-die term enables
11
12   parameter CLK_PERIOD            = 5000;   // Core/Mem clk period (in ps)
13   localparam real CLK_PERIOD_NS   = CLK_PERIOD / 1000.0;
14   localparam real TCYC_200           = 5.0;
15   parameter RST_ACT_LOW           = 1;      // =1 for active low reset, =0 for active high
16
17
18
19   genvar                        j;
20   genvar                        i;
21   reg                           clk_in;
22   wire                          clk_in_n;
23   wire                          clk_in_p;
24   reg                           sys_clk200;
25   wire                          clk200_n;
26   wire                          clk200_p;
27   reg                           sys_rst_n;
28   wire                          sys_rst_out;
29   
30   wire [DQ_WIDTH-1:0]          ddr2_dq_sdram;
31   wire [DQS_WIDTH-1:0]         ddr2_dqs_sdram;
32   wire [DQS_WIDTH-1:0]         ddr2_dqs_n_sdram;
33   wire [7:0]                   ddr2_dm_sdram;
34   reg                          ddr2_clk_sdram;
35   reg                          ddr2_clk_n_sdram;
36   reg                          ddr2_address_sdram;
37   reg [2:0]                    ddr2_ba_sdram;
38   reg                          ddr2_ras_n_sdram;
39   reg                          ddr2_cas_n_sdram;
40   reg                          ddr2_we_n_sdram;
41   reg [CS_WIDTH-1:0]           ddr2_cs_n_sdram;
42   reg                          ddr2_cke_sdram;
43   reg [ODT_WIDTH-1:0]          ddr2_odt_sdram;
44
45   wire                          stx;
46   wire                          srx;
47   
48   initial begin
49 
50    // Display start message
51         $display("INFO: TBENCH: Starting simulation...");
52         
53    // Create VCD trace file
54         $dumpfile("trace.vcd");
55         $dumpvars();
56                       
57    // Run the simulation
58    //      sys_clock <= 1'b1;
59    //     sys_reset <= 1'b1;
60    //     #1000
61    //     sys_reset <= 1'b0;
62         #49000
63         $display("INFO: TBENCH: Completed simulation!");
64         $finish;
65                                                     
66    end
67
68
69   //***************************************************************************
70   // Clock generation and reset
71   //***************************************************************************
72
73   initial
74     clk_in = 1'b0;
75   always
76     clk_in = #(CLK_PERIOD_NS/2) ~clk_in;
77
78   assign                clk_in_p = clk_in;
79   assign                clk_in_n = ~clk_in;
80
81   initial
82     sys_clk200 = 1'b0;
83   always
84     sys_clk200 = #(TCYC_200/2) ~sys_clk200;
85
86   assign                clk200_p = sys_clk200;
87   assign                clk200_n = ~sys_clk200;
88
89   initial begin
90      sys_rst_n = 1'b0;
91      #200;
92      sys_rst_n = 1'b1;
93   end
94   assign sys_rst_out = RST_ACT_LOW ? sys_rst_n : ~sys_rst_n;
95
96   //***************************************************************************
97   // W1 module instance
98   //***************************************************************************
99
100W1 W1_inst
101(
102   .clk_in (clk_in),
103   .sysrst (sysrsti_out),
104
105   // ddr3 memory interface
106   .ddr3_dq (ddr2_dq_sdram),           
107   .ddr3_dqs (ddr2_dqs_n_sdram),
108   .ddr3_dqs_n (ddr2_dqs_n_sdram),
109   .ddr3_ck (ddr2_clk_sdram),
110   .ddr3_ck_n (ddr2_clk_n_sdram),
111   .ddr3_a (ddr2_address_sdram),
112   .ddr3_ba (ddr2_ba_sdram),
113   .ddr3_ras_n (ddr2_ras_n_sdram),
114   .ddr3_cas_n (ddr2_cas_n_sdram),
115   .ddr3_we_n (ddr2_we_n_sdram),
116   .ddr3_cs_n (ddr2_cs_n_sdram),
117   .ddr3_odt (ddr2_odt_sdram),
118   .ddr3_ce (ddr2_cke_sdram),
119   .ddr3_dm (ddr2_dm_sdram),
120
121   // Console interface
122   .srx (srx),
123   .stx (stx),
124
125   //flash interface   
126   .flash_addr(flash_addr),
127   .flash_data(flash_data),
128   .flash_oen(flash_oen),
129   .flash_wen(flash_wen),
130   .flash_cen(flash_cen),
131   .flash_clk(flash_clk),
132   .flash_adv(flash_adv),
133   .flash_rst(flash_rst)
134);
135
136
137   //***************************************************************************
138   // FLASH module instance
139   //***************************************************************************
140   
141
142flash flash_inst
143(
144   .flash_addr(flash_addr),
145   .flash_data(flash_data),
146   .flash_oen(flash_oen),
147   .flash_wen(flash_wen),
148   .flash_cen(flash_cen),
149   .flash_clk(flash_clk),
150   .flash_adv(flash_adv),
151   .flash_rst(flash_rst)
152);
153           // if the data width is multiple of 16
154              //for(j = 0; j < CS_NUM; j = j+1) begin : gen_cs
155                for(i = 0; i < DQS_WIDTH/2; i = i+1) begin : gen
156                   ddr2_model u_mem0
157                     (
158                      .ck        (ddr2_clk_sdram),
159                      .ck_n      (ddr2_clk_n_sdram),
160                      .cke       (ddr2_cke_sdram),
161                      .cs_n      (ddr2_cs_n_sdram[CS_WIDTH*i/DQS_WIDTH]),
162                      .ras_n     (ddr2_ras_n_sdram),
163                      .cas_n     (ddr2_cas_n_sdram),
164                      .we_n      (ddr2_we_n_sdram),
165                      .dm_rdqs   (ddr2_dm_sdram[(2*(i+1))-1 : i*2]),
166                      .ba        (ddr2_ba_sdram),
167                      .addr      (ddr2_address_sdram),
168                      .dq        (ddr2_dq_sdram[(16*(i+1))-1 : i*16]),
169                      .dqs       (ddr2_dqs_sdram[(2*(i+1))-1 : i*2]),
170                      .dqs_n     (ddr2_dqs_n_sdram[(2*(i+1))-1 : i*2]),
171                      .rdqs_n    (),
172                      .odt       (ddr2_odt_sdram[ODT_WIDTH*i/DQS_WIDTH])
173                      );
174                end
175              //end
176endmodule
177
Note: See TracBrowser for help on using the repository browser.