📄 tx_async.v
字号:
// Copyright 2007 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.
// Rev: 3.0 21FEB07 HJ : v3.0 CoreConsole Release
`timescale 1ns/1ns
module
Tx_async
(
clk
,
xmit_pulse
,
reset_n
,
rst_tx_empty
,
tx_hold_reg
,
tx_dout_reg
,
fifo_empty
,
fifo_full
,
bit8
,
parity_en
,
odd_n_even
,
txrdy
,
tx
,
fifo_read_tx
)
;
parameter
TX_FIFO
=
0
;
input
clk
;
input
xmit_pulse
;
input
reset_n
;
input
rst_tx_empty
;
input
[
7
:
0
]
tx_hold_reg
;
input
[
7
:
0
]
tx_dout_reg
;
input
fifo_empty
;
input
fifo_full
;
input
bit8
;
input
parity_en
;
input
odd_n_even
;
output
txrdy
;
wire
txrdy
;
output
tx
;
output
fifo_read_tx
;
reg
tx
;
parameter
CUARTlIOI
=
0
;
parameter
CUARTOlOI
=
1
;
parameter
CUARTIlOI
=
2
;
parameter
CUARTllOI
=
3
;
parameter
CUARTO0OI
=
4
;
parameter
CUARTI0OI
=
5
;
parameter
CUARTl0OI
=
6
;
integer
CUARTO1OI
;
reg
CUARTI1OI
;
reg
[
7
:
0
]
CUARTl1OI
;
reg
[
3
:
0
]
CUARTOOII
;
reg
CUARTIOII
;
reg
fifo_read_tx
;
reg
CUARTlOII
;
reg
CUARTOIII
;
wire
CUARTIIII
;
wire
fifo_write
;
always
@
(
posedge
clk
or
negedge
reset_n
)
begin
:
CUARTlIII
if
(
!
reset_n
)
begin
CUARTI1OI
<=
1
'b
1
;
end
else
begin
if
(
TX_FIFO
==
1
'b
0
)
begin
if
(
xmit_pulse
)
begin
if
(
CUARTO1OI
==
CUARTOlOI
)
begin
CUARTI1OI
<=
1
'b
1
;
end
end
if
(
rst_tx_empty
)
begin
CUARTI1OI
<=
1
'b
0
;
end
end
else
begin
CUARTI1OI
<=
!
fifo_full
;
end
end
end
always
@
(
posedge
clk
or
negedge
reset_n
)
begin
:
CUARTOlII
if
(
!
reset_n
)
begin
CUARTO1OI
<=
CUARTlIOI
;
CUARTl1OI
<=
'b
0
;
CUARTlOII
<=
1
'b
1
;
end
else
begin
if
(
xmit_pulse
)
begin
CUARTlOII
<=
1
'b
1
;
case
(
CUARTO1OI
)
CUARTlIOI
:
begin
if
(
TX_FIFO
==
1
'b
0
)
begin
if
(
!
CUARTI1OI
)
begin
CUARTO1OI
<=
CUARTOlOI
;
end
else
begin
CUARTO1OI
<=
CUARTlIOI
;
end
end
else
begin
if
(
fifo_empty
==
1
'b
0
)
begin
CUARTlOII
<=
1
'b
0
;
CUARTO1OI
<=
CUARTl0OI
;
end
else
begin
CUARTO1OI
<=
CUARTlIOI
;
CUARTlOII
<=
1
'b
1
;
end
end
end
CUARTOlOI
:
begin
if
(
TX_FIFO
==
1
'b
0
)
begin
CUARTl1OI
<=
tx_hold_reg
;
end
else
begin
CUARTl1OI
<=
tx_dout_reg
;
end
CUARTO1OI
<=
CUARTIlOI
;
end
CUARTIlOI
:
begin
CUARTO1OI
<=
CUARTllOI
;
end
CUARTllOI
:
begin
if
(
bit8
)
begin
if
(
CUARTOOII
==
4
'b
0111
)
begin
if
(
parity_en
)
begin
CUARTO1OI
<=
CUARTO0OI
;
end
else
begin
CUARTO1OI
<=
CUARTI0OI
;
end
end
else
begin
CUARTO1OI
<=
CUARTllOI
;
end
end
else
begin
if
(
CUARTOOII
==
4
'b
0110
)
begin
if
(
parity_en
)
begin
CUARTO1OI
<=
CUARTO0OI
;
end
else
begin
CUARTO1OI
<=
CUARTI0OI
;
end
end
else
begin
CUARTO1OI
<=
CUARTllOI
;
end
end
end
CUARTO0OI
:
begin
CUARTO1OI
<=
CUARTI0OI
;
end
CUARTI0OI
:
begin
CUARTO1OI
<=
CUARTlIOI
;
end
CUARTl0OI
:
begin
CUARTO1OI
<=
CUARTOlOI
;
end
default
:
begin
CUARTO1OI
<=
CUARTlIOI
;
end
endcase
end
end
end
always
@
(
posedge
clk
or
negedge
reset_n
)
begin
:
CUARTIlII
if
(
!
reset_n
)
begin
fifo_read_tx
<=
1
'b
1
;
CUARTOIII
<=
1
'b
1
;
end
else
begin
fifo_read_tx
<=
1
'b
1
;
CUARTOIII
<=
CUARTlOII
;
if
(
CUARTIIII
==
1
'b
0
)
begin
fifo_read_tx
<=
1
'b
0
;
end
end
end
assign
CUARTIIII
=
(
!
CUARTOIII
|
CUARTlOII
)
;
always
@
(
posedge
clk
or
negedge
reset_n
)
begin
:
CUARTllII
if
(
!
reset_n
)
begin
CUARTOOII
<=
4
'b
0000
;
end
else
begin
if
(
xmit_pulse
)
begin
if
(
CUARTO1OI
!=
CUARTllOI
)
begin
CUARTOOII
<=
4
'b
0000
;
end
else
begin
CUARTOOII
<=
CUARTOOII
+
1
'b
1
;
end
end
end
end
always
@
(
posedge
clk
or
negedge
reset_n
)
begin
:
CUARTO0II
if
(
!
reset_n
)
begin
tx
<=
1
'b
1
;
end
else
begin
if
(
xmit_pulse
)
begin
case
(
CUARTO1OI
)
CUARTlIOI
:
begin
tx
<=
1
'b
1
;
end
CUARTOlOI
:
begin
tx
<=
1
'b
1
;
end
CUARTIlOI
:
begin
tx
<=
1
'b
0
;
end
CUARTllOI
:
begin
tx
<=
CUARTl1OI
[
CUARTOOII
]
;
end
CUARTO0OI
:
begin
tx
<=
odd_n_even
^
CUARTIOII
;
end
CUARTI0OI
:
begin
tx
<=
1
'b
1
;
end
default
:
begin
tx
<=
1
'b
1
;
end
endcase
end
end
end
always
@
(
posedge
clk
or
negedge
reset_n
)
begin
:
CUARTI0II
if
(
!
reset_n
)
begin
CUARTIOII
<=
1
'b
0
;
end
else
begin
if
(
xmit_pulse
&
parity_en
)
begin
if
(
CUARTO1OI
==
CUARTllOI
)
begin
CUARTIOII
<=
CUARTIOII
^
CUARTl1OI
[
CUARTOOII
]
;
end
else
begin
CUARTIOII
<=
CUARTIOII
;
end
end
if
(
CUARTO1OI
==
CUARTI0OI
)
begin
CUARTIOII
<=
1
'b
0
;
end
end
end
assign
txrdy
=
CUARTI1OI
;
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -