OpenCores
URL https://opencores.org/ocsvn/aemb/aemb/trunk

Subversion Repositories aemb

[/] [aemb/] [trunk/] [sim/] [verilog/] [aemb2.v] - Blame information for rev 191

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 98 sybreon
/* $Id: aemb2.v,v 1.3 2007-12-28 21:44:50 sybreon Exp $
2 79 sybreon
**
3
** AEMB2 TEST BENCH
4
** Copyright (C) 2004-2007 Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
5
**
6
** This file is part of AEMB.
7
**
8
** AEMB is free software: you can redistribute it and/or modify it
9
** under the terms of the GNU Lesser General Public License as
10
** published by the Free Software Foundation, either version 3 of the
11
** License, or (at your option) any later version.
12
**
13
** AEMB is distributed in the hope that it will be useful, but WITHOUT
14
** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15
** or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
16
** Public License for more details.
17
**
18
** You should have received a copy of the GNU Lesser General Public
19
** License along with AEMB. If not, see <http:**www.gnu.org/licenses/>.
20
*/
21
 
22
module aemb2 ();
23
   parameter IWB=16;
24
   parameter DWB=16;
25
 
26 98 sybreon
   parameter TXE = 0; ///< thread execution enable
27 79 sybreon
 
28
   parameter MUL = 1; ///< enable hardware multiplier
29
   parameter BSF = 1; ///< enable barrel shifter
30
   parameter FSL = 1; ///< enable FSL bus
31
   parameter DIV = 0; ///< enable hardware divider   
32
 
33
`include "random.v"
34
 
35
   /*AUTOWIRE*/
36
   // Beginning of automatic wires (for undeclared instantiated-module outputs)
37 92 sybreon
   wire [6:2]           cwb_adr_o;              // From dut of aeMB2_sim.v
38
   wire [31:0]           cwb_dat_o;              // From dut of aeMB2_sim.v
39
   wire [3:0]            cwb_sel_o;              // From dut of aeMB2_sim.v
40
   wire                 cwb_stb_o;              // From dut of aeMB2_sim.v
41
   wire [1:0]            cwb_tga_o;              // From dut of aeMB2_sim.v
42
   wire                 cwb_wre_o;              // From dut of aeMB2_sim.v
43
   wire [DWB-1:2]       dwb_adr_o;              // From dut of aeMB2_sim.v
44
   wire                 dwb_cyc_o;              // From dut of aeMB2_sim.v
45
   wire [31:0]           dwb_dat_o;              // From dut of aeMB2_sim.v
46
   wire [3:0]            dwb_sel_o;              // From dut of aeMB2_sim.v
47
   wire                 dwb_stb_o;              // From dut of aeMB2_sim.v
48
   wire                 dwb_tga_o;              // From dut of aeMB2_sim.v
49
   wire                 dwb_wre_o;              // From dut of aeMB2_sim.v
50
   wire [IWB-1:2]       iwb_adr_o;              // From dut of aeMB2_sim.v
51
   wire                 iwb_stb_o;              // From dut of aeMB2_sim.v
52
   wire                 iwb_tga_o;              // From dut of aeMB2_sim.v
53
   wire                 iwb_wre_o;              // From dut of aeMB2_sim.v
54 79 sybreon
   // End of automatics
55
   /*AUTOREGINPUT*/
56
   // Beginning of automatic reg inputs (for undeclared instantiated-module inputs)
57 92 sybreon
   reg                  cwb_ack_i;              // To dut of aeMB2_sim.v
58
   reg                  dwb_ack_i;              // To dut of aeMB2_sim.v
59
   reg                  iwb_ack_i;              // To dut of aeMB2_sim.v
60
   reg                  sys_clk_i;              // To dut of aeMB2_sim.v
61
   reg                  sys_int_i;              // To dut of aeMB2_sim.v
62
   reg                  sys_rst_i;              // To dut of aeMB2_sim.v
63 79 sybreon
   // End of automatics
64
 
65
   // INITIAL SETUP //////////////////////////////////////////////////////
66
 
67
   //reg                        sys_clk_i, sys_rst_i, sys_int_i, sys_exc_i;
68
   reg       svc;
69
   integer   inttime;
70
   integer   seed;
71
   integer   theend;
72
 
73
   always #5 sys_clk_i = ~sys_clk_i;
74
 
75
   initial begin
76
      //$dumpfile("dump.vcd");
77
      //$dumpvars(1,dut, dut.bpcu);
78
   end
79
 
80
   initial begin
81
      seed = randseed;
82
      theend = 0;
83
      svc = 0;
84
      sys_clk_i = $random(seed);
85
      sys_rst_i = 1;
86
      sys_int_i = 0;
87
      #50 sys_rst_i = 0;
88
      #3500000 $finish;
89
   end
90
 
91
   // FAKE MEMORY ////////////////////////////////////////////////////////
92
 
93
   reg [31:0]  rom [0:65535];
94
   reg [31:0]  ram[0:65535];
95
   reg [31:0]  dwblat;
96
   reg [15:2]  dadr, iadr;
97
 
98
   wire [31:0] dwb_dat_t = ram[dwb_adr_o];
99 98 sybreon
   wire [31:0] iwb_dat_i = rom[iadr];
100 79 sybreon
   wire [31:0] dwb_dat_i = ram[dadr];
101
   wire [31:0] cwb_dat_i = cwb_adr_o;
102
 
103
`ifdef POSEDGE
104
`else // !`ifdef POSEDGE
105
 
106
   always @(negedge sys_clk_i)
107
     if (sys_rst_i) begin
108
        /*AUTORESET*/
109
        // Beginning of autoreset for uninitialized flops
110
        cwb_ack_i <= 1'h0;
111
        dwb_ack_i <= 1'h0;
112
        iwb_ack_i <= 1'h0;
113
        // End of automatics
114
     end else begin
115
        iwb_ack_i <= #1 iwb_stb_o;
116
        dwb_ack_i <= #1 dwb_stb_o;
117
        cwb_ack_i <= #1 cwb_stb_o;
118
     end // else: !if(sys_rst_i)
119
 
120
   always @(negedge sys_clk_i) begin
121
      iadr <= #1 iwb_adr_o;
122
      dadr <= #1 dwb_adr_o;
123
 
124
      if (dwb_wre_o & dwb_stb_o) begin
125
         case (dwb_sel_o)
126
           4'h1: ram[dwb_adr_o] <= {dwb_dat_t[31:8], dwb_dat_o[7:0]};
127
           4'h2: ram[dwb_adr_o] <= {dwb_dat_t[31:16], dwb_dat_o[15:8], dwb_dat_t[7:0]};
128
           4'h4: ram[dwb_adr_o] <= {dwb_dat_t[31:24], dwb_dat_o[23:16], dwb_dat_t[15:0]};
129
           4'h8: ram[dwb_adr_o] <= {dwb_dat_o[31:24], dwb_dat_t[23:0]};
130
           4'h3: ram[dwb_adr_o] <= {dwb_dat_t[31:16], dwb_dat_o[15:0]};
131
           4'hC: ram[dwb_adr_o] <= {dwb_dat_o[31:16], dwb_dat_t[15:0]};
132
           4'hF: ram[dwb_adr_o] <= {dwb_dat_o};
133
         endcase // case (dwb_sel_o)
134
      end // if (dwb_we_o & dwb_stb_o)
135
   end // always @ (negedge sys_clk_i)
136
 
137
`endif // !`ifdef POSEDGE
138
 
139
 
140
   integer i;
141
   initial begin
142
      for (i=0;i<65535;i=i+1) begin
143
         ram[i] <= $random;
144
      end
145 98 sybreon
      #1 $readmemh("dump.vmem",rom);
146 79 sybreon
      #1 $readmemh("dump.vmem",ram);
147
   end
148
 
149
   // DISPLAY OUTPUTS ///////////////////////////////////////////////////
150
 
151
   integer rnd;
152
 
153
   always @(posedge sys_clk_i) begin
154 92 sybreon
 
155
      // Interrupt Monitors
156
      if (!dut.sim.rMSR_IE) begin
157
         rnd = $random % 30;
158
         inttime = $stime + 1000 + (rnd*rnd * 10);
159
      end
160
      if ($stime > inttime) begin
161
         sys_int_i = 1;
162
         svc = 0;
163
      end
164
      if (($stime > inttime + 500) && !svc) begin
165
         $display("\n\t*** INTERRUPT TIMEOUT ***", inttime);
166
         $finish;
167
      end
168
      if (dwb_wre_o & (dwb_dat_o == "RTNI")) sys_int_i = 0;
169
      /*
170
      if (dut.regf.fRDWE && (dut.rRD == 5'h0e) && !svc && dut.gena) begin
171
         svc = 1;
172
         //$display("\nLATENCY: ", ($stime - inttime)/10);
173
      end
174
       */
175
 
176 79 sybreon
      // Pass/Fail Monitors
177
      if (dwb_wre_o & (dwb_dat_o == "FAIL")) begin
178
         $display("\n\tFAIL");
179
         $finish;
180
      end
181
 
182
      if (iwb_dat_i == 32'hb8000000) begin
183
         theend = theend + 1;
184
      end
185
 
186
      if (theend == 5) begin
187
         $display("\n\t*** PASSED ALL TESTS ***");
188
         $finish;
189
      end
190
 
191
   end // always @ (posedge sys_clk_i)
192
 
193
   // INTERNAL WIRING ////////////////////////////////////////////////////
194
 
195 92 sybreon
   aeMB2_sim
196 98 sybreon
     #(/*AUTOINSTPARAM*/
197
       // Parameters
198
       .IWB                             (IWB),
199
       .DWB                             (DWB),
200
       .TXE                             (TXE),
201
       .MUL                             (MUL),
202
       .BSF                             (BSF),
203
       .FSL                             (FSL),
204
       .DIV                             (DIV))
205 79 sybreon
   dut (/*AUTOINST*/
206
        // Outputs
207
        .cwb_adr_o                      (cwb_adr_o[6:2]),
208
        .cwb_dat_o                      (cwb_dat_o[31:0]),
209
        .cwb_sel_o                      (cwb_sel_o[3:0]),
210
        .cwb_stb_o                      (cwb_stb_o),
211
        .cwb_tga_o                      (cwb_tga_o[1:0]),
212
        .cwb_wre_o                      (cwb_wre_o),
213
        .dwb_adr_o                      (dwb_adr_o[DWB-1:2]),
214
        .dwb_cyc_o                      (dwb_cyc_o),
215
        .dwb_dat_o                      (dwb_dat_o[31:0]),
216
        .dwb_sel_o                      (dwb_sel_o[3:0]),
217
        .dwb_stb_o                      (dwb_stb_o),
218 92 sybreon
        .dwb_tga_o                      (dwb_tga_o),
219 79 sybreon
        .dwb_wre_o                      (dwb_wre_o),
220
        .iwb_adr_o                      (iwb_adr_o[IWB-1:2]),
221
        .iwb_stb_o                      (iwb_stb_o),
222 92 sybreon
        .iwb_tga_o                      (iwb_tga_o),
223 79 sybreon
        .iwb_wre_o                      (iwb_wre_o),
224
        // Inputs
225
        .cwb_ack_i                      (cwb_ack_i),
226
        .cwb_dat_i                      (cwb_dat_i[31:0]),
227
        .dwb_ack_i                      (dwb_ack_i),
228
        .dwb_dat_i                      (dwb_dat_i[31:0]),
229
        .iwb_ack_i                      (iwb_ack_i),
230
        .iwb_dat_i                      (iwb_dat_i[31:0]),
231
        .sys_clk_i                      (sys_clk_i),
232
        .sys_int_i                      (sys_int_i),
233
        .sys_rst_i                      (sys_rst_i));
234
 
235
endmodule // edk32
236
 
237
/* $Log $ */
238
 
239
// Local Variables:
240
// verilog-library-directories:("." "../../rtl/verilog/")
241
// verilog-library-files:("")
242 92 sybreon
// End:

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.