-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMV_Selector.v
160 lines (150 loc) · 2.96 KB
/
MV_Selector.v
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
module MV_Selector(clk,reset,WE,SADin,MVin,MVSelected,/*SADSelected,*/done_out,MVwait,goextended,extended,underTh);
input clk,reset,WE,MVwait,extended,underTh;
input [15:0] SADin;
input [13:0] MVin;
//output reg [15:0] SADSelected;
output reg [13:0] MVSelected;
reg [15:0] SADmin;
reg [13:0] MVmin;
//reg [15:0] SADs [2:0];
//reg [13:0] MVs [2:0];
//reg [1:0] count;
reg WE_delay1, WE_delay2, WE_delay3,MVwait_delay1,MVwait_delay2;
reg [13:0] MV_delay1, MV_delay2, MV_delay3;
reg done;
output reg done_out, goextended;
wire check_ext;
assign check_ext = (SADmin > 2500) ? 1'b1 : 1'b0;
always @(posedge clk, posedge reset)
begin
if (reset)
begin
WE_delay1 <= 0;
WE_delay2 <= 0;
WE_delay3 <= 0;
MV_delay1 <= 0;
MV_delay2 <= 0;
MV_delay3 <= 0;
MVwait_delay1 <= 0;
MVwait_delay2 <= 0;
end
else
begin
WE_delay1 <= WE;
WE_delay2 <= WE_delay1;
WE_delay3 <= WE_delay2;
MVwait_delay1 <= MVwait;
MVwait_delay2 <= MVwait_delay1;
MV_delay1 <= MVin;
MV_delay2 <= MV_delay1;
MV_delay3 <= MV_delay2;
end
end
always @(posedge clk, posedge reset)
begin
if (reset)
begin
/*SADs[0] <= 16'hFFFF;
MVs[0] <= 14'b0;
SADs[1] <= 16'hFFFF;
MVs[1] <= 14'b0;
SADs[2] <= 16'hFFFF;
MVs[2] <= 14'b0;*/
SADmin <= 16'hFFFF;
MVmin <= 0;
done <= 1'b0;
end
else if (WE_delay3)
begin
//SADs[count] <= SADin;
//MVs[count] <= MV_delay2;
SADmin <= (SADin < SADmin) ? SADin : SADmin;
MVmin <= (SADin < SADmin) ? MV_delay2 : MVmin;
//if (WE_delay2)
//count <= count + 1;
//else
//begin
if (MVwait_delay2)
begin
//if (count == 1)
// SADs[2] <= 16'hFFFF;
//count <= 2'b0;
done <= 1'b1;
end
//end
end
else if (done_out)
begin
//done <= 1'b0;
SADmin <= 16'hFFFF;
end
else
done <= 1'b0;
end
/*always @(posedge clk, posedge reset)
begin
if(reset)
count <= 3;
else if (WE_delay2)
begin
count <= count + 1;
end
else if (WE_delay3 && MVwait)
begin
count <= 3;
end
end*/
always @(posedge clk, posedge reset)
begin
if (reset)
begin
//SADSelected <= 0;
MVSelected <= 0;
done_out <= 0;
goextended <= 0;
end
//else if (count == 2)
else if (done)
begin
if (check_ext && !extended && !underTh)
goextended <= 1'b1;
else
begin
//SADSelected <= SADmin;
MVSelected <= MVmin;
done_out <= 1;
end
end
else
begin
done_out <= 0;
goextended <= 0;
end
end
/*always @(*)
begin
if (SADs[0] <= SADs[1])
if (SADs[0] <= SADs[2])
begin
SADmin = SADs[0];
MVmin = MVs[0];
end
else
begin
SADmin = SADs[2];
MVmin = MVs[2];
end
else
if (SADs[1]<=SADs[2])
begin
SADmin = SADs[1];
MVmin = MVs[1];
end
else
begin
SADmin = SADs[2];
MVmin = MVs[2];
end
end
*/
endmodule