Toggle main menu visibility
What is SpeakHDL?
Terminology and Definitions
API Reference
Command Reference
Directory Structure
Simulation and Synthesis
Examples
Sandbox
Login
Signup
uart_loopback_example
Config File:
1
[
global
]
2
clk_pin
=
E3
3
reset_pin
=
U9
4
sys_clk_freq
=
100E6
5
reset_polarity
=
'
1
'
6
data_width
=
32
7
control_width
=
32
8
default_shared_register_polarity
=
'
0
'
9
default_signal_polarity
=
'
0
'
10
default_voltage_standard
=
3
.
3
V
11
pinout_filename
=
PINOUT
.
xdc
12
command_help
=
True
13
voice_enabled
=
False
14
default_time_units
=
ms
15
alias
srr
is
state_reg_rec
(
0
)
;
16
alias
state_reg
:
integer
is
state_reg_rec
(
0
)
.
state_reg
;
17
18
[
uart_rx
]
19
input
rxd
=
C4
20
constant
baud_rate
:
integer
:=
us
(
104
)
;
21
constant
half_baud_rate
:
integer
:=
us
(
52
)
;
22
23
[
uart_tx
]
24
output
txd
=
D4
25
alias
byte_ready
is
state_reg_rec
(
0
)
.
shared_reg
(
8
)
;
26
constant
baud_rate
:
integer
:=
us
(
104
)
;
27
VHDL Code (Uart Receiver):
1
library
ieee
;
-- version: beta
2
use
ieee.std_logic_1164.
all
;
-- lic: non-commercial
3
use
ieee.numeric_std.
all
;
-- user: local
4
use
ieee.std_logic_unsigned.
all
;
5
use
work.user_defs_pkg.
all
;
6
use
work.speakhdl_api_pkg.
all
;
7
8
--==============================================================================================
9
entity
uart_rx
is
10
11
generic
(
this_module
:
integer
:=
-
1
)
;
12
port
(
13
clk
:
in
std_logic
;
-- clock: E3, 100MHz
14
reset
:
in
std_logic
;
-- reset: U9, '1'
15
sm_input
:
in
std_logic_vector
(
0
downto
0
)
;
-- num inputs: 1
16
sm_output
:
out
std_logic_vector
(
-
1
downto
0
)
;
-- num outputs: 0
17
sm_io
:
inout
std_logic_vector
(
-
1
downto
0
)
;
-- num io: 0
18
next_state_rec
:
out
nsr_array
(
0
to
0
)
;
19
state_reg_rec
:
in
srr_array
(
0
to
0
)
-- num rsc: 1
20
)
;
21
22
end
entity
uart_rx;
23
--==============================================================================================
24
25
architecture
arch
of
uart_rx
is
26
27
alias
rxd
:
std_logic
is
sm_input
(
0
)
;
-- input C4
28
alias
srr
is
state_reg_rec
(
0
)
;
-- alias (global)
29
alias
state_reg
:
integer
is
state_reg_rec
(
0
)
.
state_reg
;
-- alias (global)
30
constant
st_init
:
integer
:=
0
;
31
constant
st_start
:
integer
:=
1
;
32
constant
st_shift
:
integer
:=
2
;
33
constant
st_done
:
integer
:=
3
;
34
constant
baud_rate
:
integer
:=
us
(
104
)
;
-- const (local)
35
constant
half_baud_rate
:
integer
:=
us
(
52
)
;
-- const (local)
36
37
begin
38
--==============================================================================================
39
-- units: ms, '1'
40
process
(state_reg_rec)
-- hotkey only
41
42
begin
43
44
--------------------------------------------------------------------------------------------
45
---------------------------sys_clk 100MHz active resource 0 state -1------------------------
46
--------------------------------------------------------------------------------------------
47
RESOURCE_SELECT
(
sys_clk
,
next_state_rec
,
state_reg_rec
)
;
48
--------------------------------------------------------------------------------------------
49
WRITE_SHARED_REGISTER
(
uart_tx
,
srr
.
counter
(
0
)
.
done
,
next_state_rec
,
state_reg_rec
,
8
)
;
50
CONFIGURE_COUNTER
(
0
,
1
,
no_trans
,
next_state_rec
,
state_reg_rec
,
srr
.
last_state
=
st_done
)
;
51
52
sm0
:
case
(
state_reg
)
is
53
when
st_init
=
>
54
WRITE_SHARED_REGISTER
(
uart_tx
,
srr
.
left_shift_reg
(
7
downto
0
)
,
next_state_rec
,
55
state_reg_rec
)
;
56
CONDITIONAL_TRANSITION
(
0
,
rxd
=
'
0
'
,
st_start
,
next_state_rec
,
state_reg_rec
)
;
57
when
st_start
=
>
58
TRANSITION
(
st_shift
,
half_baud_rate
,
next_state_rec
,
state_reg_rec
)
;
59
when
st_shift
=
>
60
SHIFT_DATA_LEFT
(
rxd
,
1
,
next_state_rec
,
state_reg_rec
,
srr
.
state_timer
.
done
)
;
61
TRANSITION
(
st_done
,
baud_rate
,
next_state_rec
,
state_reg_rec
,
8
)
;
62
when
st_done
=
>
63
TRANSITION
(
st_init
,
baud_rate
,
next_state_rec
,
state_reg_rec
)
;
64
when
others
=
>
65
end
case
;
66
67
end
process
;
68
69
end
architecture
arch;
70
--==============================================================================================
VHDL Code (Uart Transmitter):
1
library
ieee
;
-- version: beta
2
use
ieee.std_logic_1164.
all
;
-- lic: non-commercial
3
use
ieee.numeric_std.
all
;
-- user: local
4
use
ieee.std_logic_unsigned.
all
;
5
use
work.user_defs_pkg.
all
;
6
use
work.speakhdl_api_pkg.
all
;
7
8
--==============================================================================================
9
entity
uart_tx
is
10
11
generic
(
this_module
:
integer
:=
-
1
)
;
12
port
(
13
clk
:
in
std_logic
;
-- clock: E3, 100MHz
14
reset
:
in
std_logic
;
-- reset: U9, '1'
15
sm_input
:
in
std_logic_vector
(
-
1
downto
0
)
;
-- num inputs: 0
16
sm_output
:
out
std_logic_vector
(
0
downto
0
)
;
-- num outputs: 1
17
sm_io
:
inout
std_logic_vector
(
-
1
downto
0
)
;
-- num io: 0
18
next_state_rec
:
out
nsr_array
(
0
to
0
)
;
19
state_reg_rec
:
in
srr_array
(
0
to
0
)
-- num rsc: 1
20
)
;
21
22
end
entity
uart_tx;
23
--==============================================================================================
24
25
architecture
arch
of
uart_tx
is
26
27
alias
txd
:
std_logic
is
sm_output
(
0
)
;
-- output D4
28
alias
byte_ready
is
state_reg_rec
(
0
)
.
shared_reg
(
8
)
;
-- alias (local)
29
alias
srr
is
state_reg_rec
(
0
)
;
-- alias (global)
30
alias
state_reg
:
integer
is
state_reg_rec
(
0
)
.
state_reg
;
-- alias (global)
31
constant
st_init
:
integer
:=
0
;
32
constant
st_start
:
integer
:=
1
;
33
constant
st_shift
:
integer
:=
2
;
34
constant
st_stop
:
integer
:=
3
;
35
constant
baud_rate
:
integer
:=
us
(
104
)
;
-- const (local)
36
37
begin
38
--==============================================================================================
39
-- output signals
40
txd
<=
'
0
'
when
(
state_reg
=
st_start
)
else
41
srr
.
right_shift_reg
(
0
)
when
(
state_reg
=
st_shift
)
else
42
'
1
'
;
43
44
--==============================================================================================
45
-- units: ms, '1'
46
process
(state_reg_rec)
-- hotkey only
47
48
begin
49
50
--------------------------------------------------------------------------------------------
51
---------------------------sys_clk 100MHz active resource 0 state -1------------------------
52
--------------------------------------------------------------------------------------------
53
RESOURCE_SELECT
(
sys_clk
,
next_state_rec
,
state_reg_rec
)
;
54
--------------------------------------------------------------------------------------------
55
READ_SHARED_REGISTER
(
this_module
,
next_state_rec
,
state_reg_rec
)
;
56
57
sm0
:
case
(
state_reg
)
is
58
when
st_init
=
>
59
SHIFT_DATA_RIGHT
(
srr
.
shared_reg
(
7
downto
0
)
,
reverse_bits
,
next_state_rec
,
state_reg_rec
)
;
60
CONDITIONAL_TRANSITION
(
0
,
byte_ready
=
'
1
'
,
st_start
,
next_state_rec
,
state_reg_rec
)
;
61
when
st_start
=
>
62
TRANSITION
(
st_shift
,
baud_rate
,
next_state_rec
,
state_reg_rec
)
;
63
when
st_shift
=
>
64
SHIFT_DATA_RIGHT
(
srr
.
shared_reg
(
7
downto
0
)
,
1
,
next_state_rec
,
state_reg_rec
,
65
srr
.
state_timer
.
done
)
;
66
TRANSITION
(
st_stop
,
baud_rate
,
next_state_rec
,
state_reg_rec
,
8
)
;
67
when
st_stop
=
>
68
TRANSITION
(
st_init
,
baud_rate
,
next_state_rec
,
state_reg_rec
)
;
69
when
others
=
>
70
end
case
;
71
72
end
process
;
73
74
end
architecture
arch;
75
--==============================================================================================
See also
led_blink_example
sseg_display_example
vga_controller_example