// Actel Corporation Proprietary and Confidential
//  Copyright 2008 Actel Corporation.  All rights reserved.
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
// IN ADVANCE IN WRITING.
//  Revision Information:
// Jun09    Revision 4.1
// Aug10    Revision 4.2
// SVN Revision Information:
// SVN $Revision: 8508 $
// SVN $Date: 2009-06-15 16:49:49 -0700 (Mon, 15 Jun 2009) $
`timescale 1ns/1ns
module
COM_Interface_COREUART_0_Rx_async
(
CUARTII
,
CUARTIl
,
CUARTlI
,
CUARTII1
,
CUARTlI1
,
CUARTOl1
,
CUARTOOl
,
CUARTl0l
,
CUARTl01
,
CUARTO11
,
CUARTI11
,
CUARTI1l
,
CUARTllI
,
CUARTlOl
,
CUARTI0I
,
CUARTI01
,
CUARTO1l
,
CUARTIO0
,
CUARTI00
,
CUARTl00
)
;
parameter
SYNC_RESET
=
0
;
parameter
RX_FIFO
=
0
;
parameter
CUARTO1Ol
=
0
;
parameter
CUARTI1Ol
=
1
;
parameter
CUARTl1Ol
=
2
;
parameter
CUARTOOIl
=
3
;
input
CUARTII
;
input
CUARTIl
;
input
CUARTlI
;
input
CUARTII1
;
input
CUARTlI1
;
input
CUARTOl1
;
input
CUARTOOl
;
input
CUARTl0l
;
input
CUARTO1l
;
input
CUARTl01
;
output
CUARTO11
;
output
CUARTI11
;
output
CUARTI1l
;
output
CUARTllI
;
output
[
7
:
0
]
CUARTlOl
;
output
CUARTI0I
;
output
CUARTI01
;
output
CUARTIO0
;
output
CUARTI00
;
output
CUARTl00
;
reg
CUARTI01
;
reg
CUARTI00
;
reg
CUARTO11
;
reg
CUARTI11
;
reg
CUARTI0I
;
wire
CUARTllI
;
reg
[
7
:
0
]
CUARTlOl
;
reg
[
1
:
0
]
CUARTll0
;
reg
[
3
:
0
]
CUARTIOIl
;
reg
CUARTlOIl
;
reg
[
8
:
0
]
CUARTOIIl
;
reg
CUARTIIIl
;
reg
[
3
:
0
]
CUARTlIIl
;
reg
CUARTOlIl
;
reg
[
2
:
0
]
CUARTIlIl
;
reg
CUARTllIl
;
reg
CUARTO0Il
;
reg
CUARTI1l
;
reg
CUARTIO0
;
reg
[
3
:
0
]
CUARTI0Il
;
wire
[
1
:
0
]
CUARTl0Il
;
wire
[
1
:
0
]
CUARTO1Il
;
wire
CUARTI1
;
wire
CUARTl1
;
assign
CUARTI1
=
(
SYNC_RESET
==
1
)
?
1
'b
1
:
CUARTlI
;
assign
CUARTl1
=
(
SYNC_RESET
==
1
)
?
CUARTlI
:
1
'b
1
;
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTI1Il
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTIlIl
<=
3
'b
111
;
end
else
begin
if
(
CUARTIl
==
1
'b
1
)
begin
CUARTIlIl
[
1
:
0
]
<=
CUARTIlIl
[
2
:
1
]
;
CUARTIlIl
[
2
]
<=
CUARTl01
;
end
end
end
always
@
(
CUARTIlIl
)
begin
case
(
CUARTIlIl
)
3
'b
000
:
begin
CUARTlOIl
<=
1
'b
0
;
end
3
'b
001
:
begin
CUARTlOIl
<=
1
'b
0
;
end
3
'b
010
:
begin
CUARTlOIl
<=
1
'b
0
;
end
3
'b
011
:
begin
CUARTlOIl
<=
1
'b
1
;
end
3
'b
100
:
begin
CUARTlOIl
<=
1
'b
0
;
end
3
'b
101
:
begin
CUARTlOIl
<=
1
'b
1
;
end
3
'b
110
:
begin
CUARTlOIl
<=
1
'b
1
;
end
default
:
begin
CUARTlOIl
<=
1
'b
1
;
end
endcase
end
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTl1Il
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTIOIl
<=
4
'b
0000
;
end
else
begin
if
(
CUARTIl
==
1
'b
1
)
begin
if
(
(
CUARTll0
==
CUARTO1Ol
&
(
CUARTlOIl
==
1
'b
1
|
CUARTIOIl
==
4
'b
1000
)
)
||
(
(
CUARTll0
==
CUARTOOIl
)
&&
(
CUARTIOIl
==
4
'b
0110
)
)
)
begin
CUARTIOIl
<=
4
'b
0000
;
end
else
begin
CUARTIOIl
<=
CUARTIOIl
+
1
'b
1
;
end
end
end
end
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTOOll
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTO11
<=
1
'b
0
;
end
else
begin
if
(
CUARTIl
==
1
'b
1
)
begin
if
(
CUARTllIl
==
1
'b
1
)
begin
CUARTO11
<=
1
'b
1
;
end
end
if
(
CUARTOOl
==
1
'b
1
)
begin
CUARTO11
<=
1
'b
0
;
end
end
end
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTIOll
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTI01
<=
1
'b
0
;
end
else
if
(
CUARTIl
==
1
'b
1
)
begin
if
(
CUARTO0Il
==
1
'b
1
)
begin
CUARTI01
<=
1
'b
1
;
end
else
if
(
CUARTO1l
==
1
'b
1
)
begin
CUARTI01
<=
1
'b
0
;
end
end
else
if
(
CUARTO1l
==
1
'b
1
)
begin
CUARTI01
<=
1
'b
0
;
end
else
begin
CUARTI01
<=
CUARTI01
;
end
end
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTI0Il
<=
4
'b
1001
;
end
else
begin
if
(
(
CUARTll0
==
CUARTO1Ol
)
&&
(
CUARTIOIl
==
4
'b
1000
)
)
begin
case
(
{
CUARTII1
,
CUARTlI1
}
)
2
'b
00
:
CUARTI0Il
<=
4
'b
0111
;
2
'b
01
:
CUARTI0Il
<=
4
'b
1000
;
2
'b
10
:
CUARTI0Il
<=
4
'b
1000
;
2
'b
11
:
CUARTI0Il
<=
4
'b
1001
;
endcase
end
else
begin
CUARTI0Il
<=
CUARTI0Il
;
end
end
end
assign
CUARTl00
=
(
CUARTll0
==
CUARTO1Ol
)
;
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTlOll
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTll0
<=
CUARTO1Ol
;
CUARTlOl
<=
8
'b
00000000
;
CUARTllIl
<=
1
'b
0
;
CUARTO0Il
<=
1
'b
0
;
CUARTI00
<=
1
'b
0
;
end
else
begin
if
(
CUARTIl
==
1
'b
1
)
begin
CUARTllIl
<=
1
'b
0
;
CUARTI00
<=
1
'b
0
;
CUARTO0Il
<=
1
'b
0
;
case
(
CUARTll0
)
CUARTO1Ol
:
begin
if
(
CUARTIOIl
==
4
'b
1000
)
begin
CUARTll0
<=
CUARTI1Ol
;
end
else
begin
CUARTll0
<=
CUARTO1Ol
;
end
end
CUARTI1Ol
:
begin
if
(
CUARTlIIl
==
CUARTI0Il
)
begin
CUARTll0
<=
CUARTl1Ol
;
CUARTllIl
<=
CUARTOlIl
;
if
(
CUARTOlIl
==
1
'b
0
)
begin
CUARTlOl
<=
{
(
CUARTII1
&
CUARTOIIl
[
7
]
)
,
CUARTOIIl
[
6
:
0
]
}
;
end
end
else
begin
CUARTll0
<=
CUARTI1Ol
;
end
end
CUARTl1Ol
:
begin
if
(
CUARTIOIl
==
4
'b
1110
)
begin
if
(
CUARTlOIl
==
1
'b
0
)
begin
CUARTO0Il
<=
1
'b
1
;
end
end
else
if
(
CUARTIOIl
==
4
'b
1111
)
begin
CUARTI00
<=
1
'b
1
;
CUARTll0
<=
CUARTOOIl
;
end
else
begin
CUARTll0
<=
CUARTl1Ol
;
end
end
CUARTOOIl
:
begin
if
(
(
CUARTlOIl
==
1
'b
1
)
||
(
CUARTIOIl
==
4
'b
0110
)
)
begin
CUARTll0
<=
CUARTO1Ol
;
end
else
begin
CUARTll0
<=
CUARTOOIl
;
end
end
default
:
begin
CUARTll0
<=
CUARTO1Ol
;
end
endcase
end
end
end
assign
CUARTl0Il
=
{
CUARTII1
,
CUARTlI1
}
;
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTOIll
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTOIIl
[
8
:
0
]
<=
9
'b
000000000
;
CUARTlIIl
<=
4
'b
0000
;
end
else
begin
if
(
CUARTIl
==
1
'b
1
)
begin
if
(
CUARTll0
==
CUARTO1Ol
)
begin
CUARTOIIl
[
8
:
0
]
<=
9
'b
000000000
;
CUARTlIIl
<=
4
'b
0000
;
end
else
if
(
CUARTIOIl
==
4
'b
1111
)
begin
CUARTlIIl
<=
CUARTlIIl
+
1
'b
1
;
case
(
CUARTl0Il
)
2
'b
00
:
begin
CUARTOIIl
[
5
:
0
]
<=
CUARTOIIl
[
6
:
1
]
;
CUARTOIIl
[
6
]
<=
CUARTlOIl
;
end
2
'b
11
:
begin
CUARTOIIl
[
7
:
0
]
<=
CUARTOIIl
[
8
:
1
]
;
CUARTOIIl
[
8
]
<=
CUARTlOIl
;
end
default
:
begin
CUARTOIIl
[
6
:
0
]
<=
CUARTOIIl
[
7
:
1
]
;
CUARTOIIl
[
7
]
<=
CUARTlOIl
;
end
endcase
end
end
end
end
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTIIll
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTIIIl
<=
1
'b
0
;
end
else
begin
if
(
CUARTIl
==
1
'b
1
)
begin
if
(
CUARTIOIl
==
4
'b
1111
&
CUARTlI1
==
1
'b
1
)
begin
CUARTIIIl
<=
CUARTIIIl
^
CUARTlOIl
;
end
if
(
CUARTll0
==
CUARTl1Ol
)
begin
CUARTIIIl
<=
1
'b
0
;
end
end
end
end
assign
CUARTO1Il
=
{
CUARTII1
,
CUARTOl1
}
;
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTlIll
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTI11
<=
1
'b
0
;
end
else
begin
if
(
CUARTIl
==
1
'b
1
&
CUARTlI1
==
1
'b
1
&
CUARTIOIl
==
4
'b
1111
)
begin
case
(
CUARTO1Il
)
2
'b
00
:
begin
if
(
CUARTlIIl
==
4
'b
0111
)
begin
CUARTI11
<=
CUARTIIIl
^
CUARTlOIl
;
end
end
2
'b
01
:
begin
if
(
CUARTlIIl
==
4
'b
0111
)
begin
CUARTI11
<=
~
(
CUARTIIIl
^
CUARTlOIl
)
;
end
end
2
'b
10
:
begin
if
(
CUARTlIIl
==
4
'b
1000
)
begin
CUARTI11
<=
CUARTIIIl
^
CUARTlOIl
;
end
end
2
'b
11
:
begin
if
(
CUARTlIIl
==
4
'b
1000
)
begin
CUARTI11
<=
~
(
CUARTIIIl
^
CUARTlOIl
)
;
end
end
default
:
begin
CUARTI11
<=
1
'b
0
;
end
endcase
end
if
(
CUARTl0l
==
1
'b
1
)
begin
CUARTI11
<=
1
'b
0
;
end
end
end
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTOlll
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTOlIl
<=
1
'b
0
;
CUARTI0I
<=
1
'b
1
;
CUARTI1l
<=
1
'b
0
;
CUARTIO0
<=
1
'b
0
;
end
else
begin
CUARTI0I
<=
1
'b
1
;
CUARTI1l
<=
1
'b
0
;
CUARTIO0
<=
1
'b
0
;
if
(
CUARTIl
==
1
'b
1
)
begin
if
(
CUARTII1
==
1
'b
1
)
begin
if
(
CUARTlI1
==
1
'b
1
)
begin
if
(
CUARTlIIl
==
4
'b
1001
&
CUARTll0
==
CUARTI1Ol
)
begin
CUARTI0I
<=
1
'b
0
;
CUARTI1l
<=
1
'b
1
;
CUARTIO0
<=
1
'b
1
;
if
(
RX_FIFO
==
1
'b
0
)
begin
CUARTOlIl
<=
1
'b
1
;
end
end
end
else
begin
if
(
CUARTlIIl
==
4
'b
1000
&
CUARTll0
==
CUARTI1Ol
)
begin
CUARTI0I
<=
1
'b
0
;
CUARTI1l
<=
1
'b
1
;
CUARTIO0
<=
1
'b
1
;
if
(
RX_FIFO
==
1
'b
0
)
begin
CUARTOlIl
<=
1
'b
1
;
end
end
end
end
else
begin
if
(
CUARTlI1
==
1
'b
1
)
begin
if
(
CUARTlIIl
==
4
'b
1000
&
CUARTll0
==
CUARTI1Ol
)
begin
CUARTI0I
<=
1
'b
0
;
CUARTI1l
<=
1
'b
1
;
CUARTIO0
<=
1
'b
1
;
if
(
RX_FIFO
==
1
'b
0
)
begin
CUARTOlIl
<=
1
'b
1
;
end
end
end
else
begin
if
(
CUARTlIIl
==
4
'b
0111
&
CUARTll0
==
CUARTI1Ol
)
begin
CUARTI0I
<=
1
'b
0
;
CUARTI1l
<=
1
'b
1
;
CUARTIO0
<=
1
'b
1
;
if
(
RX_FIFO
==
1
'b
0
)
begin
CUARTOlIl
<=
1
'b
1
;
end
end
end
end
end
if
(
CUARTOOl
==
1
'b
1
)
begin
CUARTOlIl
<=
1
'b
0
;
end
end
end
assign
CUARTllI
=
CUARTOlIl
;
endmodule
