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

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [soc/] [rtl/] [rom_wb/] [rom_wb.v] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 xianfeng
//===============================================================================
2
//
3
//          FILE:  rom_wb.v
4
// 
5
//         USAGE:  ./rom_wb.v 
6
// 
7
//   DESCRIPTION:  1KB ROM with Withbone interface
8
// 
9
//       OPTIONS:  ---
10
//  REQUIREMENTS:  ---
11
//          BUGS:  ---
12
//         NOTES:  ---
13
//        AUTHOR:  Xianfeng Zeng (ZXF), xianfeng.zeng@gmail.com
14
//       COMPANY:  
15
//       VERSION:  1.0
16
//       CREATED:  04/05/2009 11:00:16 AM HKT
17
//      REVISION:  ---
18
//===============================================================================
19
 
20
module flash_generic(dout, clk, addr);
21
 
22
   parameter    flash_addr_width = 7;
23
   parameter    flash_data_width = 8;
24
   parameter    flash_data_words = 128;
25
 
26
   input        clk;
27
   input        [flash_addr_width-1:0]   addr;
28
   output       [flash_data_width-1:0]   dout;
29
 
30
   reg          [flash_data_width-1:0]   memory_array [0:flash_data_words-1];
31
 
32
   parameter    MEMORYFILE = "";
33
 
34
   initial
35
     begin
36
        if ( MEMORYFILE != "" )
37
          $readmemh ( MEMORYFILE, memory_array );
38
        else
39
          begin
40
             $display ( "***Boot ROM image file not specified for %m - defaulting to standard OR1200 boot ROM");
41
             memory_array[0] = 8'b00000000;
42
             memory_array[1] = 8'b00000000;
43
             memory_array[2] = 8'b00000000;
44
             memory_array[3] = 8'b00011000;
45
             memory_array[4] = 8'b00000000;
46
             memory_array[5] = 8'b00000000;
47
             memory_array[6] = 8'b00100000;
48
             memory_array[7] = 8'b10101000;
49
             memory_array[8] = 8'b00000000;
50
             memory_array[9] = 8'b10110000;
51
             memory_array[10] = 8'b10000000;
52
             memory_array[11] = 8'b00011000;
53
             memory_array[12] = 8'b00100000;
54
             memory_array[13] = 8'b00000101;
55
             memory_array[14] = 8'b10100000;
56
             memory_array[15] = 8'b10101000;
57
             memory_array[16] = 8'b00000001;
58
             memory_array[17] = 8'b00000000;
59
             memory_array[18] = 8'b01100000;
60
             memory_array[19] = 8'b10101000;
61
             memory_array[20] = 8'b00010100;
62
             memory_array[21] = 8'b00000000;
63
             memory_array[22] = 8'b00000000;
64
             memory_array[23] = 8'b00000100;
65
             memory_array[24] = 8'b00011000;
66
             memory_array[25] = 8'b00011000;
67
             memory_array[26] = 8'b00000100;
68
             memory_array[27] = 8'b11010100;
69
             memory_array[28] = 8'b00010010;
70
             memory_array[29] = 8'b00000000;
71
             memory_array[30] = 8'b00000000;
72
             memory_array[31] = 8'b00000100;
73
             memory_array[32] = 8'b00000000;
74
             memory_array[33] = 8'b00000000;
75
             memory_array[34] = 8'b00000100;
76
             memory_array[35] = 8'b11010100;
77
             memory_array[36] = 8'b00000100;
78
             memory_array[37] = 8'b00011000;
79
             memory_array[38] = 8'b01000011;
80
             memory_array[39] = 8'b11100000;
81
             memory_array[40] = 8'b00001111;
82
             memory_array[41] = 8'b00000000;
83
             memory_array[42] = 8'b00000000;
84
             memory_array[43] = 8'b00000100;
85
             memory_array[44] = 8'b00001000;
86
             memory_array[45] = 8'b00000000;
87
             memory_array[46] = 8'b00100001;
88
             memory_array[47] = 8'b10011100;
89
             memory_array[48] = 8'b00001101;
90
             memory_array[49] = 8'b00000000;
91
             memory_array[50] = 8'b00000000;
92
             memory_array[51] = 8'b00000100;
93
             memory_array[52] = 8'b00000100;
94
             memory_array[53] = 8'b00011000;
95
             memory_array[54] = 8'b00000011;
96
             memory_array[55] = 8'b11100001;
97
             memory_array[56] = 8'b00000000;
98
             memory_array[57] = 8'b00000000;
99
             memory_array[58] = 8'b00001000;
100
             memory_array[59] = 8'b11100100;
101
             memory_array[60] = 8'b11111011;
102
             memory_array[61] = 8'b11111111;
103
             memory_array[62] = 8'b11111111;
104
             memory_array[63] = 8'b00001111;
105
             memory_array[64] = 8'b00000000;
106
             memory_array[65] = 8'b00011000;
107
             memory_array[66] = 8'b00001000;
108
             memory_array[67] = 8'b11010100;
109
             memory_array[68] = 8'b00001000;
110
             memory_array[69] = 8'b00000000;
111
             memory_array[70] = 8'b00000000;
112
             memory_array[71] = 8'b00000100;
113
             memory_array[72] = 8'b00000100;
114
             memory_array[73] = 8'b00000000;
115
             memory_array[74] = 8'b00100001;
116
             memory_array[75] = 8'b10011100;
117
             memory_array[76] = 8'b00000000;
118
             memory_array[77] = 8'b00011000;
119
             memory_array[78] = 8'b00000001;
120
             memory_array[79] = 8'b11010100;
121
             memory_array[80] = 8'b00000000;
122
             memory_array[81] = 8'b00010000;
123
             memory_array[82] = 8'b00000001;
124
             memory_array[83] = 8'b11100100;
125
             memory_array[84] = 8'b11111100;
126
             memory_array[85] = 8'b11111111;
127
             memory_array[86] = 8'b11111111;
128
             memory_array[87] = 8'b00001111;
129
             memory_array[88] = 8'b00000000;
130
             memory_array[89] = 8'b00000001;
131
             memory_array[90] = 8'b11000000;
132
             memory_array[91] = 8'b10101000;
133
             memory_array[92] = 8'b00000000;
134
             memory_array[93] = 8'b00110000;
135
             memory_array[94] = 8'b00000000;
136
             memory_array[95] = 8'b01000100;
137
             memory_array[96] = 8'b00011000;
138
             memory_array[97] = 8'b00000000;
139
             memory_array[98] = 8'b00000100;
140
             memory_array[99] = 8'b11010100;
141
             memory_array[100] = 8'b00010000;
142
             memory_array[101] = 8'b00101000;
143
             memory_array[102] = 8'b00000100;
144
             memory_array[103] = 8'b11010100;
145
             memory_array[104] = 8'b00010000;
146
             memory_array[105] = 8'b00000000;
147
             memory_array[106] = 8'b01100100;
148
             memory_array[107] = 8'b10000100;
149
             memory_array[108] = 8'b00100000;
150
             memory_array[109] = 8'b00000101;
151
             memory_array[110] = 8'b00000011;
152
             memory_array[111] = 8'b10111100;
153
             memory_array[112] = 8'b11111110;
154
             memory_array[113] = 8'b11111111;
155
             memory_array[114] = 8'b11111111;
156
             memory_array[115] = 8'b00010011;
157
             memory_array[116] = 8'b00000000;
158
             memory_array[117] = 8'b00000000;
159
             memory_array[118] = 8'b00000000;
160
             memory_array[119] = 8'b00010101;
161
             memory_array[120] = 8'b00000000;
162
             memory_array[121] = 8'b01001000;
163
             memory_array[122] = 8'b00000000;
164
             memory_array[123] = 8'b01000100;
165
             memory_array[124] = 8'b00000000;
166
             memory_array[125] = 8'b00000000;
167
             memory_array[126] = 8'b01100100;
168
             memory_array[127] = 8'b10000100;
169
          end
170
 
171
     end // initial begin
172
 
173
 
174
   reg [flash_addr_width-1:0] addr_int;
175
 
176
   always @(posedge clk)
177
     addr_int <= addr;
178
 
179
   assign                     dout = memory_array[addr_int];
180
 
181
endmodule // flash_generic
182
 
183
 
184
module rom_wb (
185
        wb_adr_i, wb_cyc_i, wb_stb_i, wb_dat_o, wb_ack_o, flash_clk, clk, rst );
186
 
187
input  [4:0]  wb_adr_i;
188
input         wb_cyc_i;
189
input         wb_stb_i;
190
output [31:0] wb_dat_o;
191
reg    [31:0] wb_dat_o;
192
output        wb_ack_o;
193
reg           wb_ack_o;
194
input         flash_clk;
195
input         clk;
196
input         rst;
197
 
198
reg [3:0]     counter;
199
wire [7:0]    do;
200
 
201
parameter [31:0] NOP = 32'h15000000;
202
 
203
always @ (posedge rst or posedge clk)
204
if (rst)
205
        counter <= 4'd0;
206
else
207
        if (wb_cyc_i & wb_stb_i & !wb_ack_o)
208
                counter <= counter + 4'd1;
209
 
210
always @ (posedge rst or posedge clk)
211
if (rst)
212
        wb_ack_o <= 1'b0;
213
else
214
        wb_ack_o <= (counter == 4'd15);
215
 
216
always @ (posedge rst or posedge clk)
217
if (rst)
218
        wb_dat_o <= NOP;
219
else
220
        case (counter)
221
        4'd15: wb_dat_o[31:24] <= do;
222
        4'd11: wb_dat_o[23:16] <= do;
223
        4'd7: wb_dat_o[15: 8] <= do;
224
        4'd3: wb_dat_o[ 7: 0] <= do;
225
        endcase
226
 
227
   // All target memory options exhausted
228
   // Defaulting to generic technology:
229
   flash_generic /* These are defaults!: #( .MEMORYFILE("flash.mem"), .flash_addr_width(7),
230
                    .flash_data_width(8), .flash_data_words(128))*/
231
     flash0 (
232
             .clk  (counter[1] ^ counter[0]),
233
             .addr ({wb_adr_i,counter[3:2]}),
234
             .dout (do));
235
 
236
endmodule // rom_wb
237
 

powered by: WebSVN 2.1.0

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