View
221
Download
0
Category
Preview:
Citation preview
8/3/2019 014 Dont Cares
1/59
Courtesy RK Brayton (UCB)and A Kuehlmann (Cadence)1
Logic Synthesis
Exploiting Dont Cares inLogic Minimization
8/3/2019 014 Dont Cares
2/59
2
Node Minimization
Problem: Given a Boolean network, optimize it by minimizing each node as
much as possible. Note:
The initial network structure is given. Typically applied after the
global optimization, i.e., division and resubstitution. We minimize the function associated with each node. What do we mean by minimizing the node as much as possible?
8/3/2019 014 Dont Cares
3/59
3
Functions Implementable at a Node
In a Boolean network, we may represent a node using the primaryinputs {x 1,.. x n} plus the intermediate variables {y 1,.. y m}, as long as thenetwork is acyclic .
DEFINITION: A function g j, whose variables are a subset of {x 1,.. x n, y1,.. y m}, is
implementable at a node j if the variables of g j do not intersect with TFO j the replacement of the function associated with j by g j does not
change the functionality of the network.
8/3/2019 014 Dont Cares
4/59
4
Functions Implementable at a Node The set of implementable functions at j provides the solution space of the local
optimization at node j.
TFO j = {node i s.t. i = j or path from j to i}
8/3/2019 014 Dont Cares
5/59
5
Consider a sumofproducts expression F j associated with a node j.
Definition:F j is prime (in multilevel sense) if for all cubes c F j, no literal of c canbe removed without changing the functionality of the network.
Definition:F j is irredundant if for all cubes c F j, the removal of c from F j changesthe functionality of the network.
Prime and Irredundant Boolean Network
8/3/2019 014 Dont Cares
6/59
6
Prime and Irredundant Boolean Network
Definition:A Boolean network is prime andirredundant if F j is prime and irredundantfor all j.
Theorem:A network is 100% testable for singlestuckat faults (sa0 or sa1) iff it isprime and irredundant.
8/3/2019 014 Dont Cares
7/59
7
Local OptimizationGoals: Given a Boolean network:
make the network prime and irredundant for a given node of the network, find a least-cost sumofproducts
expression among the implementable functions at the nodeNote:
Goal 2 implies the goal 1, But we want more than just 100% testability. There are many
expressions that are prime and irredundant, just like in two-levelminimization. We seek the best .
8/3/2019 014 Dont Cares
8/59
8
Local OptimizationKey Ingredient Network Don't Cares:
External don't cares XDCk , k=1,,p, - set of minterms of the primary inputs given for each
primary output
Internal don't cares derived from the network structure Satisfiability Dont Cares SDC Observability Dont Cares ODC
8/3/2019 014 Dont Cares
9/59
9
SDC
Recall: We may represent a node using the primary inputs plus the
intermediate variables. The Boolean space is B n+m .
However, the intermediate variables are dependent on the primary
inputs. Thus not all the minterms of B n+m can occur:
use the non- occuring minterms as dont cares to optimize the nodefunction
we get internal dont cares even when no external dont cares exist
8/3/2019 014 Dont Cares
10/59
10
SDC
Example: y1 = F 1 = x1 y j = F j = y1x2
Since y 1 = x1, y1 x1 never occurs. Thus we may include these points to represent F j
Don't Cares SDC = (y1 x1)+(y j y1x2)
In general,
Note : SDC Bn+m)(
1 j j
m
j j j F yF ySDC
8/3/2019 014 Dont Cares
11/59
11
ODC
y j = x1 x2 + x1x3 zk = x1 x2 + y jx2 + (y j x3)
Any minterm of x 1 x2 + x2 x3 + x2 x3 determines z k independent of y j .
The ODC of y j for z k is the set of mintermsof the primary inputs for which the valueof y j is not observable at z k
This means that the two Boolean networks, one with y j forced to 0 and one with y j forced to 1compute the same value for z k when x ODC jk
0 1{ | ( ) | ( ) | } j jn
jk k y k yODC x B z x z x
8/3/2019 014 Dont Cares
12/59
12
Don't Cares for Node j
F j
inputs
outputs
ODC
SD
C
Define the don't care sets DC j for a node j as
ODC and SDCillustrated:
Booleannetwork
1
( ) ( ) j
p
i j i i jk k ii TFO k
DC y F y F ODC XDC
8/3/2019 014 Dont Cares
13/59
13
Main Theorem
THEOREM: The function F j = (F j-DC j, DC j, F j+DC j) is the complete set of implementablefunctions at node j
COROLLARY:
F j is prime and irredundant (in the multi-level sense) iff it is prime andirredundant cover of F j
A leastcost expression at node j can be obtained by minimizing F j.
A prime and irredundant Boolean network can be obtained by using only 2-level logic minimization for each node j with the don't care DC j .
Note: If F j is changed, then DC i may change for some other node i in the network.
8/3/2019 014 Dont Cares
14/59
14
Local Optimization Practical Questions
How to compute the don't care set at a node? XDC is given SDC computed by function propagation from inputs How do we compute ODC ?
How to minimize the function with the don't care?
8/3/2019 014 Dont Cares
15/59
15
ODC Computationz k
g q g 2
g 1
y j
x 1 x 2 x n
0 1{ | ( ) | ( ) | } j jn
jk k y k yODC x B z x z x
0 1( ) | ( ) | } j jk
k y k y
j
z z x z x
y
k jk
j
zODC
yDenote
where
8/3/2019 014 Dont Cares
16/59
16
ODC Computation
In general, zk
gqg2
g1
y j
x1 x2 xn
1 2
1 2
2 2 2131 2 1
1 2 1 3 1
33 31 2 1 2
1 2 3 1 2
...
...
... ......
qk k k k
j j j q j
q qk k k
j j j j q q j j
qk k
j j j q j j j
g z z z zg g y g y g y g y
g g z z g zg g gg g y y g g y y g g y y
z g z gg g g gg g g y y y g g g y y y
q
j
g
y
8/3/2019 014 Dont Cares
17/59
17
ODC Computation
Conjecture:
This conjecture is true if there is no reconvergent fanout in TFO j.
With reconvergence, the conjecture can be incorrect in two ways: it does not compute the complete ODC. (can have correct results butconservative )
it contains care points. (leads to incorrect answer)
1
p
j jk k
ODC ODC
0 1[( | | ) ] j j j
j i y i y ii FOODC F F ODC
8/3/2019 014 Dont Cares
18/59
18
Transduction (Muroga)
Definition:Given a node j, a permissible function at j is a function of the primary inputs implementable at j.
The original transduction computes a set of permissible functions for a NOR gate
in an all NORgate network:
MSPF (Maximum Set of Permissible Functions) CSPF (Compatible Set of Permissible Functions)
Both of these are just incompletely specified functions , i.e. functions withdont cares.
Definition:We denote by g j the function f j expressed in terms of the primary inputs. g j(x) is called the global function of j.
8/3/2019 014 Dont Cares
19/59
19
Transduction CSPF
MSPF: expensive to compute. if the function of j is changed, the MSPF for some other node i in the
network may change.CSPF:
Consider a set of incompletely specified functions {f jC
} for a set of nodes jsuch that a simultaneous replacement of the functions at all nodes j jeach by an arbitrary cover of f jC does not change the functionality of thenetwork.
f jC is called a CSPF at j. The set {f jC} is called a compatible set ofpermissible functions (CSPFs).
8/3/2019 014 Dont Cares
20/59
20
Transduction CSPF
Note: CSPFs are defined for a set of nodes. We don't need to re-compute CSPF's if the function of other nodes in
the set are changed according to their CSPFs
The CSPFs can be used independently This makes node optimization much more efficient since no re-
computation needed Any CSPF at a node is a subset of the MSPF at the node External dont cares (XDC) must be compatible by construction
8/3/2019 014 Dont Cares
21/59
21
Transduction CSPF
Key Ideas: Compute CSPF for one node at a time.
from the primary outputs to the primary inputs
If (f1
C ,, f j-1
C ) have been computed, compute f
j
C so that simultaneousreplacement of the functions at the nodes preceding j by functions in(f1C ,, f j-1C ) is valid. put more dont cares to those processed earlier
Compute CSPFs for edges so that
Note: CSPFs are dependent on the orderings of nodes/edges.
[ , ]( ) ( ) j
C C
j j ii FO f x f x
8/3/2019 014 Dont Cares
22/59
22
CSPF's for EdgesProcess from output toward the inputs in reverse topological order:
Assume CSPF f iC for a node i is given.
Ordering of Edges: y 1 < y2 < < y r put more don't cares on the edges processedearlier
only for NOR gates
0 if fiC(x) = 1
f[j,i]C(x) = 1 if f iC(x) = 0 and for all y k > y j: g k(x) = 0 andg j(x) = 1
* (dont care) otherwise
8/3/2019 014 Dont Cares
23/59
23
Transduction CSPFExample: y1 < y2 < y3
yi = [1 0 0 0 0 0 0 0] output
y1 = [0 0 0 0 1 1 1 1]y2 = [0 0 1 1 0 0 1 1]y3 = [0 1 0 1 0 1 0 1]
f [1,i] C = [0 * * * 1 * * *]
f [2,i] C = [0 * 1 * * * 1 *]
f [3,i] C = [0 1 * 1 * 1 * 1]
Note: we just make the last 1 stay 1 and all others *.Note: CSPF for [1, i] has the most don't cares among the three input edges.
globalfunctionsof inputs
edge CSPFs
i
8/3/2019 014 Dont Cares
24/59
24
Example for Transduction
a
b
ygy= [0100]fCy = [0100]
ga = [0011]
fcay = [*011]
c gc = [1000]fCc=fCcy = [10**]
ga = [0011]fCac = [0***]
ga = [0011]
fCa = [0011]
gb = [0101]fCb=fCbc = [01**]
Notation: [ab,ab,ab,ab]
This connection canbe replaced by 0
a
b
y
8/3/2019 014 Dont Cares
25/59
25
Application of Transduction
Gate substitution: gate i can be replaced by gate j if:
g j fCi and y i SUPPORT(g j)
Removal of connections:
wire (i,j) can be removed if: 0 fCij
Adding connections: wire (i,j) can be added if:
fC j(x) = 1 g i(x) = 0 and y i SUPPORT(g j) useful when iterated in combination with substitution and removal
8/3/2019 014 Dont Cares
26/59
26
CSPF Computation
Compute the global functions g for all the nodes. For each primary output z k ,
fzkC(x)= * if x XDCk
fzkC(x)= g zk(x) otherwise
For each node j in a topological order from the outputs,
compute f jC = i FOjf[j,i]C(x) compute CSPF for each fanin
edge of j, i.e. f [k,j]C j[j,i]
[k,j]
8/3/2019 014 Dont Cares
27/59
27
Generalization of CSPF's
Extension to Boolean networks where the node functions are arbitrary(not just NOR gates).
Based on the same idea as Transduction process one node at a time in a topological order from the primary
outputs. compute a compatible don't care set for an edge, CODC [j,i] intersect for all the fanout edges to compute a compatible don't
care set for a node.
CODC j=
i FojCODC
[j,i]C
8/3/2019 014 Dont Cares
28/59
28
Compatible Don't Cares at Edges
Ordering of edges: y 1 < y2 < < y r
Assume no don't care at a node i e.g. primary output
A compatible don't care for an edge [j,i] is a function of
CODC [j,i](y) : B r BNote : it is a function of the local inputs (y 1 , y2 , ,y r).
It is 1 at m Br if m is assigned to be dont care for the input line [j,i].
8/3/2019 014 Dont Cares
29/59
29
Compatible Don't Cares at Edges
Property on {CODC [1,i],,CODC [r,i]} Again, we assume no dont care at output i For all m Br, the value of y i does not change by
arbitrarily flipping the values of{ y j FIi | CODC [j,i](m) = 1 }
i
CODC [j,i](m)=1
jk
CODC [k,i](m)=1
yino changem is held fixed, but valueon y j can be arbitraryif CODC [j,i](m) is dont care
8/3/2019 014 Dont Cares
30/59
30
Compatible Don't Cares at Edges
Given {CODC [1,i],,CODC [j-1,i]}compute CODC [j,i](m) = 1 iff thethe value of y i remains insensitiveto y j under arbitrarily flipping ofthe values of those y k in the set:
a = { k FIi | y k < y j, CODC [k,i](m) = 1 }
Equivalently, CODC[j,i]
(m) = 1 iff for
| |( ) : ( , ) 1a ia a b j
f m B m m
y
( , , )a j b
m m m m
8/3/2019 014 Dont Cares
31/59
31
Compatible Don't Cares at Edges
Thus we are arbitrarily flipping the m a part. In some sense m b is enough to keepfi insensitive to the value of y j.
is called the Boolean difference of fi with respect to y j and is all conditionswhen f i is sensitive to the value of y j.
| |( ) ( , ) 1a ia a b j
f m B m m y
0 1( | | ) j jk
i y i y j
f f f
y
( ( , , ))a j bm m m m
8/3/2019 014 Dont Cares
32/59
32
Compatible Don't Cares at a Node
Compatible don't care at a node j, CODC j, can also be expressed as a function of theprimary inputs.
if j is a primary output, CODC j = XDC j otherwise,
represent CODC [j,i] by the primary inputs for each fanout edge [j,i].
CODC j= i FOj(CODC i+CODC [j,i])
THEOREM: The set of incompletely specified functions with the CODCs computed above forall the nodes provides a set of CSPFs for an arbitrary Boolean network.
8/3/2019 014 Dont Cares
33/59
33
Computations of CODC Subset
An easier method for computing a CODC subset on each fanin y kofa function f is:
where CODC f is the compatible dont care already computed for node f, and where f has its inputs y 1, y2 ,, y r in that order.
The notation for the operator, y.f = f y f y , is used here.
1 11 1
( .) ( )k y k f
k k
f f f CODC y y CODC
y y y
8/3/2019 014 Dont Cares
34/59
34
Computations of CODC Subset
The interpretation of the term for CODC y2
is that: of the minterms m Br where f is insensitive to y 2,
we allow m to be a dont care of y 2 if either m is not a dont care for the y 1 input or
no matter what value is chosen for y 1, ( .y1), f is still insensitive toy2 under m (f is insensitive at m for both values of y 2 )
11 2
( ) f f
y y y
2
f
y
1
f
y
8/3/2019 014 Dont Cares
35/59
35
Computation of Don't Cares
XDC is given, SDC is easy to compute
Transduction NORgate networks MSPF, CSPF (permissible functions of PI only)
Extension of CSPF's to CODCs) for general networks based on BDD computation can be expensive to compute, not maximal implementable functions of PI and y
Question: How do we represent XDCs? How do we compute the local dont care?
8/3/2019 014 Dont Cares
36/59
36
Representing XDCs
separate
DC network
multi-levelBoolean network
for z
y12
y11 y10
XDC
x1 x4 x2
f 12 =y 10 y 11
y9
y3
y1
y4 y8 y7
y2
or
x4
y6 y5
z (output)
2 410 1 3 11 y x x y x x x3
x3 x2 x1 x4 x2 x3 x1
ODC 2 =y 1 2 7 8 7 8 5 6 f y y y y y y
&
& & &
8/3/2019 014 Dont Cares
37/59
37
Mapping to Local Space
How can ODC + XDC be used for optimizing the representationof a node, y j?
y j
yr yl
x1 x2 xn
8/3/2019 014 Dont Cares
38/59
38
Mapping to Local Space
Definitions: The local space B r of node j is the Boolean space of all the fanins ofnode j (plus maybe some other variables chosen selectively).
A dont care set D(y r+) computed in local space (+) is called a local
dont care set. The + stands for additional variables.
Solution: Map DC(x) = ODC(x)+XDC(x) to local space of the node to find
local dont cares, i.e. we will compute
( ) ( ( ))FI j
r g D y IMG DC x
8/3/2019 014 Dont Cares
39/59
39
Computing Local Dont Cares
The computation is done in two steps:
1. Find DC(x) in terms of primary inputs.2. Find D, the local dont care set, by image computation and complementation.
y j
yr y
l
x1 x2 xn
( ) ( ( ))FI j
r g D y IMG DC x
8/3/2019 014 Dont Cares
40/59
40
Map to Primary Input (PI) Space
y j
yr yl
x1 x2 xn
B Bnnm
1
( , , )
( , , ) global function j k l
j j n
f y y y
g x x
8/3/2019 014 Dont Cares
41/59
41
Map to Primary Input (PI) Space
Computation done with Binary Decision Diagrams Build BDDs representing global functions at each node
in both the primary network and the dont care network,g j(x1,...,x n)
use BDD_compose Replace all the intermediate variables in (ODC+XDC) with their
global BDD
Use BDDs to substitute for y in the above ( using BDD_compose )
DC(x) x h ODC(x,y)+DC(x,y) y x h ) ( ) , ( ~
)())(,(~
),(~
xh xg xh y xh
8/3/2019 014 Dont Cares
42/59
42
Example
XDC ODC DC x x x x x x x x DC
x x x x g y XDC 2
x x x x g
y ODC
z
2 2
4 3 2 1 4 3 2 1 2
4 3 2 1 12
12
4 3 2 1 1
1 2
separateDC network
multi-levelnetworkfor z
y12
y11 y10
XDC
x1 x4 x2
10 1 3
2 411
y x x
y x x
x3
f 12 =y 10 y 11
y9
y3
y1 y4 y8 y7
y2
or
x4
y6 y5
z (output)
x3 x2 x1 x4 x2 x3 x1
ODC 2 =y 1 2 7 8 7 8 5 6 f y y y y y y
& & &
&
8/3/2019 014 Dont Cares
43/59
43
Image Computation
y j yr yi
x1 x2 xn
local
space g r g i
image
Bn
Br
Di
image of care
set undermapping y 1,...,y r
DC i=XDC i+ODC i care set
Local dont cares are the set of minterms in the local space of y i that
cannot be reached under any input combination in the care set of y i (interms of the input variables).
Local dont Care Set:
i.e. those patterns of (y 1,...,y r) that never appear as images of input cares.
1 2( , , , )IMAGE [care set]
r i g g g D
8/3/2019 014 Dont Cares
44/59
44
Example
y y D x x x x x x DC
x x x x x x x x DC
yODC yODC
z
872
4242312
432143212
12
12
2 2 2 1 3 2 4 2 4( )( ) DC D DC x x x x x x y y D 872
y y y y f 65872
Note that D 2 is given in this space y 5, y6, y7, y8.Thus in the space (- - 10) never occurs.Can check thatUsing , f 2 can be simplified to
separateDC network
y12
y11 y10
XDC
x1 x4 x2
2 410 1 3 11 y x x y x x x3
f 12 =y 10 y 11
y9
y3 y1
y4 y8 y7
y2
or
x4
y6 y5
z (output)
x3 x2 x1 x4 x2 x3 x1
ODC 2 =y 1 2 7 8 7 8 5 6 f y y y y y y
&
& & &
8/3/2019 014 Dont Cares
45/59
45
Full_Simplify Algorithm Visit node in topological reverse order i.e. from outputs.
Compute compatible ODC i
compatibility done with intermediate y variables
BDDs built to get this dont care set in terms of primary inputs (DC i) Image computation techniques used to find local dont cares D i at each
node
XDC i(x,y) + ODC i (x,y) DC i(x) Di( y r )
where ODC i is a compatible dont care at node i (we are loosing somefreedom)
f
y1 yk
k k j
k
y y f
j FO
CODC CODC
1 11 1
( .) ( )k y f k f
k k
f f f CODC y y CODC
y y y
8/3/2019 014 Dont Cares
46/59
46
Image Computation: Two methods
Transition Relation Method
f : Bn Br F : B n x B r B
F is the characteristic function of f.
( , ) {( , ) | ( )}
( ( ))
( ( ) ( ))
i ii r
i i i ii r
F x y x y y f x
y f x
y f x y f x
8/3/2019 014 Dont Cares
47/59
47
Transition Relation Method
Image of set A under ff(A) = x(F(x,y)A(x))
The existential quantification x is also called smoothing Note: The result is a BDD representing the image, i.e. f(A) is a BDDwith the property thatBDD(y) = 1 x such that f(x) = y and x A.
A f(A)f
x y
1where and
n i i i x x x x x xg g g
8/3/2019 014 Dont Cares
48/59
48
Recursive Image ComputationProblem:
Given f : B n Br and A(x) Bn
Compute:
Step 1: compute CONSTRAIN (f,A(x)) fA(x)f and A are represented by BDDs. CONSTRAIN is a built -in BDDoperation. It is related to generalized cofactor with the dont cares used in aparticular way to make
1. the BDD smaller and2. an image computation into a range computation.
Step 2: compute range of f A(x).fA(x) : Bn Br
A x x f y y f A x
,||
8/3/2019 014 Dont Cares
49/59
49
Recursive Image ComputationProperty of CONSTRAIN (f,A) f
A(x):
(fA(x))|x Bn = f|x A
A
f
Bn Br
fA
range of f A(Bn)
range of f(B n)
f(A)
8/3/2019 014 Dont Cares
50/59
50
Recursive Image Computation
x11 x
Bn Br = (y1,...,y r)
This is called input cofactoring or domain partitioning
1 11 2 1 2( ) ([ , , , ] ) ([ , , , ] )r x r x RNG f RNG f f f RNG f f f
1 x
1. Method:
8/3/2019 014 Dont Cares
51/59
51
Recursive Image Computation
where here refers to the CONSTRAIN operator.
(This is called output cofactoring of co-domain partitioning ).Thus
Notes: This is a recursive call. Could use 1. or 2 at any point.The input is a set of BDDs and the output can beeither a set of cubes or a BDD.
1 2 ( )| ( ) ([ , , , ] )r
x A r A x f y RNG f f f
1 2 1 2
1 1
1 1
1 1[ , , ] 1 [ , , ] 1
2 2
1 2 21
( (1)) ( (0))
( ) ([1, , ] ) ([0, , ] )
([ , ] ) ([ , ] )
r r f f f f f f
r f r f
r f r f
IMG x f IMG x f
RNG f RNG f f RNG f f
y RNG f f y RNG f f
2. Method:
[] fi
8/3/2019 014 Dont Cares
52/59
52
Constrain Illustrated
X X
f
0 0
A
Idea: Map subspace (say cube c in B n) which is entirely in DC(i.e. A(c) 0) into nearest non- dont care subspace
(i.e. A 0).
where A(x) is the nearest point in B n such that A = 1 there.
( ) if ( ) 1( )
( ( )) if ( ) 0 A A
f x A x f x
f x A x
8/3/2019 014 Dont Cares
53/59
53
Simplify
inputs Bn
f j
XDC outputs
m intermediatenodes
Express ODC in terms of variables in B n+m
Dont Carenetwork
8/3/2019 014 Dont Cares
54/59
54
Simplify
ODC+XDC DC
DC
cares
D
cares
Minimize f j dont care = D
Bn+m Bn
Br
compose
imagecomputation
f j localspace B r
Question: Where is the SDC coming in and playing a roll?
Express ODC in terms of variables in B n+m
8/3/2019 014 Dont Cares
55/59
55
Minimizing Local Functions
Once an incompletely specified function (ISF) is derived, weminimize it.
1. Minimize the number of literals Minimum literal() in the slides for Boolean division
2. The offset of the function may be too large. Reduced offset minimization (built into ESPRESSO in SIS) Tautology based minimization
If all else fails, use ATPG techniques to remove redundancies.
8/3/2019 014 Dont Cares
56/59
56
Reduced Offset
Idea: In expanding any single cube, only part ofthe offset is useful. This part is called thereduced offset for that cube.
Example: In expanding the cubea b c the point abc isof no use. Thereforeduring this expansionabc might as well be put
in the offset.
Then the offset which was ab + ab + bc becomes a + b. The reduced offset of anindividual on-set cube is always unate.
8/3/2019 014 Dont Cares
57/59
57
Tautologybased TwoLevel Min.
In this, twolevel minimization is done without using the offset. Offsetis used for blocking the expansion of a cube too far. The othermethod of expansion is based on tautology .
Example:
In expanding a cube c = abeg to aeg we can test if aeg f +d.This can be done by testing
(f +d) aeg 1 (i.e. Is (f + d) aeg a tautology? )
8/3/2019 014 Dont Cares
58/59
58
ATPG
MultiLevel Tautology: Idea: Use testing methods. (ATPG is a highly
developed technology). If we can prove that afault is untestable , then the untestable signalcan be set to a constant.
This is like expansion in Espresso.
8/3/2019 014 Dont Cares
59/59
Removing RedundanciesRedundancy removal:
do random testing to locate easy tests apply new ATPG methods to prove testability of remaining faults. if non-testable for s-a-1, set to 1 if non-testable for s-a-0, set to 0
Reduction (redundancy addition) is the reverse of this.
It is done to make something else untestable . There is a close analogy with reduction in espresso. Here also reduction is usedto move away from a local minimum.
& reduction = add an input
Used in transduction (Muroga)Global flow (Bermen and Trevellan)
cba
d
Recommended