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

Subversion Repositories aemb

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

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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