-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoffsetHandler.v
More file actions
74 lines (65 loc) · 3.8 KB
/
offsetHandler.v
File metadata and controls
74 lines (65 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*----- Module Overview -----------------------------------------------------*
* *
* ________________________ *
* *
* | | *
* clock -------> | | *
* reset -------> | | --/09--> posVerStart *
* moveDirection --/04--> | offsetHandler | --/09--> posVerEnd *
* movemoveStep --/03--> | | --/10--> posHorStart *
* | | --/10--> posHorEnd *
* | | *
* ________________________ *
* *
* *
*----------------------------------------------------------------------------*/
`include "globalVariables.v"
module offsetHandler ( clock, reset, movemoveStep , moveDirection, posVerStart, posVerEnd , posHorStart, posHorEnd );
input clock;
input reset;
input [3:0] moveDirection; /* Defines offset increament { Right, Left, Down, Up } */
input [3:0] movemoveStep; /* Defines moving speed (default 1*CharDim) */
output reg [8:0] posVerStart;
output reg [8:0] posVerEnd;
output reg [9:0] posHorStart;
output reg [9:0] posHorEnd;
initial
begin
posVerStart = ( ( `VDR - `VAL )/2 );
posVerEnd = posVerStart + ( `VAL - 1 );
posHorStart = ( ( `HDR - `HAL )/2 );
posHorEnd = posHorStart + ( `HAL - 1 );
end
always @ ( posedge clock or posedge reset )
if ( reset )
begin /* Reset to Center */
posVerStart = ( ( `VDR - `VAL )/2 );
posVerEnd = ( ( `VDR - `VAL )/2 ) + ( `VAL - 1 );
end
else if ( moveDirection[0] ) /* Drawable Region moves up */
begin
posVerStart = ( posVerStart >= `VAL*movemoveStep + 1 ) ? ( posVerStart - `VAL*movemoveStep ) : ( `VDR - `VAL*movemoveStep + posVerStart );
posVerEnd = ( posVerEnd > `VAL*movemoveStep - 1 ) ? ( posVerEnd - `VAL*movemoveStep ) : ( posVerStart + `VAL - 1 );
end
else if ( moveDirection[1] )/* Drawable Region moves down */
begin
posVerStart = ( posVerStart <= `VDR - `VAL*movemoveStep ) ? ( posVerStart + `VAL*movemoveStep ) : ( `VAL*movemoveStep - `VDR + posVerStart );
posVerEnd = ( posVerEnd >= `VDR - `VAL*movemoveStep + 1 ) ? ( `VAL*movemoveStep - `VDR + posVerEnd ) : posVerStart + `VAL - 1;
end
always @ ( posedge clock or posedge reset )
if ( reset )
begin /* Reset to Center */
posHorStart = ( ( `HDR - `HAL )/2 );
posHorEnd = ( ( `HDR - `HAL )/2 ) + ( `HAL - 1 );
end
else if ( moveDirection[2] ) /* Drawable Region moves left */
begin
posHorStart = ( posHorStart >= `HAL*movemoveStep + 1 ) ? ( posHorStart - `HAL*movemoveStep ) : ( `HDR - `HAL*movemoveStep + posHorStart );
posHorEnd = ( posHorEnd > `HAL*movemoveStep - 1 ) ? ( posHorEnd - `HAL*movemoveStep ) : ( posHorStart + `HAL - 1 );
end
else if ( moveDirection[3] )/* Drawable Region moves right */
begin
posHorStart = ( posHorStart <= `HDR - `HAL*movemoveStep ) ? ( posHorStart + `HAL*movemoveStep ) : ( `HAL*movemoveStep - `HDR + posHorStart );
posHorEnd = ( posHorEnd >= `HDR - `HAL*movemoveStep + 1 ) ? ( `HAL*movemoveStep - `HDR + posHorEnd ) : posHorStart + `HAL - 1;
end
endmodule