URL
https://opencores.org/ocsvn/i650/i650/trunk
Subversion Repositories i650
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 5 to Rev 6
- ↔ Reverse comparison
Rev 5 → Rev 6
/i650/trunk/rtl/timing.v
35,213 → 35,213
output reg dx, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, |
output reg d1_d5, d5_dx, d5_d10, d1_dx, d5_d9, d10_d1_d5, |
//output reg dxcu_d1cu, d10cl_d0cu, |
output dxl, dxu, d0l, d0u, d1l, d1u, d2l, d10u, |
output reg w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, |
output reg wl, wu, ewl, |
output reg s0, s1, s2, s3, s4, |
output reg hp, |
|
output reg[0:9] digit_idx, |
output reg[0:3] early_idx, ontime_idx |
output dxl, dxu, d0l, d0u, d1l, d1u, d2l, d10u, |
output reg w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, |
output reg wl, wu, ewl, |
output reg s0, s1, s2, s3, s4, |
output reg hp, |
|
output reg[0:9] digit_idx, |
output reg[0:3] early_idx, ontime_idx |
); |
|
reg[0:3] digit_ctr; |
reg[0:3] word_ctr; |
reg[0:2] sector_ctr; |
|
assign dxl = dx & wl; |
assign dxu = dx & wu; |
assign d0l = d0 & wl; |
assign d0u = d0 & wu; |
assign d1l = d1 & wl; |
assign d1u = d1 & wu; |
assign d2l = d2 & wl; |
assign d10u = d10 & wu; |
|
//----------------------------------------------------------------------------- |
// 650 four-phase clock |
//----------------------------------------------------------------------------- |
always @(posedge rst, posedge clk) begin |
if (rst) begin |
ap <= 1; |
bp <= 0; |
cp <= 0; |
dp <= 0; |
end else begin |
ap <= dp; |
bp <= ap; |
cp <= bp; |
dp <= cp; |
end; |
end; |
|
//----------------------------------------------------------------------------- |
// Counter-based timing signals |
//----------------------------------------------------------------------------- |
always @(posedge rst, posedge dp) begin |
if (rst) begin |
dx <= 0; |
d0 <= 0; |
d1 <= 0; |
d2 <= 0; |
d3 <= 0; |
d4 <= 0; |
d5 <= 0; |
d6 <= 0; |
d7 <= 0; |
d8 <= 0; |
d9 <= 0; |
d10 <= 0; |
d1_d5 <= 0; |
d5_dx <= 0; |
d5_d10 <= 0; |
d1_dx <= 0; |
d5_d9 <= 0; |
d10_d1_d5 <= 0; |
w0 <= 0; |
w1 <= 0; |
w2 <= 0; |
w3 <= 0; |
w4 <= 0; |
w5 <= 0; |
w6 <= 0; |
w7 <= 0; |
w8 <= 0; |
w9 <= 0; |
wu <= 0; |
wl <= 0; |
ewl <= 0; |
s0 <= 0; |
s1 <= 0; |
s2 <= 0; |
s3 <= 0; |
s4 <= 0; |
hp <= 0; |
digit_ctr <= 4'd0; |
word_ctr <= 4'd0; |
sector_ctr <= 4'd0; |
digit_idx <= 10'd599; |
early_idx <= 4'd10; |
ontime_idx <= 4'd11; |
end else begin |
digit_idx <= (digit_idx + 1) % 600; |
early_idx <= (early_idx + 1) % 12; |
ontime_idx <= (ontime_idx + 1) % 12; |
digit_ctr <= (digit_ctr + 1) % 12; |
if (digit_ctr == 4'd11) begin |
word_ctr <= (word_ctr + 1) % 10; |
if (word_ctr == 9) begin |
sector_ctr <= (sector_ctr + 1) % 5; |
end; |
end; |
|
case (digit_ctr) |
4'd0: begin |
d10 <= 0; dx <= 1; |
d5_dx <= 0; |
d1_dx <= 0; |
d10_d1_d5 <= 0; |
wl <= ~word_ctr[3]; |
wu <= word_ctr[3]; |
case (word_ctr) |
4'd0: begin |
w9 <= 0; w0 <= 1; |
case (sector_ctr) |
3'd0: begin |
s4 <= 0; s0 <= 1; |
hp <= 1; |
end |
3'd1: begin |
s0 <= 0; s1 <= 1; |
end |
3'd2: begin |
s1 <= 0; s2 <= 1; |
end |
3'd3: begin |
s2 <= 0; s3 <= 1; |
end |
3'd4: begin |
s3 <= 0; s4 <= 1; |
end |
endcase; |
end |
4'd1: begin |
w0 <= 0; w1 <= 1; |
end |
4'd2: begin |
w1 <= 0; w2 <= 1; |
end |
4'd3: begin |
w2 <= 0; w3 <= 1; |
end |
4'd4: begin |
w3 <= 0; w4 <= 1; |
end |
4'd5: begin |
w4 <= 0; w5 <= 1; |
end |
4'd6: begin |
w5 <= 0; w6 <= 1; |
end |
4'd7: begin |
w6 <= 0; w7 <= 1; |
end |
4'd8: begin |
w7 <= 0; w8 <= 1; |
end |
4'd9: begin |
w8 <= 0; w9 <= 1; |
end |
endcase; |
end |
4'd1: begin |
dx <= 0; d0 <= 1; |
hp <= 0; |
end |
4'd2: begin |
d0 <= 0; d1 <= 1; |
d1_d5 <= 1; |
end |
4'd3: begin |
d1 <= 0; d2 <= 1; |
d1_dx <= 1; |
d10_d1_d5 <= 1; |
end |
4'd4: begin |
d2 <= 0; d3 <= 1; |
end |
4'd5: begin |
d3 <= 0; d4 <= 1; |
ewl <= wu; |
end |
4'd6: begin |
d4 <= 0; d5 <= 1; |
d1_d5 <= 0; |
d10_d1_d5 <= 0; |
d5_dx <= 1; |
d5_d10 <= 1; |
d5_d9 <= 1; |
end |
4'd7: begin |
d5 <= 0; d6 <= 1; |
end |
4'd8: begin |
d6 <= 0; d7 <= 1; |
end |
4'd9: begin |
d7 <= 0; d8 <= 1; |
end |
4'd10: begin |
d8 <= 0; d9 <= 1; |
d5_d9 <= 0; |
end |
4'd11: begin |
d9 <= 0; d10 <= 1; |
d5_d10 <= 0; |
d10_d1_d5 <= 1; |
end |
endcase; |
end; |
end; |
|
reg[0:3] digit_ctr; |
reg[0:3] word_ctr; |
reg[0:2] sector_ctr; |
|
assign dxl = dx & wl; |
assign dxu = dx & wu; |
assign d0l = d0 & wl; |
assign d0u = d0 & wu; |
assign d1l = d1 & wl; |
assign d1u = d1 & wu; |
assign d2l = d2 & wl; |
assign d10u = d10 & wu; |
|
//----------------------------------------------------------------------------- |
// 650 four-phase clock |
//----------------------------------------------------------------------------- |
always @(posedge rst, posedge clk) begin |
if (rst) begin |
ap <= 1; |
bp <= 0; |
cp <= 0; |
dp <= 0; |
end else begin |
ap <= dp; |
bp <= ap; |
cp <= bp; |
dp <= cp; |
end; |
end; |
|
//----------------------------------------------------------------------------- |
// Counter-based timing signals |
//----------------------------------------------------------------------------- |
always @(posedge rst, posedge dp) begin |
if (rst) begin |
dx <= 0; |
d0 <= 0; |
d1 <= 0; |
d2 <= 0; |
d3 <= 0; |
d4 <= 0; |
d5 <= 0; |
d6 <= 0; |
d7 <= 0; |
d8 <= 0; |
d9 <= 0; |
d10 <= 0; |
d1_d5 <= 0; |
d5_dx <= 0; |
d5_d10 <= 0; |
d1_dx <= 0; |
d5_d9 <= 0; |
d10_d1_d5 <= 0; |
w0 <= 0; |
w1 <= 0; |
w2 <= 0; |
w3 <= 0; |
w4 <= 0; |
w5 <= 0; |
w6 <= 0; |
w7 <= 0; |
w8 <= 0; |
w9 <= 0; |
wu <= 0; |
wl <= 0; |
ewl <= 0; |
s0 <= 0; |
s1 <= 0; |
s2 <= 0; |
s3 <= 0; |
s4 <= 0; |
hp <= 0; |
digit_ctr <= 4'd0; |
word_ctr <= 4'd0; |
sector_ctr <= 4'd0; |
digit_idx <= 10'd599; |
early_idx <= 4'd10; |
ontime_idx <= 4'd11; |
end else begin |
digit_idx <= (digit_idx + 1) % 600; |
early_idx <= (early_idx + 1) % 12; |
ontime_idx <= (ontime_idx + 1) % 12; |
digit_ctr <= (digit_ctr + 1) % 12; |
if (digit_ctr == 4'd11) begin |
word_ctr <= (word_ctr + 1) % 10; |
if (word_ctr == 9) begin |
sector_ctr <= (sector_ctr + 1) % 5; |
end; |
end; |
|
case (digit_ctr) |
4'd0: begin |
d10 <= 0; dx <= 1; |
d5_dx <= 0; |
d1_dx <= 0; |
d10_d1_d5 <= 0; |
wl <= ~word_ctr[3]; |
wu <= word_ctr[3]; |
case (word_ctr) |
4'd0: begin |
w9 <= 0; w0 <= 1; |
case (sector_ctr) |
3'd0: begin |
s4 <= 0; s0 <= 1; |
hp <= 1; |
end |
3'd1: begin |
s0 <= 0; s1 <= 1; |
end |
3'd2: begin |
s1 <= 0; s2 <= 1; |
end |
3'd3: begin |
s2 <= 0; s3 <= 1; |
end |
3'd4: begin |
s3 <= 0; s4 <= 1; |
end |
endcase; |
end |
4'd1: begin |
w0 <= 0; w1 <= 1; |
end |
4'd2: begin |
w1 <= 0; w2 <= 1; |
end |
4'd3: begin |
w2 <= 0; w3 <= 1; |
end |
4'd4: begin |
w3 <= 0; w4 <= 1; |
end |
4'd5: begin |
w4 <= 0; w5 <= 1; |
end |
4'd6: begin |
w5 <= 0; w6 <= 1; |
end |
4'd7: begin |
w6 <= 0; w7 <= 1; |
end |
4'd8: begin |
w7 <= 0; w8 <= 1; |
end |
4'd9: begin |
w8 <= 0; w9 <= 1; |
end |
endcase; |
end |
4'd1: begin |
dx <= 0; d0 <= 1; |
hp <= 0; |
end |
4'd2: begin |
d0 <= 0; d1 <= 1; |
d1_d5 <= 1; |
end |
4'd3: begin |
d1 <= 0; d2 <= 1; |
d1_dx <= 1; |
d10_d1_d5 <= 1; |
end |
4'd4: begin |
d2 <= 0; d3 <= 1; |
end |
4'd5: begin |
d3 <= 0; d4 <= 1; |
ewl <= wu; |
end |
4'd6: begin |
d4 <= 0; d5 <= 1; |
d1_d5 <= 0; |
d10_d1_d5 <= 0; |
d5_dx <= 1; |
d5_d10 <= 1; |
d5_d9 <= 1; |
end |
4'd7: begin |
d5 <= 0; d6 <= 1; |
end |
4'd8: begin |
d6 <= 0; d7 <= 1; |
end |
4'd9: begin |
d7 <= 0; d8 <= 1; |
end |
4'd10: begin |
d8 <= 0; d9 <= 1; |
d5_d9 <= 0; |
end |
4'd11: begin |
d9 <= 0; d10 <= 1; |
d5_d10 <= 0; |
d10_d1_d5 <= 1; |
end |
endcase; |
end; |
end; |
|
endmodule |