// REVISION    : $Revision: 1.12 $
//         Mentor Graphics Corporation Proprietary and Confidential
//         Copyright Mentor Graphics Corporation and Licensors 2004
`include "include.v"
module
CoreTSE_M2S090_CORETSE_AHB_0_DMARX
#
(
parameter
FAMILY
=
19
,
parameter
CORETSEO
=
0
)
(
CORETSEoO00I
,
HREADY
,
HRESP
,
HRDATA
,
CORETSEi1O0I
,
HCLK
,
CORETSEiO00I
,
HTRANS
,
HADDR
,
HWRITE
,
HWDATA
,
CORETSEi0l0I
,
CORETSEOol0I
,
CORETSEo1l0I
,
CORETSEO0l0I
,
CORETSEOiI0I
,
CORETSEIiI0I
,
CORETSEIO00I
,
CORETSEIIl0I
,
CORETSEI1l0I
,
CORETSEoII0I
,
CORETSEI0I0I
,
CORETSEo1I0I
,
CORETSEi1I0I
,
CORETSEOoI0I
,
CORETSEIoI0I
,
CORETSEloI0I
)
;
input
CORETSEoO00I
;
input
HREADY
;
input
[
1
:
0
]
HRESP
;
input
[
31
:
0
]
HRDATA
;
input
CORETSEi1O0I
;
input
HCLK
;
output
CORETSEiO00I
;
output
[
1
:
0
]
HTRANS
;
output
[
31
:
2
]
HADDR
;
output
HWRITE
;
output
[
31
:
0
]
HWDATA
;
output
CORETSEi0l0I
;
output
CORETSEOol0I
;
output
[
31
:
2
]
CORETSEo1l0I
;
output
[
7
:
0
]
CORETSEO0l0I
;
output
CORETSEIIl0I
;
input
CORETSEOiI0I
;
input
CORETSEIiI0I
;
input
CORETSEIO00I
;
input
[
31
:
2
]
CORETSEI1l0I
;
input
[
15
:
0
]
CORETSEoII0I
;
output
CORETSEI0I0I
;
input
CORETSEo1I0I
;
input
CORETSEi1I0I
;
input
CORETSEOoI0I
;
input
[
31
:
0
]
CORETSEIoI0I
;
input
[
1
:
0
]
CORETSEloI0I
;
`define CORETSEII00I  \
2 \
'b \
00
`define CORETSElI00I  \
2 \
'b \
01
`define CORETSEoI00I  \
2 \
'b \
11
`define CORETSEiI00I  \
2 \
'b \
10
`define CORETSEOl00I  \
1 \
'b \
0
`define CORETSEIl00I  \
1 \
'b \
1
`define CORETSEll00I  \
{ \
1 \
'b \
0 \
, \
`CORETSEIIOII \
}
`define CORETSEol00I  \
{ \
1 \
'b \
1 \
, \
`CORETSEIIOII \
}
`define CORETSEil00I  \
{ \
1 \
'b \
1 \
, \
`CORETSElIOII \
}
`define CORETSEO000I  \
{ \
1 \
'b \
1 \
, \
`CORETSEoIOII \
}
`define CORETSEI000I  \
{ \
1 \
'b \
1 \
, \
`CORETSEiIOII \
}
reg
[
7
:
0
]
CORETSEO0l0I
,
CORETSEl000I
;
reg
[
1
:
0
]
CORETSEo000I
,
CORETSEi000I
;
reg
CORETSEIIl0I
;
reg
CORETSEO100I
;
reg
CORETSEI100I
,
CORETSEOol0I
;
reg
[
31
:
2
]
CORETSEo1l0I
;
reg
[
1
:
0
]
CORETSEl100I
;
reg
[
31
:
2
]
CORETSEo100I
;
reg
CORETSEi100I
;
reg
[
31
:
2
]
CORETSEOo00I
;
wire
CORETSEIo00I
;
reg
[
31
:
2
]
CORETSElo00I
;
reg
[
15
:
0
]
CORETSEoo00I
;
reg
[
15
:
0
]
CORETSEio00I
;
reg
CORETSEOi00I
;
reg
CORETSEIi00I
;
reg
CORETSEli00I
;
reg
[
31
:
0
]
CORETSEoi00I
;
reg
[
2
:
0
]
CORETSEii00I
,
CORETSEOO10I
;
reg
CORETSEIO10I
;
reg
CORETSElO10I
;
wire
CORETSEoO10I
;
reg
HWRITE
;
reg
[
31
:
0
]
HWDATA
;
reg
[
31
:
2
]
HADDR
,
CORETSEiO10I
;
reg
[
15
:
0
]
CORETSEOI10I
,
CORETSEII10I
;
wire
CORETSElo1
;
wire
CORETSEoo1
;
assign
CORETSElo1
=
(
FAMILY
==
25
)
?
1
'b
0
:
CORETSEi1O0I
;
assign
CORETSEoo1
=
(
FAMILY
==
25
)
?
CORETSEi1O0I
:
1
'b
0
;
assign
CORETSEi0l0I
=
CORETSEoO10I
;
assign
CORETSEIo00I
=
CORETSEIIl0I
;
always
@
(
posedge
HCLK
or
negedge
CORETSElo1
)
begin
:
CORETSElI10I
if
(
!
(
CORETSElo1
||
CORETSEoo1
)
)
begin
CORETSEIIl0I
<=
0
;
CORETSEO0l0I
<=
0
;
end
else
begin
CORETSEIIl0I
<=
(
CORETSEIIl0I
||
CORETSEOiI0I
)
&&
CORETSEO100I
&&
!
CORETSEIiI0I
;
CORETSEO0l0I
<=
CORETSEl000I
-
{
7
'h
00
,
(
CORETSEIO00I
&&
|
CORETSEO0l0I
)
}
;
end
end
always
@
(
posedge
HCLK
or
negedge
CORETSElo1
)
begin
:
CORETSEoI10I
if
(
!
(
CORETSElo1
||
CORETSEoo1
)
)
begin
CORETSEo000I
<=
`CORETSEII00I
;
CORETSEOo00I
<=
0
;
CORETSEi100I
<=
0
;
CORETSEo100I
<=
0
;
CORETSEl100I
<=
0
;
end
else
begin
CORETSEo000I
<=
CORETSEi000I
;
if
(
HREADY
)
if
(
CORETSEo000I
==
`CORETSElI00I
)
CORETSEl100I
<=
CORETSEOI10I
+
1
;
else
CORETSEl100I
<=
0
;
case
(
CORETSEl100I
)
2
'b
11
:
CORETSEOo00I
<=
HRDATA
[
31
:
2
]
;
2
'b
10
:
begin
CORETSEi100I
<=
HRDATA
[
31
]
;
end
2
'b
01
:
CORETSEo100I
<=
HRDATA
[
31
:
2
]
;
endcase
end
end
always
@
(
*
)
begin
:
CORETSEiI10I
CORETSEi000I
=
CORETSEo000I
;
CORETSEO100I
=
1
;
CORETSEOol0I
=
0
;
CORETSEl000I
=
CORETSEO0l0I
;
CORETSEo1l0I
=
CORETSEI1l0I
;
if
(
CORETSEoO10I
)
begin
CORETSEi000I
=
`CORETSEII00I
;
CORETSEO100I
=
0
;
end
else
case
(
CORETSEo000I
)
`CORETSEII00I
:
begin
if
(
CORETSEIo00I
&&
CORETSEi1I0I
&&
CORETSEo1I0I
)
CORETSEi000I
=
`CORETSElI00I
;
else
CORETSEi000I
=
`CORETSEII00I
;
end
`CORETSElI00I
:
begin
if
(
CORETSElO10I
)
if
(
(
CORETSEl100I
==
2
'b
10
)
?
HRDATA
[
31
]
:
CORETSEi100I
)
CORETSEi000I
=
`CORETSEoI00I
;
else
begin
CORETSEO100I
=
0
;
CORETSEOol0I
=
1
;
CORETSEi000I
=
`CORETSEII00I
;
end
end
`CORETSEoI00I
:
begin
if
(
CORETSElO10I
)
CORETSEi000I
=
`CORETSEiI00I
;
end
`CORETSEiI00I
:
begin
if
(
CORETSElO10I
)
begin
CORETSEl000I
=
CORETSEO0l0I
+
1
;
if
(
CORETSEIo00I
&&
CORETSEi1I0I
&&
CORETSEo1I0I
)
CORETSEi000I
=
`CORETSElI00I
;
else
CORETSEi000I
=
`CORETSEII00I
;
end
end
endcase
if
(
CORETSEoO00I
&&
HREADY
&&
CORETSEi000I
==
`CORETSEiI00I
)
CORETSEo1l0I
=
CORETSEo100I
;
end
always
@
(
*
)
begin
:
CORETSEOl10I
case
(
CORETSEi000I
)
`CORETSElI00I
:
begin
CORETSEio00I
=
16
'h
0002
;
CORETSEli00I
=
0
;
CORETSEOi00I
=
1
;
CORETSElo00I
=
CORETSEI1l0I
;
end
`CORETSEoI00I
:
begin
CORETSEli00I
=
1
;
CORETSEio00I
=
0
;
CORETSEOi00I
=
CORETSEo1I0I
;
CORETSElo00I
=
CORETSEOo00I
;
end
`CORETSEiI00I
:
begin
CORETSEio00I
=
{
16
{
CORETSElO10I
}
}
&
(
CORETSEOI10I
+
16
'h
0004
-
{
14
'h
0000
,
(
CORETSEloI0I
&
{
2
{
CORETSEo1I0I
}
}
)
}
)
|
{
16
{
~
CORETSElO10I
}
}
&
CORETSEOI10I
;
CORETSEli00I
=
1
;
CORETSEOi00I
=
1
;
CORETSElo00I
=
CORETSEI1l0I
+
1
;
end
default
:
begin
CORETSEio00I
=
0
;
CORETSEli00I
=
0
;
CORETSEOi00I
=
0
;
CORETSElo00I
=
0
;
end
endcase
case
(
CORETSEo000I
)
`CORETSElI00I
:
begin
CORETSEoo00I
=
16
'h
FFFF
;
CORETSEIi00I
=
~|
CORETSEOI10I
;
CORETSEoi00I
=
0
;
end
`CORETSEoI00I
:
begin
CORETSEoo00I
=
4
;
CORETSEIi00I
=
(
CORETSEOoI0I
&&
CORETSEo1I0I
)
||
!
CORETSEo1I0I
||
CORETSEOI10I
>
CORETSEoII0I
;
CORETSEoi00I
=
(
CORETSEIoI0I
&
{
32
{
CORETSEo1I0I
}
}
)
;
end
`CORETSEiI00I
:
begin
CORETSEoo00I
=
0
;
CORETSEIi00I
=
1
;
CORETSEoi00I
[
31
]
=
0
;
CORETSEoi00I
[
30
:
0
]
=
{
{
15
{
1
'b
0
}
}
,
CORETSEOI10I
}
;
end
default
:
begin
CORETSEoo00I
=
0
;
CORETSEIi00I
=
1
;
CORETSEoi00I
=
0
;
end
endcase
end
always
@
(
posedge
HCLK
or
negedge
CORETSElo1
)
begin
:
CORETSEIl10I
if
(
!
(
CORETSElo1
||
CORETSEoo1
)
)
begin
CORETSEii00I
<=
`CORETSEll00I
;
CORETSEIO10I
<=
0
;
HADDR
<=
0
;
HWRITE
<=
0
;
HWDATA
<=
0
;
CORETSEOI10I
<=
0
;
end
else
begin
CORETSEii00I
<=
CORETSEOO10I
;
CORETSEIO10I
<=
HREADY
?
CORETSEii00I
[
1
]
:
CORETSEIO10I
;
HWDATA
<=
HREADY
?
CORETSEoi00I
:
HWDATA
;
HWRITE
<=
HREADY
?
CORETSEli00I
:
HWRITE
;
HADDR
<=
CORETSEiO10I
;
CORETSEOI10I
<=
CORETSEII10I
;
end
end
assign
CORETSEoO10I
=
CORETSEIO10I
&&
HREADY
&&
(
HRESP
!=
`CORETSEOlOII
)
;
always
@
(
HREADY
or
CORETSEii00I
or
CORETSEoO00I
or
HADDR
or
CORETSEOi00I
or
CORETSEIi00I
or
CORETSElo00I
or
CORETSEio00I
or
CORETSEoo00I
or
CORETSEOI10I
)
begin
:
CORETSEll10I
CORETSEOO10I
=
CORETSEii00I
;
CORETSEiO10I
=
HADDR
;
CORETSEII10I
=
CORETSEOI10I
;
CORETSElO10I
=
0
;
if
(
HREADY
)
case
(
CORETSEii00I
)
`CORETSEll00I
:
if
(
CORETSEOi00I
)
begin
CORETSEOO10I
=
CORETSEoO00I
?
`CORETSEO000I
:
`CORETSEol00I
;
CORETSEiO10I
=
CORETSElo00I
;
CORETSEII10I
=
CORETSEio00I
;
end
`CORETSEol00I
:
CORETSEOO10I
=
CORETSEoO00I
?
`CORETSEO000I
:
`CORETSEol00I
;
`CORETSEO000I
,
`CORETSEI000I
:
begin
CORETSEiO10I
=
HADDR
+
1
;
CORETSEII10I
=
CORETSEOI10I
+
CORETSEoo00I
;
if
(
CORETSEIi00I
)
begin
CORETSElO10I
=
1
;
if
(
CORETSEOi00I
&&
CORETSEoO00I
)
begin
CORETSEiO10I
=
CORETSElo00I
;
CORETSEII10I
=
CORETSEio00I
;
CORETSEOO10I
=
`CORETSEO000I
;
end
else
begin
CORETSEOO10I
=
`CORETSEll00I
;
CORETSEII10I
=
CORETSEio00I
;
end
end
else
if
(
!
CORETSEoO00I
)
CORETSEOO10I
=
`CORETSEol00I
;
else
if
(
~|
CORETSEiO10I
[
9
:
2
]
)
CORETSEOO10I
=
`CORETSEO000I
;
else
CORETSEOO10I
=
`CORETSEI000I
;
end
default
:
begin
CORETSEOO10I
=
`CORETSEll00I
;
end
endcase
end
assign
HTRANS
=
CORETSEii00I
[
1
:
0
]
;
assign
CORETSEiO00I
=
CORETSEii00I
[
2
]
;
assign
CORETSEI0I0I
=
CORETSEii00I
[
1
]
&&
HREADY
&&
(
CORETSEo000I
==
`CORETSEoI00I
)
;
endmodule
