// 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_Tx_async
(
CUARTII
,
CUARTll
,
CUARTlI
,
CUARTl0I
,
CUARTO1I
,
CUARTI1I
,
CUARTlO1
,
CUARTOI1
,
CUARTII1
,
CUARTlI1
,
CUARTOl1
,
CUARTIl1
,
CUARTll1
,
CUARTlll
)
;
parameter
SYNC_RESET
=
0
;
parameter
TX_FIFO
=
0
;
input
CUARTII
;
input
CUARTll
;
input
CUARTlI
;
input
CUARTl0I
;
input
[
7
:
0
]
CUARTO1I
;
input
[
7
:
0
]
CUARTI1I
;
input
CUARTlO1
;
input
CUARTOI1
;
input
CUARTII1
;
input
CUARTlI1
;
input
CUARTOl1
;
output
CUARTIl1
;
wire
CUARTIl1
;
output
CUARTll1
;
output
CUARTlll
;
reg
CUARTll1
;
parameter
CUARTIlll
=
0
;
parameter
CUARTllll
=
1
;
parameter
CUARTO0ll
=
2
;
parameter
CUARTI0ll
=
3
;
parameter
CUARTl0ll
=
4
;
parameter
CUARTO1ll
=
5
;
parameter
CUARTI1ll
=
6
;
integer
CUARTl1ll
;
reg
CUARTOO0l
;
reg
[
7
:
0
]
CUARTIO0l
;
reg
[
3
:
0
]
CUARTlO0l
;
reg
CUARTOI0l
;
wire
CUARTlll
;
reg
CUARTII0l
;
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
:
CUARTlI0l
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTOO0l
<=
1
'b
1
;
end
else
begin
if
(
TX_FIFO
==
1
'b
0
)
begin
if
(
CUARTll
)
begin
if
(
CUARTl1ll
==
CUARTO0ll
)
begin
CUARTOO0l
<=
1
'b
1
;
end
end
if
(
CUARTl0I
)
begin
CUARTOO0l
<=
1
'b
0
;
end
end
else
begin
CUARTOO0l
<=
!
CUARTOI1
;
end
end
end
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTOl0l
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTl1ll
<=
CUARTIlll
;
CUARTIO0l
<=
8
'b
0
;
CUARTII0l
<=
1
'b
1
;
end
else
begin
if
(
CUARTll
||
(
CUARTl1ll
==
CUARTIlll
)
||
(
CUARTl1ll
==
CUARTI1ll
)
||
(
CUARTl1ll
==
CUARTllll
)
)
begin
CUARTII0l
<=
1
'b
1
;
case
(
CUARTl1ll
)
CUARTIlll
:
begin
if
(
TX_FIFO
==
1
'b
0
)
begin
if
(
!
CUARTOO0l
)
begin
CUARTl1ll
<=
CUARTllll
;
end
else
begin
CUARTl1ll
<=
CUARTIlll
;
end
end
else
begin
if
(
CUARTlO1
==
1
'b
0
)
begin
CUARTII0l
<=
1
'b
0
;
CUARTl1ll
<=
CUARTI1ll
;
end
else
begin
CUARTl1ll
<=
CUARTIlll
;
CUARTII0l
<=
1
'b
1
;
end
end
end
CUARTllll
:
begin
CUARTl1ll
<=
CUARTO0ll
;
end
CUARTO0ll
:
begin
CUARTl1ll
<=
CUARTI0ll
;
if
(
TX_FIFO
==
1
'b
0
)
begin
CUARTIO0l
<=
CUARTO1I
;
end
else
begin
CUARTIO0l
<=
CUARTI1I
;
end
end
CUARTI0ll
:
begin
if
(
CUARTII1
)
begin
if
(
CUARTlO0l
==
4
'b
0111
)
begin
if
(
CUARTlI1
)
begin
CUARTl1ll
<=
CUARTl0ll
;
end
else
begin
CUARTl1ll
<=
CUARTO1ll
;
end
end
else
begin
CUARTl1ll
<=
CUARTI0ll
;
end
end
else
begin
if
(
CUARTlO0l
==
4
'b
0110
)
begin
if
(
CUARTlI1
)
begin
CUARTl1ll
<=
CUARTl0ll
;
end
else
begin
CUARTl1ll
<=
CUARTO1ll
;
end
end
else
begin
CUARTl1ll
<=
CUARTI0ll
;
end
end
end
CUARTl0ll
:
begin
CUARTl1ll
<=
CUARTO1ll
;
end
CUARTO1ll
:
begin
CUARTl1ll
<=
CUARTIlll
;
end
CUARTI1ll
:
begin
CUARTl1ll
<=
CUARTllll
;
end
default
:
begin
CUARTl1ll
<=
CUARTIlll
;
end
endcase
end
end
end
assign
CUARTlll
=
CUARTII0l
;
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTIl0l
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTlO0l
<=
4
'b
0000
;
end
else
begin
if
(
CUARTll
)
begin
if
(
CUARTl1ll
!=
CUARTI0ll
)
begin
CUARTlO0l
<=
4
'b
0000
;
end
else
begin
CUARTlO0l
<=
CUARTlO0l
+
1
'b
1
;
end
end
end
end
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTll0l
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTll1
<=
1
'b
1
;
end
else
begin
if
(
CUARTll
||
(
CUARTl1ll
==
CUARTIlll
)
||
(
CUARTl1ll
==
CUARTI1ll
)
||
(
CUARTl1ll
==
CUARTllll
)
)
begin
case
(
CUARTl1ll
)
CUARTIlll
:
begin
CUARTll1
<=
1
'b
1
;
end
CUARTllll
:
begin
CUARTll1
<=
1
'b
1
;
end
CUARTO0ll
:
begin
CUARTll1
<=
1
'b
0
;
end
CUARTI0ll
:
begin
CUARTll1
<=
CUARTIO0l
[
CUARTlO0l
]
;
end
CUARTl0ll
:
begin
CUARTll1
<=
CUARTOl1
^
CUARTOI0l
;
end
CUARTO1ll
:
begin
CUARTll1
<=
1
'b
1
;
end
default
:
begin
CUARTll1
<=
1
'b
1
;
end
endcase
end
end
end
always
@
(
posedge
CUARTII
or
negedge
CUARTI1
)
begin
:
CUARTO00l
if
(
(
!
CUARTI1
)
||
(
!
CUARTl1
)
)
begin
CUARTOI0l
<=
1
'b
0
;
end
else
begin
if
(
CUARTll
&
CUARTlI1
)
begin
if
(
CUARTl1ll
==
CUARTI0ll
)
begin
CUARTOI0l
<=
CUARTOI0l
^
CUARTIO0l
[
CUARTlO0l
]
;
end
else
begin
CUARTOI0l
<=
CUARTOI0l
;
end
end
if
(
CUARTl1ll
==
CUARTO1ll
)
begin
CUARTOI0l
<=
1
'b
0
;
end
end
end
assign
CUARTIl1
=
CUARTOO0l
;
endmodule
