1 |
2 |
eexuke |
//--------------------------------------------------------------------------------------------------
|
2 |
|
|
// Design : nova
|
3 |
|
|
// Author(s) : Ke Xu
|
4 |
|
|
// Email : eexuke@yahoo.com
|
5 |
|
|
// File : BitStream_buffer.v
|
6 |
|
|
// Generated : May 16,2005
|
7 |
|
|
// Copyright (C) 2008 Ke Xu
|
8 |
|
|
//-------------------------------------------------------------------------------------------------
|
9 |
|
|
// Description
|
10 |
|
|
// Circular buffer,interfacing between Beha_Bitstream_ram and the decoder
|
11 |
|
|
//-------------------------------------------------------------------------------------------------
|
12 |
|
|
|
13 |
|
|
// synopsys translate_off
|
14 |
|
|
`include "timescale.v"
|
15 |
|
|
// synopsys translate_on
|
16 |
|
|
`include "nova_defines.v"
|
17 |
|
|
|
18 |
|
|
module BitStream_buffer (clk,reset_n,BitStream_buffer_input,pc,
|
19 |
|
|
BitStream_ram_ren,BitStream_buffer_valid_n,BitStream_buffer_output,BitStream_ram_addr);
|
20 |
|
|
input clk,reset_n;
|
21 |
|
|
input [15:0] BitStream_buffer_input;
|
22 |
|
|
input [6:0] pc;
|
23 |
|
|
|
24 |
|
|
output BitStream_ram_ren;
|
25 |
|
|
output BitStream_buffer_valid_n;
|
26 |
|
|
output [15:0] BitStream_buffer_output;
|
27 |
|
|
output [16:0]BitStream_ram_addr;
|
28 |
|
|
|
29 |
|
|
reg BitStream_ram_ren;
|
30 |
|
|
reg BitStream_buffer_valid_n;
|
31 |
|
|
reg [15:0] BitStream_buffer_output;
|
32 |
|
|
reg [16:0]BitStream_ram_addr;
|
33 |
|
|
|
34 |
|
|
reg [0:127]BS_buffer;
|
35 |
|
|
reg [6:0] pc_previous;
|
36 |
|
|
reg [3:0] reset_counter;
|
37 |
|
|
reg [2:0] half_fill_counter;
|
38 |
|
|
reg [6:0] buffer_index; //for buffer write
|
39 |
|
|
|
40 |
|
|
/*
|
41 |
|
|
// synopsys translate_off
|
42 |
|
|
integer pc_statistical;
|
43 |
|
|
initial
|
44 |
|
|
begin
|
45 |
|
|
pc_statistical = $fopen("pc_statistical.txt");
|
46 |
|
|
end
|
47 |
|
|
always @ (posedge clk)
|
48 |
|
|
$fdisplay (pc_statistical,"%d",pc);
|
49 |
|
|
// synopsys translate_on
|
50 |
|
|
*/
|
51 |
|
|
always @ (posedge clk)
|
52 |
|
|
if (reset_n == 1'b0)
|
53 |
|
|
pc_previous <= 0;
|
54 |
|
|
else
|
55 |
|
|
pc_previous <= pc;
|
56 |
|
|
|
57 |
|
|
always @ (posedge clk)
|
58 |
|
|
if (reset_n == 1'b0)
|
59 |
|
|
reset_counter <= 0;
|
60 |
|
|
else if (reset_counter < 10)
|
61 |
|
|
reset_counter <= reset_counter + 1;
|
62 |
|
|
|
63 |
|
|
always @ (posedge clk)
|
64 |
|
|
if (reset_n == 1'b0)
|
65 |
|
|
half_fill_counter <= 0;
|
66 |
|
|
else if (reset_counter == 10)
|
67 |
|
|
begin
|
68 |
|
|
if (((pc > 63 && pc_previous <= 63) || (pc <63 && pc_previous >=63)) && half_fill_counter == 0)
|
69 |
|
|
half_fill_counter <= 1;
|
70 |
|
|
else if (pc > 63 && half_fill_counter == 0 && buffer_index == 0)
|
71 |
|
|
half_fill_counter <= 1;
|
72 |
|
|
else if (pc < 63 && half_fill_counter == 0 && buffer_index == 64)
|
73 |
|
|
half_fill_counter <= 1;
|
74 |
|
|
else if (half_fill_counter > 0 && half_fill_counter < 5)
|
75 |
|
|
half_fill_counter <= half_fill_counter + 1;
|
76 |
|
|
else if (half_fill_counter == 5)
|
77 |
|
|
half_fill_counter <= 0;
|
78 |
|
|
end
|
79 |
|
|
|
80 |
|
|
always @ (posedge clk)
|
81 |
|
|
if (reset_n == 1'b0)
|
82 |
|
|
buffer_index <= 0;
|
83 |
|
|
else if (reset_counter > 1 && reset_counter < 10)
|
84 |
|
|
buffer_index <= buffer_index + 16;
|
85 |
|
|
else if (half_fill_counter > 1 && half_fill_counter <= 5)
|
86 |
|
|
buffer_index <= buffer_index + 16;
|
87 |
|
|
|
88 |
|
|
always @ (posedge clk)
|
89 |
|
|
if (reset_n == 1'b0)
|
90 |
|
|
BitStream_buffer_valid_n <= 1'b1;
|
91 |
|
|
else if (reset_counter == 10)
|
92 |
|
|
BitStream_buffer_valid_n <= 1'b0;
|
93 |
|
|
|
94 |
|
|
always @ (posedge clk)
|
95 |
|
|
if (reset_n == 1'b0)
|
96 |
|
|
BitStream_ram_ren <= 1'b0;
|
97 |
|
|
else if (reset_counter < 9)
|
98 |
|
|
BitStream_ram_ren <= 1'b0;
|
99 |
|
|
else if (reset_counter == 9)
|
100 |
|
|
BitStream_ram_ren <= 1'b1;
|
101 |
|
|
else
|
102 |
|
|
begin
|
103 |
|
|
if (((pc > 63 && pc_previous <= 63) || (pc <63 && pc_previous >=63)) && half_fill_counter == 0)
|
104 |
|
|
BitStream_ram_ren <= 0;
|
105 |
|
|
else if (half_fill_counter > 0 && half_fill_counter < 5)
|
106 |
|
|
BitStream_ram_ren <= 0;
|
107 |
|
|
else
|
108 |
|
|
BitStream_ram_ren <= 1;
|
109 |
|
|
end
|
110 |
|
|
|
111 |
|
|
always @ (posedge clk)
|
112 |
|
|
if (reset_n == 1'b0)
|
113 |
|
|
BitStream_ram_addr <= 0;
|
114 |
|
|
else if (reset_counter > 0 && reset_counter < 9)
|
115 |
|
|
BitStream_ram_addr <= BitStream_ram_addr + 1;
|
116 |
|
|
else if (half_fill_counter > 0 && half_fill_counter < 5 && BitStream_ram_addr != 17'd131071) //no wrap around
|
117 |
|
|
BitStream_ram_addr <= BitStream_ram_addr + 1;
|
118 |
|
|
|
119 |
|
|
integer i;
|
120 |
|
|
always @ (posedge clk)
|
121 |
|
|
if (reset_n == 1'b0)
|
122 |
|
|
BS_buffer <= 0;
|
123 |
|
|
else if ((reset_counter > 1 && reset_counter < 10) || (half_fill_counter > 1 && half_fill_counter <= 5))
|
124 |
|
|
case (buffer_index[6:4])
|
125 |
|
|
3'b000:
|
126 |
|
|
for (i=0;i<16;i=i+1)
|
127 |
|
|
BS_buffer[i] <= BitStream_buffer_input[15-i];
|
128 |
|
|
3'b001:
|
129 |
|
|
for (i=0;i<16;i=i+1)
|
130 |
|
|
BS_buffer[16+i] <= BitStream_buffer_input[15-i];
|
131 |
|
|
3'b010:
|
132 |
|
|
for (i=0;i<16;i=i+1)
|
133 |
|
|
BS_buffer[32+i] <= BitStream_buffer_input[15-i];
|
134 |
|
|
3'b011:
|
135 |
|
|
for (i=0;i<16;i=i+1)
|
136 |
|
|
BS_buffer[48+i] <= BitStream_buffer_input[15-i];
|
137 |
|
|
3'b100:
|
138 |
|
|
for (i=0;i<16;i=i+1)
|
139 |
|
|
BS_buffer[64+i] <= BitStream_buffer_input[15-i];
|
140 |
|
|
3'b101:
|
141 |
|
|
for (i=0;i<16;i=i+1)
|
142 |
|
|
BS_buffer[80+i] <= BitStream_buffer_input[15-i];
|
143 |
|
|
3'b110:
|
144 |
|
|
for (i=0;i<16;i=i+1)
|
145 |
|
|
BS_buffer[96+i] <= BitStream_buffer_input[15-i];
|
146 |
|
|
3'b111:
|
147 |
|
|
for (i=0;i<16;i=i+1)
|
148 |
|
|
BS_buffer[112+i] <= BitStream_buffer_input[15-i];
|
149 |
|
|
endcase
|
150 |
|
|
|
151 |
|
|
always @ (posedge clk)
|
152 |
|
|
//always @ (reset_n or BitStream_buffer_valid_n or pc)
|
153 |
|
|
if (reset_n == 1'b0)
|
154 |
|
|
BitStream_buffer_output <= 0;
|
155 |
|
|
else if (BitStream_buffer_valid_n == 0)
|
156 |
|
|
case (pc)
|
157 |
|
|
|
158 |
|
|
1 :BitStream_buffer_output <= BS_buffer[1:16];
|
159 |
|
|
2 :BitStream_buffer_output <= BS_buffer[2:17];
|
160 |
|
|
3 :BitStream_buffer_output <= BS_buffer[3:18];
|
161 |
|
|
4 :BitStream_buffer_output <= BS_buffer[4:19];
|
162 |
|
|
5 :BitStream_buffer_output <= BS_buffer[5:20];
|
163 |
|
|
6 :BitStream_buffer_output <= BS_buffer[6:21];
|
164 |
|
|
7 :BitStream_buffer_output <= BS_buffer[7:22];
|
165 |
|
|
8 :BitStream_buffer_output <= BS_buffer[8:23];
|
166 |
|
|
9 :BitStream_buffer_output <= BS_buffer[9:24];
|
167 |
|
|
10 :BitStream_buffer_output <= BS_buffer[10:25];
|
168 |
|
|
11 :BitStream_buffer_output <= BS_buffer[11:26];
|
169 |
|
|
12 :BitStream_buffer_output <= BS_buffer[12:27];
|
170 |
|
|
13 :BitStream_buffer_output <= BS_buffer[13:28];
|
171 |
|
|
14 :BitStream_buffer_output <= BS_buffer[14:29];
|
172 |
|
|
15 :BitStream_buffer_output <= BS_buffer[15:30];
|
173 |
|
|
16 :BitStream_buffer_output <= BS_buffer[16:31];
|
174 |
|
|
17 :BitStream_buffer_output <= BS_buffer[17:32];
|
175 |
|
|
18 :BitStream_buffer_output <= BS_buffer[18:33];
|
176 |
|
|
19 :BitStream_buffer_output <= BS_buffer[19:34];
|
177 |
|
|
20 :BitStream_buffer_output <= BS_buffer[20:35];
|
178 |
|
|
21 :BitStream_buffer_output <= BS_buffer[21:36];
|
179 |
|
|
22 :BitStream_buffer_output <= BS_buffer[22:37];
|
180 |
|
|
23 :BitStream_buffer_output <= BS_buffer[23:38];
|
181 |
|
|
24 :BitStream_buffer_output <= BS_buffer[24:39];
|
182 |
|
|
25 :BitStream_buffer_output <= BS_buffer[25:40];
|
183 |
|
|
26 :BitStream_buffer_output <= BS_buffer[26:41];
|
184 |
|
|
27 :BitStream_buffer_output <= BS_buffer[27:42];
|
185 |
|
|
28 :BitStream_buffer_output <= BS_buffer[28:43];
|
186 |
|
|
29 :BitStream_buffer_output <= BS_buffer[29:44];
|
187 |
|
|
30 :BitStream_buffer_output <= BS_buffer[30:45];
|
188 |
|
|
31 :BitStream_buffer_output <= BS_buffer[31:46];
|
189 |
|
|
32 :BitStream_buffer_output <= BS_buffer[32:47];
|
190 |
|
|
33 :BitStream_buffer_output <= BS_buffer[33:48];
|
191 |
|
|
34 :BitStream_buffer_output <= BS_buffer[34:49];
|
192 |
|
|
35 :BitStream_buffer_output <= BS_buffer[35:50];
|
193 |
|
|
36 :BitStream_buffer_output <= BS_buffer[36:51];
|
194 |
|
|
37 :BitStream_buffer_output <= BS_buffer[37:52];
|
195 |
|
|
38 :BitStream_buffer_output <= BS_buffer[38:53];
|
196 |
|
|
39 :BitStream_buffer_output <= BS_buffer[39:54];
|
197 |
|
|
40 :BitStream_buffer_output <= BS_buffer[40:55];
|
198 |
|
|
41 :BitStream_buffer_output <= BS_buffer[41:56];
|
199 |
|
|
42 :BitStream_buffer_output <= BS_buffer[42:57];
|
200 |
|
|
43 :BitStream_buffer_output <= BS_buffer[43:58];
|
201 |
|
|
44 :BitStream_buffer_output <= BS_buffer[44:59];
|
202 |
|
|
45 :BitStream_buffer_output <= BS_buffer[45:60];
|
203 |
|
|
46 :BitStream_buffer_output <= BS_buffer[46:61];
|
204 |
|
|
47 :BitStream_buffer_output <= BS_buffer[47:62];
|
205 |
|
|
48 :BitStream_buffer_output <= BS_buffer[48:63];
|
206 |
|
|
49 :BitStream_buffer_output <= BS_buffer[49:64];
|
207 |
|
|
50 :BitStream_buffer_output <= BS_buffer[50:65];
|
208 |
|
|
51 :BitStream_buffer_output <= BS_buffer[51:66];
|
209 |
|
|
52 :BitStream_buffer_output <= BS_buffer[52:67];
|
210 |
|
|
53 :BitStream_buffer_output <= BS_buffer[53:68];
|
211 |
|
|
54 :BitStream_buffer_output <= BS_buffer[54:69];
|
212 |
|
|
55 :BitStream_buffer_output <= BS_buffer[55:70];
|
213 |
|
|
56 :BitStream_buffer_output <= BS_buffer[56:71];
|
214 |
|
|
57 :BitStream_buffer_output <= BS_buffer[57:72];
|
215 |
|
|
58 :BitStream_buffer_output <= BS_buffer[58:73];
|
216 |
|
|
59 :BitStream_buffer_output <= BS_buffer[59:74];
|
217 |
|
|
60 :BitStream_buffer_output <= BS_buffer[60:75];
|
218 |
|
|
61 :BitStream_buffer_output <= BS_buffer[61:76];
|
219 |
|
|
62 :BitStream_buffer_output <= BS_buffer[62:77];
|
220 |
|
|
63 :BitStream_buffer_output <= BS_buffer[63:78];
|
221 |
|
|
64 :BitStream_buffer_output <= BS_buffer[64:79];
|
222 |
|
|
65 :BitStream_buffer_output <= BS_buffer[65:80];
|
223 |
|
|
66 :BitStream_buffer_output <= BS_buffer[66:81];
|
224 |
|
|
67 :BitStream_buffer_output <= BS_buffer[67:82];
|
225 |
|
|
68 :BitStream_buffer_output <= BS_buffer[68:83];
|
226 |
|
|
69 :BitStream_buffer_output <= BS_buffer[69:84];
|
227 |
|
|
70 :BitStream_buffer_output <= BS_buffer[70:85];
|
228 |
|
|
71 :BitStream_buffer_output <= BS_buffer[71:86];
|
229 |
|
|
72 :BitStream_buffer_output <= BS_buffer[72:87];
|
230 |
|
|
73 :BitStream_buffer_output <= BS_buffer[73:88];
|
231 |
|
|
74 :BitStream_buffer_output <= BS_buffer[74:89];
|
232 |
|
|
75 :BitStream_buffer_output <= BS_buffer[75:90];
|
233 |
|
|
76 :BitStream_buffer_output <= BS_buffer[76:91];
|
234 |
|
|
77 :BitStream_buffer_output <= BS_buffer[77:92];
|
235 |
|
|
78 :BitStream_buffer_output <= BS_buffer[78:93];
|
236 |
|
|
79 :BitStream_buffer_output <= BS_buffer[79:94];
|
237 |
|
|
80 :BitStream_buffer_output <= BS_buffer[80:95];
|
238 |
|
|
81 :BitStream_buffer_output <= BS_buffer[81:96];
|
239 |
|
|
82 :BitStream_buffer_output <= BS_buffer[82:97];
|
240 |
|
|
83 :BitStream_buffer_output <= BS_buffer[83:98];
|
241 |
|
|
84 :BitStream_buffer_output <= BS_buffer[84:99];
|
242 |
|
|
85 :BitStream_buffer_output <= BS_buffer[85:100];
|
243 |
|
|
86 :BitStream_buffer_output <= BS_buffer[86:101];
|
244 |
|
|
87 :BitStream_buffer_output <= BS_buffer[87:102];
|
245 |
|
|
88 :BitStream_buffer_output <= BS_buffer[88:103];
|
246 |
|
|
89 :BitStream_buffer_output <= BS_buffer[89:104];
|
247 |
|
|
90 :BitStream_buffer_output <= BS_buffer[90:105];
|
248 |
|
|
91 :BitStream_buffer_output <= BS_buffer[91:106];
|
249 |
|
|
92 :BitStream_buffer_output <= BS_buffer[92:107];
|
250 |
|
|
93 :BitStream_buffer_output <= BS_buffer[93:108];
|
251 |
|
|
94 :BitStream_buffer_output <= BS_buffer[94:109];
|
252 |
|
|
95 :BitStream_buffer_output <= BS_buffer[95:110];
|
253 |
|
|
96 :BitStream_buffer_output <= BS_buffer[96:111];
|
254 |
|
|
97 :BitStream_buffer_output <= BS_buffer[97:112];
|
255 |
|
|
98 :BitStream_buffer_output <= BS_buffer[98:113];
|
256 |
|
|
99 :BitStream_buffer_output <= BS_buffer[99:114];
|
257 |
|
|
100:BitStream_buffer_output <= BS_buffer[100:115];
|
258 |
|
|
101:BitStream_buffer_output <= BS_buffer[101:116];
|
259 |
|
|
102:BitStream_buffer_output <= BS_buffer[102:117];
|
260 |
|
|
103:BitStream_buffer_output <= BS_buffer[103:118];
|
261 |
|
|
104:BitStream_buffer_output <= BS_buffer[104:119];
|
262 |
|
|
105:BitStream_buffer_output <= BS_buffer[105:120];
|
263 |
|
|
106:BitStream_buffer_output <= BS_buffer[106:121];
|
264 |
|
|
107:BitStream_buffer_output <= BS_buffer[107:122];
|
265 |
|
|
108:BitStream_buffer_output <= BS_buffer[108:123];
|
266 |
|
|
109:BitStream_buffer_output <= BS_buffer[109:124];
|
267 |
|
|
110:BitStream_buffer_output <= BS_buffer[110:125];
|
268 |
|
|
111:BitStream_buffer_output <= BS_buffer[111:126];
|
269 |
|
|
112:BitStream_buffer_output <= BS_buffer[112:127];
|
270 |
|
|
113:BitStream_buffer_output <= {BS_buffer[113:127],BS_buffer[0]};
|
271 |
|
|
114:BitStream_buffer_output <= {BS_buffer[114:127],BS_buffer[0:1]};
|
272 |
|
|
115:BitStream_buffer_output <= {BS_buffer[115:127],BS_buffer[0:2]};
|
273 |
|
|
116:BitStream_buffer_output <= {BS_buffer[116:127],BS_buffer[0:3]};
|
274 |
|
|
117:BitStream_buffer_output <= {BS_buffer[117:127],BS_buffer[0:4]};
|
275 |
|
|
118:BitStream_buffer_output <= {BS_buffer[118:127],BS_buffer[0:5]};
|
276 |
|
|
119:BitStream_buffer_output <= {BS_buffer[119:127],BS_buffer[0:6]};
|
277 |
|
|
120:BitStream_buffer_output <= {BS_buffer[120:127],BS_buffer[0:7]};
|
278 |
|
|
121:BitStream_buffer_output <= {BS_buffer[121:127],BS_buffer[0:8]};
|
279 |
|
|
122:BitStream_buffer_output <= {BS_buffer[122:127],BS_buffer[0:9]};
|
280 |
|
|
123:BitStream_buffer_output <= {BS_buffer[123:127],BS_buffer[0:10]};
|
281 |
|
|
124:BitStream_buffer_output <= {BS_buffer[124:127],BS_buffer[0:11]};
|
282 |
|
|
125:BitStream_buffer_output <= {BS_buffer[125:127],BS_buffer[0:12]};
|
283 |
|
|
126:BitStream_buffer_output <= {BS_buffer[126:127],BS_buffer[0:13]};
|
284 |
|
|
127:BitStream_buffer_output <= {BS_buffer[127],BS_buffer[0:14]};
|
285 |
|
|
endcase
|
286 |
|
|
endmodule
|
287 |
|
|
|
288 |
|
|
|