Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
P
Platform-independent core collection
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
18
Issues
18
List
Board
Labels
Milestones
Merge Requests
5
Merge Requests
5
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Platform-independent core collection
Commits
fa8df2bb
Commit
fa8df2bb
authored
Sep 09, 2019
by
Dimitris Lampridis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Clean-up non-ASCII characters and fix line feeds and terminations in all affected files
parent
284373b7
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
1468 additions
and
1468 deletions
+1468
-1468
general-cores.in
doc/general-cores.in
+1
-1
axi4_pkg.vhd
modules/axi/axi4_pkg.vhd
+248
-248
gc_arbitrated_mux.vhd
modules/common/gc_arbitrated_mux.vhd
+3
-3
gc_async_signals_input_stage.vhd
modules/common/gc_async_signals_input_stage.vhd
+2
-2
gc_bicolor_led_ctrl.vhd
modules/common/gc_bicolor_led_ctrl.vhd
+2
-2
gc_extend_pulse.vhd
modules/common/gc_extend_pulse.vhd
+2
-2
gc_reset.vhd
modules/common/gc_reset.vhd
+2
-2
gc_serial_dac.vhd
modules/common/gc_serial_dac.vhd
+3
-3
generic_simple_dpram.vhd
modules/genrams/xilinx/generic_simple_dpram.vhd
+2
-2
wb_axi4lite_bridge.vhd
modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd
+125
-125
xwb_axi4lite_bridge.vhd
modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd
+191
-191
crt0.S
modules/wishbone/wb_irq/msidemo/crt0.S
+240
-240
jtag_tap.v
modules/wishbone/wb_lm32/platform/kintex7/jtag_tap.v
+45
-45
lm32_multiplier.v
modules/wishbone/wb_lm32/platform/kintex7/lm32_multiplier.v
+120
-120
simple_pwm_wb.wb
modules/wishbone/wb_simple_pwm/simple_pwm_wb.wb
+1
-1
Manifest.py
modules/wishbone/wb_simple_timer/Manifest.py
+1
-1
uart_async_rx.vhd
modules/wishbone/wb_uart/uart_async_rx.vhd
+229
-229
wbgen2_dpssram.vhd
modules/wishbone/wbgen2/wbgen2_dpssram.vhd
+2
-2
wbgen2_eic.vhd
modules/wishbone/wbgen2/wbgen2_eic.vhd
+2
-2
wbgen2_fifo_async.vhd
modules/wishbone/wbgen2/wbgen2_fifo_async.vhd
+2
-2
wbgen2_fifo_sync.vhd
modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd
+2
-2
wb_xilinx_fpga_loader.vhd
...rm/xilinx/wb_xilinx_fpga_loader/wb_xilinx_fpga_loader.vhd
+1
-1
xloader_wb.wb
platform/xilinx/wb_xilinx_fpga_loader/xloader_wb.wb
+1
-1
xwb_xilinx_fpga_loader.vhd
...m/xilinx/wb_xilinx_fpga_loader/xwb_xilinx_fpga_loader.vhd
+1
-1
crt0.S
testbench/wishbone/lm32_testsys/sw/target/lm32/crt0.S
+240
-240
No files found.
doc/general-cores.in
View file @
fa8df2bb
...
...
@@ -42,7 +42,7 @@
@titlepage
@title @code
{
general-cores
}
VHDL library
@subtitle Programmer's manual
@author CERN BE-CO-HT / Tomasz W
ł
ostowski
@author CERN BE-CO-HT / Tomasz W
l
ostowski
@end titlepage
@headings single
...
...
modules/axi/axi4_pkg.vhd
View file @
fa8df2bb
-------------------------------------------------------------------------------
-- Title : AXI4Lite-to-WB bridge package
-- Project : General Cores
-------------------------------------------------------------------------------
-- File : axi4_pkg.vhd
-- Author : Tomasz Wlostowski
-- Company : CERN
-- Platform : FPGA-generics
-- Standard : VHDL '93
-------------------------------------------------------------------------------
-- Copyright (c) 2017 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
library
ieee
;
use
ieee
.
std_logic_1164
.
all
;
use
work
.
wishbone_pkg
.
all
;
package
axi4_pkg
is
-- AXI4-Full interface, master output ports, 32 bits
type
t_axi4_full_master_out_32
is
record
ARVALID
:
std_logic
;
AWVALID
:
std_logic
;
BREADY
:
std_logic
;
RREADY
:
std_logic
;
WLAST
:
std_logic
;
WVALID
:
std_logic
;
ARID
:
std_logic_vector
(
11
downto
0
);
AWID
:
std_logic_vector
(
11
downto
0
);
WID
:
std_logic_vector
(
11
downto
0
);
ARBURST
:
std_logic_vector
(
1
downto
0
);
ARLOCK
:
std_logic_vector
(
1
downto
0
);
ARSIZE
:
std_logic_vector
(
2
downto
0
);
AWBURST
:
std_logic_vector
(
1
downto
0
);
AWLOCK
:
std_logic_vector
(
1
downto
0
);
AWSIZE
:
std_logic_vector
(
2
downto
0
);
ARPROT
:
std_logic_vector
(
2
downto
0
);
AWPROT
:
std_logic_vector
(
2
downto
0
);
ARADDR
:
std_logic_vector
(
31
downto
0
);
AWADDR
:
std_logic_vector
(
31
downto
0
);
WDATA
:
std_logic_vector
(
31
downto
0
);
ARCACHE
:
std_logic_vector
(
3
downto
0
);
ARLEN
:
std_logic_vector
(
3
downto
0
);
ARQOS
:
std_logic_vector
(
3
downto
0
);
AWCACHE
:
std_logic_vector
(
3
downto
0
);
AWLEN
:
std_logic_vector
(
3
downto
0
);
AWQOS
:
std_logic_vector
(
3
downto
0
);
WSTRB
:
std_logic_vector
(
3
downto
0
);
end
record
;
-- AXI4-Full interface, master input ports, 32 bits
type
t_axi4_full_master_in_32
is
record
ARREADY
:
std_logic
;
AWREADY
:
std_logic
;
BVALID
:
std_logic
;
RLAST
:
std_logic
;
RVALID
:
std_logic
;
WREADY
:
std_logic
;
BID
:
std_logic_vector
(
11
downto
0
);
RID
:
std_logic_vector
(
11
downto
0
);
BRESP
:
std_logic_vector
(
1
downto
0
);
RRESP
:
std_logic_vector
(
1
downto
0
);
RDATA
:
std_logic_vector
(
31
downto
0
);
end
record
;
-- AXI4-Lite interface, master output ports, 32 bits
type
t_axi4_lite_master_out_32
is
record
ARVALID
:
std_logic
;
AWVALID
:
std_logic
;
BREADY
:
std_logic
;
RREADY
:
std_logic
;
WLAST
:
std_logic
;
WVALID
:
std_logic
;
ARADDR
:
std_logic_vector
(
31
downto
0
);
AWADDR
:
std_logic_vector
(
31
downto
0
);
WDATA
:
std_logic_vector
(
31
downto
0
);
WSTRB
:
std_logic_vector
(
3
downto
0
);
end
record
;
-- AXI4-Lite interface, master input ports, 32 bits
type
t_axi4_lite_master_in_32
is
record
ARREADY
:
std_logic
;
AWREADY
:
std_logic
;
BVALID
:
std_logic
;
RLAST
:
std_logic
;
RVALID
:
std_logic
;
WREADY
:
std_logic
;
BRESP
:
std_logic_vector
(
1
downto
0
);
RRESP
:
std_logic_vector
(
1
downto
0
);
RDATA
:
std_logic_vector
(
31
downto
0
);
end
record
;
constant
c_axi4_lite_default_master_in_32
:
t_axi4_lite_master_in_32
:
=
(
AWREADY
=>
'0'
,
ARREADY
=>
'0'
,
BVALID
=>
'0'
,
RLAST
=>
'0'
,
RVALID
=>
'0'
,
WREADY
=>
'0'
,
BRESP
=>
"00"
,
RRESP
=>
"00"
,
RDATA
=>
(
others
=>
'0'
)
);
constant
c_axi4_lite_default_master_out_32
:
t_axi4_lite_master_out_32
:
=
(
ARVALID
=>
'0'
,
AWVALID
=>
'0'
,
BREADY
=>
'0'
,
RREADY
=>
'0'
,
WLAST
=>
'0'
,
WVALID
=>
'0'
,
ARADDR
=>
(
others
=>
'0'
),
AWADDR
=>
(
others
=>
'0'
),
WDATA
=>
(
others
=>
'0'
),
WSTRB
=>
(
others
=>
'0'
)
);
subtype
t_axi4_lite_slave_in_32
is
t_axi4_lite_master_out_32
;
subtype
t_axi4_lite_slave_out_32
is
t_axi4_lite_master_in_32
;
constant
c_AXI4_RESP_OKAY
:
std_logic_vector
(
1
downto
0
)
:
=
"00"
;
constant
c_AXI4_RESP_EXOKAY
:
std_logic_vector
(
1
downto
0
)
:
=
"01"
;
constant
c_AXI4_RESP_SLVERR
:
std_logic_vector
(
1
downto
0
)
:
=
"10"
;
constant
c_AXI4_RESP_DECERR
:
std_logic_vector
(
1
downto
0
)
:
=
"11"
;
function
f_axi4_full_to_lite
(
f
:
t_axi4_full_master_out_32
)
return
t_axi4_lite_master_out_32
;
function
f_axi4_lite_to_full
(
l
:
t_axi4_lite_master_in_32
)
return
t_axi4_full_master_in_32
;
component
xwb_axi4lite_bridge
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
axi4_slave_i
:
in
t_axi4_lite_slave_in_32
;
axi4_slave_o
:
out
t_axi4_lite_slave_out_32
;
wb_master_o
:
out
t_wishbone_master_out
;
wb_master_i
:
in
t_wishbone_master_in
);
end
component
xwb_axi4lite_bridge
;
component
wb_axi4lite_bridge
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
ARVALID
:
in
std_logic
;
AWVALID
:
in
std_logic
;
BREADY
:
in
std_logic
;
RREADY
:
in
std_logic
;
WLAST
:
in
std_logic
;
WVALID
:
in
std_logic
;
ARADDR
:
in
std_logic_vector
(
31
downto
0
);
AWADDR
:
in
std_logic_vector
(
31
downto
0
);
WDATA
:
in
std_logic_vector
(
31
downto
0
);
WSTRB
:
in
std_logic_vector
(
3
downto
0
);
ARREADY
:
out
std_logic
;
AWREADY
:
out
std_logic
;
BVALID
:
out
std_logic
;
RLAST
:
out
std_logic
;
RVALID
:
out
std_logic
;
WREADY
:
out
std_logic
;
BRESP
:
out
std_logic_vector
(
1
downto
0
);
RRESP
:
out
std_logic_vector
(
1
downto
0
);
RDATA
:
out
std_logic_vector
(
31
downto
0
);
wb_adr
:
out
std_logic_vector
(
c_wishbone_address_width
-1
downto
0
);
wb_dat_m2s
:
out
std_logic_vector
(
c_wishbone_data_width
-1
downto
0
);
wb_sel
:
out
std_logic_vector
(
c_wishbone_data_width
/
8-1
downto
0
);
wb_cyc
:
out
std_logic
;
wb_stb
:
out
std_logic
;
wb_we
:
out
std_logic
;
wb_dat_s2m
:
in
std_logic_vector
(
c_wishbone_data_width
-1
downto
0
);
wb_err
:
in
std_logic
:
=
'0'
;
wb_rty
:
in
std_logic
:
=
'0'
;
wb_ack
:
in
std_logic
;
wb_stall
:
in
std_logic
);
end
component
;
end
package
;
package
body
axi4_pkg
is
function
f_axi4_full_to_lite
(
f
:
t_axi4_full_master_out_32
)
return
t_axi4_lite_master_out_32
is
variable
l
:
t_axi4_lite_master_out_32
;
begin
l
.
ARVALID
:
=
f
.
ARVALID
;
l
.
AWVALID
:
=
f
.
AWVALID
;
l
.
BREADY
:
=
f
.
BREADY
;
l
.
RREADY
:
=
f
.
RREADY
;
l
.
WLAST
:
=
f
.
WLAST
;
l
.
WVALID
:
=
f
.
WVALID
;
l
.
ARADDR
:
=
f
.
ARADDR
;
l
.
AWADDR
:
=
f
.
AWADDR
;
l
.
WDATA
:
=
f
.
WDATA
;
l
.
WSTRB
:
=
f
.
WSTRB
;
return
l
;
end
f_axi4_full_to_lite
;
function
f_axi4_lite_to_full
(
l
:
t_axi4_lite_master_in_32
)
return
t_axi4_full_master_in_32
is
variable
f
:
t_axi4_full_master_in_32
;
begin
f
.
ARREADY
:
=
l
.
ARREADY
;
f
.
AWREADY
:
=
l
.
AWREADY
;
f
.
BVALID
:
=
l
.
BVALID
;
f
.
RLAST
:
=
l
.
RLAST
;
f
.
RVALID
:
=
l
.
RVALID
;
f
.
WREADY
:
=
l
.
WREADY
;
f
.
BID
:
=
(
others
=>
'0'
);
f
.
RID
:
=
(
others
=>
'0'
);
f
.
BRESP
:
=
l
.
BRESP
;
f
.
RRESP
:
=
l
.
RRESP
;
f
.
RDATA
:
=
l
.
RDATA
;
return
f
;
end
f_axi4_lite_to_full
;
end
package
body
;
-------------------------------------------------------------------------------
-- Title : AXI4Lite-to-WB bridge package
-- Project : General Cores
-------------------------------------------------------------------------------
-- File : axi4_pkg.vhd
-- Author : Tomasz Wlostowski
-- Company : CERN
-- Platform : FPGA-generics
-- Standard : VHDL '93
-------------------------------------------------------------------------------
-- Copyright (c) 2017 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
"License") (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
library
ieee
;
use
ieee
.
std_logic_1164
.
all
;
use
work
.
wishbone_pkg
.
all
;
package
axi4_pkg
is
-- AXI4-Full interface, master output ports, 32 bits
type
t_axi4_full_master_out_32
is
record
ARVALID
:
std_logic
;
AWVALID
:
std_logic
;
BREADY
:
std_logic
;
RREADY
:
std_logic
;
WLAST
:
std_logic
;
WVALID
:
std_logic
;
ARID
:
std_logic_vector
(
11
downto
0
);
AWID
:
std_logic_vector
(
11
downto
0
);
WID
:
std_logic_vector
(
11
downto
0
);
ARBURST
:
std_logic_vector
(
1
downto
0
);
ARLOCK
:
std_logic_vector
(
1
downto
0
);
ARSIZE
:
std_logic_vector
(
2
downto
0
);
AWBURST
:
std_logic_vector
(
1
downto
0
);
AWLOCK
:
std_logic_vector
(
1
downto
0
);
AWSIZE
:
std_logic_vector
(
2
downto
0
);
ARPROT
:
std_logic_vector
(
2
downto
0
);
AWPROT
:
std_logic_vector
(
2
downto
0
);
ARADDR
:
std_logic_vector
(
31
downto
0
);
AWADDR
:
std_logic_vector
(
31
downto
0
);
WDATA
:
std_logic_vector
(
31
downto
0
);
ARCACHE
:
std_logic_vector
(
3
downto
0
);
ARLEN
:
std_logic_vector
(
3
downto
0
);
ARQOS
:
std_logic_vector
(
3
downto
0
);
AWCACHE
:
std_logic_vector
(
3
downto
0
);
AWLEN
:
std_logic_vector
(
3
downto
0
);
AWQOS
:
std_logic_vector
(
3
downto
0
);
WSTRB
:
std_logic_vector
(
3
downto
0
);
end
record
;
-- AXI4-Full interface, master input ports, 32 bits
type
t_axi4_full_master_in_32
is
record
ARREADY
:
std_logic
;
AWREADY
:
std_logic
;
BVALID
:
std_logic
;
RLAST
:
std_logic
;
RVALID
:
std_logic
;
WREADY
:
std_logic
;
BID
:
std_logic_vector
(
11
downto
0
);
RID
:
std_logic_vector
(
11
downto
0
);
BRESP
:
std_logic_vector
(
1
downto
0
);
RRESP
:
std_logic_vector
(
1
downto
0
);
RDATA
:
std_logic_vector
(
31
downto
0
);
end
record
;
-- AXI4-Lite interface, master output ports, 32 bits
type
t_axi4_lite_master_out_32
is
record
ARVALID
:
std_logic
;
AWVALID
:
std_logic
;
BREADY
:
std_logic
;
RREADY
:
std_logic
;
WLAST
:
std_logic
;
WVALID
:
std_logic
;
ARADDR
:
std_logic_vector
(
31
downto
0
);
AWADDR
:
std_logic_vector
(
31
downto
0
);
WDATA
:
std_logic_vector
(
31
downto
0
);
WSTRB
:
std_logic_vector
(
3
downto
0
);
end
record
;
-- AXI4-Lite interface, master input ports, 32 bits
type
t_axi4_lite_master_in_32
is
record
ARREADY
:
std_logic
;
AWREADY
:
std_logic
;
BVALID
:
std_logic
;
RLAST
:
std_logic
;
RVALID
:
std_logic
;
WREADY
:
std_logic
;
BRESP
:
std_logic_vector
(
1
downto
0
);
RRESP
:
std_logic_vector
(
1
downto
0
);
RDATA
:
std_logic_vector
(
31
downto
0
);
end
record
;
constant
c_axi4_lite_default_master_in_32
:
t_axi4_lite_master_in_32
:
=
(
AWREADY
=>
'0'
,
ARREADY
=>
'0'
,
BVALID
=>
'0'
,
RLAST
=>
'0'
,
RVALID
=>
'0'
,
WREADY
=>
'0'
,
BRESP
=>
"00"
,
RRESP
=>
"00"
,
RDATA
=>
(
others
=>
'0'
)
);
constant
c_axi4_lite_default_master_out_32
:
t_axi4_lite_master_out_32
:
=
(
ARVALID
=>
'0'
,
AWVALID
=>
'0'
,
BREADY
=>
'0'
,
RREADY
=>
'0'
,
WLAST
=>
'0'
,
WVALID
=>
'0'
,
ARADDR
=>
(
others
=>
'0'
),
AWADDR
=>
(
others
=>
'0'
),
WDATA
=>
(
others
=>
'0'
),
WSTRB
=>
(
others
=>
'0'
)
);
subtype
t_axi4_lite_slave_in_32
is
t_axi4_lite_master_out_32
;
subtype
t_axi4_lite_slave_out_32
is
t_axi4_lite_master_in_32
;
constant
c_AXI4_RESP_OKAY
:
std_logic_vector
(
1
downto
0
)
:
=
"00"
;
constant
c_AXI4_RESP_EXOKAY
:
std_logic_vector
(
1
downto
0
)
:
=
"01"
;
constant
c_AXI4_RESP_SLVERR
:
std_logic_vector
(
1
downto
0
)
:
=
"10"
;
constant
c_AXI4_RESP_DECERR
:
std_logic_vector
(
1
downto
0
)
:
=
"11"
;
function
f_axi4_full_to_lite
(
f
:
t_axi4_full_master_out_32
)
return
t_axi4_lite_master_out_32
;
function
f_axi4_lite_to_full
(
l
:
t_axi4_lite_master_in_32
)
return
t_axi4_full_master_in_32
;
component
xwb_axi4lite_bridge
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
axi4_slave_i
:
in
t_axi4_lite_slave_in_32
;
axi4_slave_o
:
out
t_axi4_lite_slave_out_32
;
wb_master_o
:
out
t_wishbone_master_out
;
wb_master_i
:
in
t_wishbone_master_in
);
end
component
xwb_axi4lite_bridge
;
component
wb_axi4lite_bridge
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
ARVALID
:
in
std_logic
;
AWVALID
:
in
std_logic
;
BREADY
:
in
std_logic
;
RREADY
:
in
std_logic
;
WLAST
:
in
std_logic
;
WVALID
:
in
std_logic
;
ARADDR
:
in
std_logic_vector
(
31
downto
0
);
AWADDR
:
in
std_logic_vector
(
31
downto
0
);
WDATA
:
in
std_logic_vector
(
31
downto
0
);
WSTRB
:
in
std_logic_vector
(
3
downto
0
);
ARREADY
:
out
std_logic
;
AWREADY
:
out
std_logic
;
BVALID
:
out
std_logic
;
RLAST
:
out
std_logic
;
RVALID
:
out
std_logic
;
WREADY
:
out
std_logic
;
BRESP
:
out
std_logic_vector
(
1
downto
0
);
RRESP
:
out
std_logic_vector
(
1
downto
0
);
RDATA
:
out
std_logic_vector
(
31
downto
0
);
wb_adr
:
out
std_logic_vector
(
c_wishbone_address_width
-1
downto
0
);
wb_dat_m2s
:
out
std_logic_vector
(
c_wishbone_data_width
-1
downto
0
);
wb_sel
:
out
std_logic_vector
(
c_wishbone_data_width
/
8-1
downto
0
);
wb_cyc
:
out
std_logic
;
wb_stb
:
out
std_logic
;
wb_we
:
out
std_logic
;
wb_dat_s2m
:
in
std_logic_vector
(
c_wishbone_data_width
-1
downto
0
);
wb_err
:
in
std_logic
:
=
'0'
;
wb_rty
:
in
std_logic
:
=
'0'
;
wb_ack
:
in
std_logic
;
wb_stall
:
in
std_logic
);
end
component
;
end
package
;
package
body
axi4_pkg
is
function
f_axi4_full_to_lite
(
f
:
t_axi4_full_master_out_32
)
return
t_axi4_lite_master_out_32
is
variable
l
:
t_axi4_lite_master_out_32
;
begin
l
.
ARVALID
:
=
f
.
ARVALID
;
l
.
AWVALID
:
=
f
.
AWVALID
;
l
.
BREADY
:
=
f
.
BREADY
;
l
.
RREADY
:
=
f
.
RREADY
;
l
.
WLAST
:
=
f
.
WLAST
;
l
.
WVALID
:
=
f
.
WVALID
;
l
.
ARADDR
:
=
f
.
ARADDR
;
l
.
AWADDR
:
=
f
.
AWADDR
;
l
.
WDATA
:
=
f
.
WDATA
;
l
.
WSTRB
:
=
f
.
WSTRB
;
return
l
;
end
f_axi4_full_to_lite
;
function
f_axi4_lite_to_full
(
l
:
t_axi4_lite_master_in_32
)
return
t_axi4_full_master_in_32
is
variable
f
:
t_axi4_full_master_in_32
;
begin
f
.
ARREADY
:
=
l
.
ARREADY
;
f
.
AWREADY
:
=
l
.
AWREADY
;
f
.
BVALID
:
=
l
.
BVALID
;
f
.
RLAST
:
=
l
.
RLAST
;
f
.
RVALID
:
=
l
.
RVALID
;
f
.
WREADY
:
=
l
.
WREADY
;
f
.
BID
:
=
(
others
=>
'0'
);
f
.
RID
:
=
(
others
=>
'0'
);
f
.
BRESP
:
=
l
.
BRESP
;
f
.
RRESP
:
=
l
.
RRESP
;
f
.
RDATA
:
=
l
.
RDATA
;
return
f
;
end
f_axi4_lite_to_full
;
end
package
body
;
modules/common/gc_arbitrated_mux.vhd
View file @
fa8df2bb
...
...
@@ -6,7 +6,7 @@
-- Author : Tomasz Wlostowski
-- Company : CERN
-- Created : 2011-08-24
-- Last update: 201
2-02-21
-- Last update: 201
9-09-09
-- Platform : FPGA-generic
-- Standard : VHDL'93
-------------------------------------------------------------------------------
...
...
@@ -17,13 +17,13 @@
-- Copyright (c) 2011 CERN / BE-CO-HT
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
--
...
...
modules/common/gc_async_signals_input_stage.vhd
View file @
fa8df2bb
...
...
@@ -34,13 +34,13 @@
-- Copyright (c) 2016 CERN/TE-MS-MM
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
--
...
...
modules/common/gc_bicolor_led_ctrl.vhd
View file @
fa8df2bb
...
...
@@ -49,13 +49,13 @@
-- Copyright (c) 2012 - 2017 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
--
...
...
modules/common/gc_extend_pulse.vhd
View file @
fa8df2bb
...
...
@@ -18,13 +18,13 @@
-- Copyright (c) 2009-2011 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
--
...
...
modules/common/gc_reset.vhd
View file @
fa8df2bb
...
...
@@ -10,13 +10,13 @@
-- Copyright (c) 2012-2017 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
...
...
modules/common/gc_serial_dac.vhd
View file @
fa8df2bb
...
...
@@ -6,7 +6,7 @@
-- Author : Pablo Alvarez Sanchez
-- Company : CERN BE-Co-HT
-- Created : 2010-02-25
-- Last update: 201
1-04-2
9
-- Last update: 201
9-09-0
9
-- Platform : FPGA-generic
-- Standard : VHDL '87
-------------------------------------------------------------------------------
...
...
@@ -17,13 +17,13 @@
-- Copyright (c) 2009 - 2010 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
--
...
...
modules/genrams/xilinx/generic_simple_dpram.vhd
View file @
fa8df2bb
...
...
@@ -21,13 +21,13 @@
-- Copyright (c) 2011 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
--
...
...
modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd
View file @
fa8df2bb
-------------------------------------------------------------------------------
-- Title : AXI4Lite-to-WB bridge
-- Project : General Cores
-------------------------------------------------------------------------------
-- File : wb_axi4lite_bridge.vhd
-- Author : Tomasz Wlostowski
-- Company : CERN
-- Platform : FPGA-generics
-- Standard : VHDL '93
-------------------------------------------------------------------------------
-- Copyright (c) 2017 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
library
ieee
;
use
ieee
.
std_logic_1164
.
all
;
use
ieee
.
numeric_std
.
all
;
use
work
.
axi4_pkg
.
all
;
use
work
.
wishbone_pkg
.
all
;
entity
wb_axi4lite_bridge
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
ARVALID
:
in
std_logic
;
AWVALID
:
in
std_logic
;
BREADY
:
in
std_logic
;
RREADY
:
in
std_logic
;
WLAST
:
in
std_logic
;
WVALID
:
in
std_logic
;
ARADDR
:
in
std_logic_vector
(
31
downto
0
);
AWADDR
:
in
std_logic_vector
(
31
downto
0
);
WDATA
:
in
std_logic_vector
(
31
downto
0
);
WSTRB
:
in
std_logic_vector
(
3
downto
0
);
ARREADY
:
out
std_logic
;
AWREADY
:
out
std_logic
;
BVALID
:
out
std_logic
;
RLAST
:
out
std_logic
;
RVALID
:
out
std_logic
;
WREADY
:
out
std_logic
;
BRESP
:
out
std_logic_vector
(
1
downto
0
);
RRESP
:
out
std_logic_vector
(
1
downto
0
);
RDATA
:
out
std_logic_vector
(
31
downto
0
);
wb_adr
:
out
std_logic_vector
(
c_wishbone_address_width
-1
downto
0
);
wb_dat_m2s
:
out
std_logic_vector
(
c_wishbone_data_width
-1
downto
0
);
wb_sel
:
out
std_logic_vector
(
c_wishbone_data_width
/
8-1
downto
0
);
wb_cyc
:
out
std_logic
;
wb_stb
:
out
std_logic
;
wb_we
:
out
std_logic
;
wb_dat_s2m
:
in
std_logic_vector
(
c_wishbone_data_width
-1
downto
0
);
wb_err
:
in
std_logic
:
=
'0'
;
wb_rty
:
in
std_logic
:
=
'0'
;
wb_ack
:
in
std_logic
;
wb_stall
:
in
std_logic
);
end
wb_axi4lite_bridge
;
architecture
rtl
of
wb_axi4lite_bridge
is
signal
axi_in
:
t_axi4_lite_master_out_32
;
signal
axi_out
:
t_axi4_lite_master_in_32
;
signal
wb_in
:
t_wishbone_master_in
;
signal
wb_out
:
t_wishbone_master_out
;
begin
axi_in
.
ARVALID
<=
ARVALID
;
axi_in
.
AWVALID
<=
AWVALID
;
axi_in
.
BREADY
<=
BREADY
;
axi_in
.
RREADY
<=
RREADY
;
axi_in
.
WLAST
<=
WLAST
;
axi_in
.
WVALID
<=
WVALID
;
axi_in
.
ARADDR
<=
ARADDR
;
axi_in
.
AWADDR
<=
AWADDR
;
axi_in
.
WDATA
<=
WDATA
;
axi_in
.
WSTRB
<=
WSTRB
;
ARREADY
<=
axi_out
.
ARREADY
;
AWREADY
<=
axi_out
.
AWREADY
;
BVALID
<=
axi_out
.
BVALID
;
RLAST
<=
axi_out
.
RLAST
;
RVALID
<=
axi_out
.
RVALID
;
WREADY
<=
axi_out
.
WREADY
;
BRESP
<=
axi_out
.
BRESP
;
RRESP
<=
axi_out
.
RRESP
;
RDATA
<=
axi_out
.
RDATA
;
wb_adr
<=
wb_out
.
adr
;
wb_dat_m2s
<=
wb_out
.
dat
;
wb_stb
<=
wb_out
.
stb
;
wb_sel
<=
wb_out
.
sel
;
wb_cyc
<=
wb_out
.
cyc
;
wb_we
<=
wb_out
.
we
;
wb_in
.
err
<=
wb_err
;
wb_in
.
rty
<=
wb_rty
;
wb_in
.
ack
<=
wb_ack
;
wb_in
.
stall
<=
wb_stall
;
wb_in
.
dat
<=
wb_dat_s2m
;
U_Wrapped_Bridge
:
xwb_axi4lite_bridge
port
map
(
clk_sys_i
=>
clk_sys_i
,
rst_n_i
=>
rst_n_i
,
axi4_slave_i
=>
axi_in
,
axi4_slave_o
=>
axi_out
,
wb_master_o
=>
wb_out
,
wb_master_i
=>
wb_in
);
end
rtl
;
-------------------------------------------------------------------------------
-- Title : AXI4Lite-to-WB bridge
-- Project : General Cores
-------------------------------------------------------------------------------
-- File : wb_axi4lite_bridge.vhd
-- Author : Tomasz Wlostowski
-- Company : CERN
-- Platform : FPGA-generics
-- Standard : VHDL '93
-------------------------------------------------------------------------------
-- Copyright (c) 2017 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
"License") (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
library
ieee
;
use
ieee
.
std_logic_1164
.
all
;
use
ieee
.
numeric_std
.
all
;
use
work
.
axi4_pkg
.
all
;
use
work
.
wishbone_pkg
.
all
;
entity
wb_axi4lite_bridge
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
ARVALID
:
in
std_logic
;
AWVALID
:
in
std_logic
;
BREADY
:
in
std_logic
;
RREADY
:
in
std_logic
;
WLAST
:
in
std_logic
;
WVALID
:
in
std_logic
;
ARADDR
:
in
std_logic_vector
(
31
downto
0
);
AWADDR
:
in
std_logic_vector
(
31
downto
0
);
WDATA
:
in
std_logic_vector
(
31
downto
0
);
WSTRB
:
in
std_logic_vector
(
3
downto
0
);
ARREADY
:
out
std_logic
;
AWREADY
:
out
std_logic
;
BVALID
:
out
std_logic
;
RLAST
:
out
std_logic
;
RVALID
:
out
std_logic
;
WREADY
:
out
std_logic
;
BRESP
:
out
std_logic_vector
(
1
downto
0
);
RRESP
:
out
std_logic_vector
(
1
downto
0
);
RDATA
:
out
std_logic_vector
(
31
downto
0
);
wb_adr
:
out
std_logic_vector
(
c_wishbone_address_width
-1
downto
0
);
wb_dat_m2s
:
out
std_logic_vector
(
c_wishbone_data_width
-1
downto
0
);
wb_sel
:
out
std_logic_vector
(
c_wishbone_data_width
/
8-1
downto
0
);
wb_cyc
:
out
std_logic
;
wb_stb
:
out
std_logic
;
wb_we
:
out
std_logic
;
wb_dat_s2m
:
in
std_logic_vector
(
c_wishbone_data_width
-1
downto
0
);
wb_err
:
in
std_logic
:
=
'0'
;
wb_rty
:
in
std_logic
:
=
'0'
;
wb_ack
:
in
std_logic
;
wb_stall
:
in
std_logic
);
end
wb_axi4lite_bridge
;
architecture
rtl
of
wb_axi4lite_bridge
is
signal
axi_in
:
t_axi4_lite_master_out_32
;
signal
axi_out
:
t_axi4_lite_master_in_32
;
signal
wb_in
:
t_wishbone_master_in
;
signal
wb_out
:
t_wishbone_master_out
;
begin
axi_in
.
ARVALID
<=
ARVALID
;
axi_in
.
AWVALID
<=
AWVALID
;
axi_in
.
BREADY
<=
BREADY
;
axi_in
.
RREADY
<=
RREADY
;
axi_in
.
WLAST
<=
WLAST
;
axi_in
.
WVALID
<=
WVALID
;
axi_in
.
ARADDR
<=
ARADDR
;
axi_in
.
AWADDR
<=
AWADDR
;
axi_in
.
WDATA
<=
WDATA
;
axi_in
.
WSTRB
<=
WSTRB
;
ARREADY
<=
axi_out
.
ARREADY
;
AWREADY
<=
axi_out
.
AWREADY
;
BVALID
<=
axi_out
.
BVALID
;
RLAST
<=
axi_out
.
RLAST
;
RVALID
<=
axi_out
.
RVALID
;
WREADY
<=
axi_out
.
WREADY
;
BRESP
<=
axi_out
.
BRESP
;
RRESP
<=
axi_out
.
RRESP
;
RDATA
<=
axi_out
.
RDATA
;
wb_adr
<=
wb_out
.
adr
;
wb_dat_m2s
<=
wb_out
.
dat
;
wb_stb
<=
wb_out
.
stb
;
wb_sel
<=
wb_out
.
sel
;
wb_cyc
<=
wb_out
.
cyc
;
wb_we
<=
wb_out
.
we
;
wb_in
.
err
<=
wb_err
;
wb_in
.
rty
<=
wb_rty
;
wb_in
.
ack
<=
wb_ack
;
wb_in
.
stall
<=
wb_stall
;
wb_in
.
dat
<=
wb_dat_s2m
;
U_Wrapped_Bridge
:
xwb_axi4lite_bridge
port
map
(
clk_sys_i
=>
clk_sys_i
,
rst_n_i
=>
rst_n_i
,
axi4_slave_i
=>
axi_in
,
axi4_slave_o
=>
axi_out
,
wb_master_o
=>
wb_out
,
wb_master_i
=>
wb_in
);
end
rtl
;
modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd
View file @
fa8df2bb
-------------------------------------------------------------------------------
-- Title : AXI4Lite-to-WB bridge wrapper
-- Project : General Cores
-------------------------------------------------------------------------------
-- File : xwb_axi4lite_bridge.vhd
-- Author : Tomasz Wlostowski
-- Company : CERN
-- Platform : FPGA-generics
-- Standard : VHDL '93
-------------------------------------------------------------------------------
-- Copyright (c) 2017 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
library
ieee
;
use
ieee
.
std_logic_1164
.
all
;
use
ieee
.
numeric_std
.
all
;
use
work
.
axi4_pkg
.
all
;
use
work
.
wishbone_pkg
.
all
;
entity
xwb_axi4lite_bridge
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
axi4_slave_i
:
in
t_axi4_lite_slave_in_32
;
axi4_slave_o
:
out
t_axi4_lite_slave_out_32
;
wb_master_o
:
out
t_wishbone_master_out
;
wb_master_i
:
in
t_wishbone_master_in
);
end
xwb_axi4lite_bridge
;
architecture
rtl
of
xwb_axi4lite_bridge
is
constant
c_timeout
:
integer
:
=
256
;
type
t_state
is
(
IDLE
,
ISSUE_WRITE
,
ISSUE_READ
,
COMPLETE_WRITE
,
COMPLETE_READ
,
WAIT_ACK_READ
,
WAIT_ACK_WRITE
,
RESPONSE_READ
,
RESPONSE_WRITE
);
signal
state
:
t_state
;
signal
count
:
unsigned
(
10
downto
0
);
begin
process
(
clk_sys_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
axi4_slave_o
<=
c_axi4_lite_default_master_in_32
;
wb_master_o
.
cyc
<=
'0'
;
state
<=
IDLE
;
else
case
state
is
when
IDLE
=>
wb_master_o
.
cyc
<=
'0'
;
axi4_slave_o
.
ARREADY
<=
'1'
;
axi4_slave_o
.
AWREADY
<=
'1'
;
axi4_slave_o
.
WREADY
<=
'0'
;
axi4_slave_o
.
BVALID
<=
'0'
;
axi4_slave_o
.
BRESP
<=
(
others
=>
'X'
);
axi4_slave_o
.
RDATA
<=
(
others
=>
'X'
);
axi4_slave_o
.
RRESP
<=
(
others
=>
'X'
);
axi4_slave_o
.
RVALID
<=
'0'
;
axi4_slave_o
.
RLAST
<=
'0'
;
if
(
axi4_slave_i
.
AWVALID
=
'1'
)
then
state
<=
ISSUE_WRITE
;
wb_master_o
.
adr
<=
axi4_slave_i
.
AWADDR
;
elsif
(
axi4_slave_i
.
ARVALID
=
'1'
)
then
state
<=
ISSUE_READ
;
wb_master_o
.
adr
<=
axi4_slave_i
.
ARADDR
;
end
if
;
when
ISSUE_WRITE
=>
axi4_slave_o
.
WREADY
<=
'1'
;
wb_master_o
.
cyc
<=
'1'
;
wb_master_o
.
we
<=
'1'
;
if
(
axi4_slave_i
.
WVALID
=
'1'
)
then
wb_master_o
.
stb
<=
'1'
;
wb_master_o
.
sel
<=
axi4_slave_i
.
WSTRB
;
wb_master_o
.
dat
<=
axi4_slave_i
.
WDATA
;
state
<=
COMPLETE_WRITE
;
end
if
;
when
ISSUE_READ
=>
wb_master_o
.
cyc
<=
'1'
;
wb_master_o
.
stb
<=
'1'
;
wb_master_o
.
we
<=
'0'
;
axi4_slave_o
.
RVALID
<=
'0'
;
axi4_slave_o
.
RLAST
<=
'0'
;
state
<=
COMPLETE_READ
;
when
COMPLETE_READ
=>
if
(
wb_master_i
.
stall
=
'0'
)
then
wb_master_o
.
stb
<=
'0'
;
if
(
wb_master_i
.
ack
=
'1'
)
then
state
<=
IDLE
;
axi4_slave_o
.
RRESP
<=
c_AXI4_RESP_EXOKAY
;
axi4_slave_o
.
RDATA
<=
wb_master_i
.
dat
;
axi4_slave_o
.
RVALID
<=
'1'
;
axi4_slave_o
.
RLAST
<=
'1'
;
wb_master_o
.
cyc
<=
'0'
;
else
state
<=
WAIT_ACK_READ
;
count
<=
(
others
=>
'0'
);
end
if
;
end
if
;
when
COMPLETE_WRITE
=>
if
(
wb_master_i
.
stall
=
'0'
)
then
wb_master_o
.
stb
<=
'0'
;
if
(
wb_master_i
.
ack
=
'1'
)
then
state
<=
RESPONSE_WRITE
;
axi4_slave_o
.
BRESP
<=
c_AXI4_RESP_EXOKAY
;
wb_master_o
.
cyc
<=
'0'
;
else
state
<=
WAIT_ACK_WRITE
;
count
<=
(
others
=>
'0'
);
end
if
;
end
if
;
when
WAIT_ACK_WRITE
=>
if
(
wb_master_i
.
ack
=
'1'
)
then
state
<=
RESPONSE_WRITE
;
axi4_slave_o
.
BRESP
<=
c_AXI4_RESP_EXOKAY
;
wb_master_o
.
cyc
<=
'0'
;
elsif
count
=
c_timeout
then
state
<=
RESPONSE_WRITE
;
axi4_slave_o
.
BRESP
<=
c_AXI4_RESP_SLVERR
;
wb_master_o
.
cyc
<=
'0'
;
end
if
;
count
<=
count
+
1
;
when
WAIT_ACK_READ
=>
if
(
wb_master_i
.
ack
=
'1'
)
then
state
<=
IDLE
;
axi4_slave_o
.
RRESP
<=
c_AXI4_RESP_EXOKAY
;
axi4_slave_o
.
RVALID
<=
'1'
;
axi4_slave_o
.
RLAST
<=
'1'
;
axi4_slave_o
.
RDATA
<=
wb_master_i
.
dat
;
wb_master_o
.
cyc
<=
'0'
;
elsif
count
=
c_timeout
then
state
<=
IDLE
;
axi4_slave_o
.
RRESP
<=
c_AXI4_RESP_SLVERR
;
axi4_slave_o
.
RVALID
<=
'1'
;
axi4_slave_o
.
RLAST
<=
'1'
;
axi4_slave_o
.
RDATA
<=
(
others
=>
'X'
);
wb_master_o
.
cyc
<=
'0'
;
end
if
;
count
<=
count
+
1
;
when
RESPONSE_WRITE
=>
if
(
axi4_slave_i
.
BREADY
=
'1'
)
then
axi4_slave_o
.
BVALID
<=
'1'
;
state
<=
IDLE
;
end
if
;
when
RESPONSE_READ
=>
null
;
end
case
;
end
if
;
end
if
;
end
process
;
end
rtl
;
-------------------------------------------------------------------------------
-- Title : AXI4Lite-to-WB bridge wrapper
-- Project : General Cores
-------------------------------------------------------------------------------
-- File : xwb_axi4lite_bridge.vhd
-- Author : Tomasz Wlostowski
-- Company : CERN
-- Platform : FPGA-generics
-- Standard : VHDL '93
-------------------------------------------------------------------------------
-- Copyright (c) 2017 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
"License") (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
library
ieee
;
use
ieee
.
std_logic_1164
.
all
;
use
ieee
.
numeric_std
.
all
;
use
work
.
axi4_pkg
.
all
;
use
work
.
wishbone_pkg
.
all
;
entity
xwb_axi4lite_bridge
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
axi4_slave_i
:
in
t_axi4_lite_slave_in_32
;
axi4_slave_o
:
out
t_axi4_lite_slave_out_32
;
wb_master_o
:
out
t_wishbone_master_out
;
wb_master_i
:
in
t_wishbone_master_in
);
end
xwb_axi4lite_bridge
;
architecture
rtl
of
xwb_axi4lite_bridge
is
constant
c_timeout
:
integer
:
=
256
;
type
t_state
is
(
IDLE
,
ISSUE_WRITE
,
ISSUE_READ
,
COMPLETE_WRITE
,
COMPLETE_READ
,
WAIT_ACK_READ
,
WAIT_ACK_WRITE
,
RESPONSE_READ
,
RESPONSE_WRITE
);
signal
state
:
t_state
;
signal
count
:
unsigned
(
10
downto
0
);
begin
process
(
clk_sys_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
axi4_slave_o
<=
c_axi4_lite_default_master_in_32
;
wb_master_o
.
cyc
<=
'0'
;
state
<=
IDLE
;
else
case
state
is
when
IDLE
=>
wb_master_o
.
cyc
<=
'0'
;
axi4_slave_o
.
ARREADY
<=
'1'
;
axi4_slave_o
.
AWREADY
<=
'1'
;
axi4_slave_o
.
WREADY
<=
'0'
;
axi4_slave_o
.
BVALID
<=
'0'
;
axi4_slave_o
.
BRESP
<=
(
others
=>
'X'
);
axi4_slave_o
.
RDATA
<=
(
others
=>
'X'
);
axi4_slave_o
.
RRESP
<=
(
others
=>
'X'
);
axi4_slave_o
.
RVALID
<=
'0'
;
axi4_slave_o
.
RLAST
<=
'0'
;
if
(
axi4_slave_i
.
AWVALID
=
'1'
)
then
state
<=
ISSUE_WRITE
;
wb_master_o
.
adr
<=
axi4_slave_i
.
AWADDR
;
elsif
(
axi4_slave_i
.
ARVALID
=
'1'
)
then
state
<=
ISSUE_READ
;
wb_master_o
.
adr
<=
axi4_slave_i
.
ARADDR
;
end
if
;
when
ISSUE_WRITE
=>
axi4_slave_o
.
WREADY
<=
'1'
;
wb_master_o
.
cyc
<=
'1'
;
wb_master_o
.
we
<=
'1'
;
if
(
axi4_slave_i
.
WVALID
=
'1'
)
then
wb_master_o
.
stb
<=
'1'
;
wb_master_o
.
sel
<=
axi4_slave_i
.
WSTRB
;
wb_master_o
.
dat
<=
axi4_slave_i
.
WDATA
;
state
<=
COMPLETE_WRITE
;
end
if
;
when
ISSUE_READ
=>
wb_master_o
.
cyc
<=
'1'
;
wb_master_o
.
stb
<=
'1'
;
wb_master_o
.
we
<=
'0'
;
axi4_slave_o
.
RVALID
<=
'0'
;
axi4_slave_o
.
RLAST
<=
'0'
;
state
<=
COMPLETE_READ
;
when
COMPLETE_READ
=>
if
(
wb_master_i
.
stall
=
'0'
)
then
wb_master_o
.
stb
<=
'0'
;
if
(
wb_master_i
.
ack
=
'1'
)
then
state
<=
IDLE
;
axi4_slave_o
.
RRESP
<=
c_AXI4_RESP_EXOKAY
;
axi4_slave_o
.
RDATA
<=
wb_master_i
.
dat
;
axi4_slave_o
.
RVALID
<=
'1'
;
axi4_slave_o
.
RLAST
<=
'1'
;
wb_master_o
.
cyc
<=
'0'
;
else
state
<=
WAIT_ACK_READ
;
count
<=
(
others
=>
'0'
);
end
if
;
end
if
;
when
COMPLETE_WRITE
=>
if
(
wb_master_i
.
stall
=
'0'
)
then
wb_master_o
.
stb
<=
'0'
;
if
(
wb_master_i
.
ack
=
'1'
)
then
state
<=
RESPONSE_WRITE
;
axi4_slave_o
.
BRESP
<=
c_AXI4_RESP_EXOKAY
;
wb_master_o
.
cyc
<=
'0'
;
else
state
<=
WAIT_ACK_WRITE
;
count
<=
(
others
=>
'0'
);
end
if
;
end
if
;
when
WAIT_ACK_WRITE
=>
if
(
wb_master_i
.
ack
=
'1'
)
then
state
<=
RESPONSE_WRITE
;
axi4_slave_o
.
BRESP
<=
c_AXI4_RESP_EXOKAY
;
wb_master_o
.
cyc
<=
'0'
;
elsif
count
=
c_timeout
then
state
<=
RESPONSE_WRITE
;
axi4_slave_o
.
BRESP
<=
c_AXI4_RESP_SLVERR
;
wb_master_o
.
cyc
<=
'0'
;
end
if
;
count
<=
count
+
1
;
when
WAIT_ACK_READ
=>
if
(
wb_master_i
.
ack
=
'1'
)
then
state
<=
IDLE
;
axi4_slave_o
.
RRESP
<=
c_AXI4_RESP_EXOKAY
;
axi4_slave_o
.
RVALID
<=
'1'
;
axi4_slave_o
.
RLAST
<=
'1'
;
axi4_slave_o
.
RDATA
<=
wb_master_i
.
dat
;
wb_master_o
.
cyc
<=
'0'
;
elsif
count
=
c_timeout
then
state
<=
IDLE
;
axi4_slave_o
.
RRESP
<=
c_AXI4_RESP_SLVERR
;
axi4_slave_o
.
RVALID
<=
'1'
;
axi4_slave_o
.
RLAST
<=
'1'
;
axi4_slave_o
.
RDATA
<=
(
others
=>
'X'
);
wb_master_o
.
cyc
<=
'0'
;
end
if
;
count
<=
count
+
1
;
when
RESPONSE_WRITE
=>
if
(
axi4_slave_i
.
BREADY
=
'1'
)
then
axi4_slave_o
.
BVALID
<=
'1'
;
state
<=
IDLE
;
end
if
;
when
RESPONSE_READ
=>
null
;
end
case
;
end
if
;
end
if
;
end
process
;
end
rtl
;
modules/wishbone/wb_irq/msidemo/crt0.S
View file @
fa8df2bb
/****************************************************************************
**
** Name: crt0ram.S
**
** Description:
** Implements boot-code that calls LatticeDDInit (that calls main())
** Implements exception handlers (actually, redirectors)
**
** $Revision: $
**
** Disclaimer:
**
** This source code is intended as a design reference which
** illustrates how these types of functions can be implemented. It
** is the user's responsibility to verify their design for
** consistency and functionality through the use of formal
** verification methods. Lattice Semiconductor provides no warranty
** regarding the use or functionality of this code.
**
** --------------------------------------------------------------------
**
** Lattice Semiconductor Corporation
** 5555 NE Moore Court
** Hillsboro, OR 97214
** U.S.A
**
** TEL: 1-800-Lattice (USA and Canada)
** (503)268-8001 (other locations)
**
** web: http://www.latticesemi.com
** email: techsupport@latticesemi.com
**
** --------------------------------------------------------------------------
**
** Change History (Latest changes on top)
**
** Ver Date Description
** --------------------------------------------------------------------------
** 3.8 Apr-15-2011 Added __MICO_USER_<handler>_HANDLER__ preprocessor to
** allow customers to implement their own handlers for:
** DATA_ABORT, INST_ABORT
**
** 3.1 Jun-18-2008 Added __MICO_NO_INTERRUPTS__ preprocessor
** option to exclude invoking MicoISRHandler
** to reduce code-size in apps that don't use
** interrupts
**
** 3.0 Mar-25-2008 Added Header
**
**---------------------------------------------------------------------------
*****************************************************************************/
/*
* LatticeMico32 C startup code.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/* From include/sys/signal.h */
#define SIGINT 2 /* interrupt */
#define SIGTRAP 5 /* trace trap */
#define SIGFPE 8 /* arithmetic exception */
#define SIGSEGV 11 /* segmentation violation */
/****************************************************************************
**
** Name: crt0ram.S
**
** Description:
** Implements boot-code that calls LatticeDDInit (that calls main())
** Implements exception handlers (actually, redirectors)
**
** $Revision: $
**
** Disclaimer:
**
** This source code is intended as a design reference which
** illustrates how these types of functions can be implemented. It
** is the user's responsibility to verify their design for
** consistency and functionality through the use of formal
** verification methods. Lattice Semiconductor provides no warranty
** regarding the use or functionality of this code.
**
** --------------------------------------------------------------------
**
** Lattice Semiconductor Corporation
** 5555 NE Moore Court
** Hillsboro, OR 97214
** U.S.A
**
** TEL: 1-800-Lattice (USA and Canada)
** (503)268-8001 (other locations)
**
** web: http://www.latticesemi.com
** email: techsupport@latticesemi.com
**
** --------------------------------------------------------------------------
**
** Change History (Latest changes on top)
**
** Ver Date Description
** --------------------------------------------------------------------------
** 3.8 Apr-15-2011 Added __MICO_USER_<handler>_HANDLER__ preprocessor to
** allow customers to implement their own handlers for:
** DATA_ABORT, INST_ABORT
**
** 3.1 Jun-18-2008 Added __MICO_NO_INTERRUPTS__ preprocessor
** option to exclude invoking MicoISRHandler
** to reduce code-size in apps that don't use
** interrupts
**
** 3.0 Mar-25-2008 Added Header
**
**---------------------------------------------------------------------------
*****************************************************************************/
//#define MICO32_FULL_CONTEXT_SAVE_RESTORE
/*
* LatticeMico32 C startup code.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/* Exception handlers - Must be 32 bytes long. */
.section .boot, "ax", @progbits
.global _start
_start:
.global _reset_handler
.type _reset_handler, @function
_reset_handler:
xor r0, r0, r0
wcsr IE, r0
wcsr IM, r0
mvhi r1, hi(_reset_handler)
ori r1, r1, lo(_reset_handler)
wcsr EBA, r1
calli _crt0
nop
.size _reset_handler, .-_reset_handler
/* From include/sys/signal.h */
#define SIGINT 2 /* interrupt */
#define SIGTRAP 5 /* trace trap */
#define SIGFPE 8 /* arithmetic exception */
#define SIGSEGV 11 /* segmentation violation */
//#define MICO32_FULL_CONTEXT_SAVE_RESTORE
/* Exception handlers - Must be 32 bytes long. */
.section .boot, "ax", @progbits
.global _start
_start:
.global _reset_handler
.type _reset_handler, @function
_reset_handler:
xor r0, r0, r0
wcsr IE, r0
wcsr IM, r0
mvhi r1, hi(_reset_handler)
ori r1, r1, lo(_reset_handler)
wcsr EBA, r1
calli _crt0
nop
.size _reset_handler, .-_reset_handler
.extern _irq_entry
.org 0xc0
.global _interrupt_handler
.type _interrupt_handler, @function
_interrupt_handler:
sw (sp+0), ra
calli _save_all
mvi r1, SIGINT
#ifndef __MICO_NO_INTERRUPTS__
.global _interrupt_handler
.type _interrupt_handler, @function
_interrupt_handler:
sw (sp+0), ra
calli _save_all
mvi r1, SIGINT
#ifndef __MICO_NO_INTERRUPTS__
calli _irq_entry
#else
wcsr IE, r0
#endif
bi _restore_all_and_return
nop
nop
nop
#else
wcsr IE, r0
#endif
bi _restore_all_and_return
nop
nop
nop
.org 0x100
.global _crt0
.type _crt0, @function
_crt0:
/* Clear r0 */
xor r0, r0, r0
/* Setup stack and global pointer */
mvhi sp, hi(_fstack)
ori sp, sp, lo(_fstack)
mvhi gp, hi(_gp)
ori gp, gp, lo(_gp)
.global _crt0
.type _crt0, @function
_crt0:
/* Clear r0 */
xor r0, r0, r0
/* Setup stack and global pointer */
mvhi sp, hi(_fstack)
ori sp, sp, lo(_fstack)
mvhi gp, hi(_gp)
ori gp, gp, lo(_gp)
mvhi r1, hi(_fbss)
ori r1, r1, lo(_fbss)
mvi r2, 0
...
...
@@ -140,120 +140,120 @@ _crt0:
ori r3, r3, lo(_ebss)
sub r3, r3, r1
calli memset
mvi r1, 0
mvi r2, 0
mvi r3, 0
mvi r1, 0
mvi r2, 0
mvi r3, 0
calli main
loopf:
bi loopf
.global _save_all
.type _save_all, @function
_save_all:
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
addi sp, sp, -128
#else
addi sp, sp, -60
#endif
sw (sp+4), r1
sw (sp+8), r2
sw (sp+12), r3
sw (sp+16), r4
sw (sp+20), r5
sw (sp+24), r6
sw (sp+28), r7
sw (sp+32), r8
sw (sp+36), r9
sw (sp+40), r10
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
sw (sp+44), r11
sw (sp+48), r12
sw (sp+52), r13
sw (sp+56), r14
sw (sp+60), r15
sw (sp+64), r16
sw (sp+68), r17
sw (sp+72), r18
sw (sp+76), r19
sw (sp+80), r20
sw (sp+84), r21
sw (sp+88), r22
sw (sp+92), r23
sw (sp+96), r24
sw (sp+100), r25
sw (sp+104), r26
sw (sp+108), r27
sw (sp+120), ea
sw (sp+124), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+128)
sw (sp+116), r1
mv r1, sp
addi r1, r1, 128
sw (sp+112), r1
#else
sw (sp+52), ea
sw (sp+56), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+60)
sw (sp+48), r1
mv r1, sp
addi r1, r1, 60
sw (sp+44), r1
#endif
// xor r1, r1, r1
// wcsr ie, r1
ret
.size _save_all, .-_save_all
.global _restore_all_and_return
.type _restore_all_and_return, @function
/* Restore all registers and return from exception */
_restore_all_and_return:
// addi r1, r0, 2
// wcsr ie, r1
lw r1, (sp+4)
lw r2, (sp+8)
lw r3, (sp+12)
lw r4, (sp+16)
lw r5, (sp+20)
lw r6, (sp+24)
lw r7, (sp+28)
lw r8, (sp+32)
lw r9, (sp+36)
lw r10, (sp+40)
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
lw r11, (sp+44)
lw r12, (sp+48)
lw r13, (sp+52)
lw r14, (sp+56)
lw r15, (sp+60)
lw r16, (sp+64)
lw r17, (sp+68)
lw r18, (sp+72)
lw r19, (sp+76)
lw r20, (sp+80)
lw r21, (sp+84)
lw r22, (sp+88)
lw r23, (sp+92)
lw r24, (sp+96)
lw r25, (sp+100)
lw r26, (sp+104)
lw r27, (sp+108)
lw ra, (sp+116)
lw ea, (sp+120)
lw ba, (sp+124)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+112)
#else
lw ra, (sp+48)
lw ea, (sp+52)
lw ba, (sp+56)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+44)
#endif
nop
eret
.size _restore_all_and_return, .-_restore_all_and_return
.global _save_all
.type _save_all, @function
_save_all:
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
addi sp, sp, -128
#else
addi sp, sp, -60
#endif
sw (sp+4), r1
sw (sp+8), r2
sw (sp+12), r3
sw (sp+16), r4
sw (sp+20), r5
sw (sp+24), r6
sw (sp+28), r7
sw (sp+32), r8
sw (sp+36), r9
sw (sp+40), r10
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
sw (sp+44), r11
sw (sp+48), r12
sw (sp+52), r13
sw (sp+56), r14
sw (sp+60), r15
sw (sp+64), r16
sw (sp+68), r17
sw (sp+72), r18
sw (sp+76), r19
sw (sp+80), r20
sw (sp+84), r21
sw (sp+88), r22
sw (sp+92), r23
sw (sp+96), r24
sw (sp+100), r25
sw (sp+104), r26
sw (sp+108), r27
sw (sp+120), ea
sw (sp+124), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+128)
sw (sp+116), r1
mv r1, sp
addi r1, r1, 128
sw (sp+112), r1
#else
sw (sp+52), ea
sw (sp+56), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+60)
sw (sp+48), r1
mv r1, sp
addi r1, r1, 60
sw (sp+44), r1
#endif
// xor r1, r1, r1
// wcsr ie, r1
ret
.size _save_all, .-_save_all
.global _restore_all_and_return
.type _restore_all_and_return, @function
/* Restore all registers and return from exception */
_restore_all_and_return:
// addi r1, r0, 2
// wcsr ie, r1
lw r1, (sp+4)
lw r2, (sp+8)
lw r3, (sp+12)
lw r4, (sp+16)
lw r5, (sp+20)
lw r6, (sp+24)
lw r7, (sp+28)
lw r8, (sp+32)
lw r9, (sp+36)
lw r10, (sp+40)
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
lw r11, (sp+44)
lw r12, (sp+48)
lw r13, (sp+52)
lw r14, (sp+56)
lw r15, (sp+60)
lw r16, (sp+64)
lw r17, (sp+68)
lw r18, (sp+72)
lw r19, (sp+76)
lw r20, (sp+80)
lw r21, (sp+84)
lw r22, (sp+88)
lw r23, (sp+92)
lw r24, (sp+96)
lw r25, (sp+100)
lw r26, (sp+104)
lw r27, (sp+108)
lw ra, (sp+116)
lw ea, (sp+120)
lw ba, (sp+124)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+112)
#else
lw ra, (sp+48)
lw ea, (sp+52)
lw ba, (sp+56)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+44)
#endif
nop
eret
.size _restore_all_and_return, .-_restore_all_and_return
modules/wishbone/wb_lm32/platform/kintex7/jtag_tap.v
View file @
fa8df2bb
module
jtag_tap
(
output
tck
,
output
tdi
,
input
tdo
,
output
capture
,
output
shift
,
output
e1dr
,
output
update
,
output
reset
)
;
// Unfortunately the exit1 state for DR (e1dr) is mising
// We can simulate it by interpretting 'update' as e1dr and delaying 'update'
wire
sel
;
wire
g_capture
;
wire
g_shift
;
wire
g_update
;
reg
update_delay
;
assign
capture
=
g_capture
&
sel
;
assign
shift
=
g_shift
&
sel
;
assign
e1dr
=
g_update
&
sel
;
assign
update
=
update_delay
;
BSCANE2
#(
.
JTAG_CHAIN
(
1
)
)
bscan
(
.
CAPTURE
(
g_capture
)
,
.
DRCK
(
tck
)
,
.
RESET
(
reset
)
,
.
RUNTEST
()
,
.
SEL
(
sel
)
,
.
SHIFT
(
g_shift
)
,
.
TCK
()
,
.
TDI
(
tdi
)
,
.
TMS
()
,
.
UPDATE
(
g_update
)
,
.
TDO
(
tdo
)
)
;
always
@
(
posedge
tck
)
update_delay
<=
g_update
;
endmodule
module
jtag_tap
(
output
tck
,
output
tdi
,
input
tdo
,
output
capture
,
output
shift
,
output
e1dr
,
output
update
,
output
reset
)
;
// Unfortunately the exit1 state for DR (e1dr) is mising
// We can simulate it by interpretting 'update' as e1dr and delaying 'update'
wire
sel
;
wire
g_capture
;
wire
g_shift
;
wire
g_update
;
reg
update_delay
;
assign
capture
=
g_capture
&
sel
;
assign
shift
=
g_shift
&
sel
;
assign
e1dr
=
g_update
&
sel
;
assign
update
=
update_delay
;
BSCANE2
#(
.
JTAG_CHAIN
(
1
)
)
bscan
(
.
CAPTURE
(
g_capture
)
,
.
DRCK
(
tck
)
,
.
RESET
(
reset
)
,
.
RUNTEST
()
,
.
SEL
(
sel
)
,
.
SHIFT
(
g_shift
)
,
.
TCK
()
,
.
TDI
(
tdi
)
,
.
TMS
()
,
.
UPDATE
(
g_update
)
,
.
TDO
(
tdo
)
)
;
always
@
(
posedge
tck
)
update_delay
<=
g_update
;
endmodule
modules/wishbone/wb_lm32/platform/kintex7/lm32_multiplier.v
View file @
fa8df2bb
// =============================================================================
// COPYRIGHT NOTICE
// Copyright 2006 (c) Lattice Semiconductor Corporation
// ALL RIGHTS RESERVED
// This confidential and proprietary software may be used only as authorised by
// a licensing agreement from Lattice Semiconductor Corporation.
// The entire notice above must be reproduced on all authorized copies and
// copies may only be made to the extent permitted by a licensing agreement from
// Lattice Semiconductor Corporation.
//
// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada)
// 5555 NE Moore Court 408-826-6000 (other locations)
// Hillsboro, OR 97124 web : http://www.latticesemi.com/
// U.S.A email: techsupport@latticesemi.com
// =============================================================================/
// FILE DETAILS
// Project : LatticeMico32
// File : lm32_multiplier.v
// Title : Pipelined multiplier.
// Dependencies : lm32_include.v
// Version : 6.1.17
// : Initial Release
// Version : 7.0SP2, 3.0
// : No Change
// Version : 3.1
// : No Change
// =============================================================================
`include
"../../src/lm32_include.v"
//`include "lm32_include.v"
/////////////////////////////////////////////////////
// Module interface
/////////////////////////////////////////////////////
module
lm32_multiplier
(
// ----- Inputs -----
clk_i
,
rst_i
,
stall_x
,
stall_m
,
operand_0
,
operand_1
,
// ----- Ouputs -----
result
)
;
/////////////////////////////////////////////////////
// Inputs
/////////////////////////////////////////////////////
input
clk_i
;
// Clock
input
rst_i
;
// Reset
input
stall_x
;
// Stall instruction in X stage
input
stall_m
;
// Stall instruction in M stage
input
[
`LM32_WORD_RNG
]
operand_0
;
// Muliplicand
input
[
`LM32_WORD_RNG
]
operand_1
;
// Multiplier
/////////////////////////////////////////////////////
// Outputs
/////////////////////////////////////////////////////
output
[
`LM32_WORD_RNG
]
result
;
// Product of multiplication
wire
[
`LM32_WORD_RNG
]
result
;
/////////////////////////////////////////////////////
// Internal nets and registers
/////////////////////////////////////////////////////
// Divide multiplicands into high and low
`define
HALF_WORD_WIDTH
(`
LM32_WORD_WIDTH
/
2
)
`define
HALF_WORD_RNG
(`
HALF_WORD_WIDTH
-
1
):
0
// Result = c+d+e = a*b
reg
[
`HALF_WORD_RNG
]
a0
,
a1
,
b0
,
b1
;
reg
[
`HALF_WORD_RNG
]
c0
,
c1
;
reg
[
`HALF_WORD_RNG
]
d1
,
e1
;
reg
[
`HALF_WORD_RNG
]
result0
,
result1
;
assign
result
=
{
result1
,
result0
};
/////////////////////////////////////////////////////
// Sequential logic
/////////////////////////////////////////////////////
always
@
(
posedge
clk_i
`CFG_RESET_SENSITIVITY
)
begin
if
(
rst_i
==
`TRUE
)
begin
a0
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
a1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
b0
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
b1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
c0
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
c1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
d1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
e1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
result0
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
result1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
end
else
begin
if
(
stall_x
==
`FALSE
)
begin
{
a1
,
a0
}
<=
operand_0
;
{
b1
,
b0
}
<=
operand_1
;
end
if
(
stall_m
==
`FALSE
)
begin
{
c1
,
c0
}
<=
a0
*
b0
;
d1
<=
a0
*
b1
;
e1
<=
a1
*
b0
;
end
result0
<=
c0
;
result1
<=
c1
+
d1
+
e1
;
end
end
endmodule
// =============================================================================
// COPYRIGHT NOTICE
// Copyright 2006 (c) Lattice Semiconductor Corporation
// ALL RIGHTS RESERVED
// This confidential and proprietary software may be used only as authorised by
// a licensing agreement from Lattice Semiconductor Corporation.
// The entire notice above must be reproduced on all authorized copies and
// copies may only be made to the extent permitted by a licensing agreement from
// Lattice Semiconductor Corporation.
//
// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada)
// 5555 NE Moore Court 408-826-6000 (other locations)
// Hillsboro, OR 97124 web : http://www.latticesemi.com/
// U.S.A email: techsupport@latticesemi.com
// =============================================================================/
// FILE DETAILS
// Project : LatticeMico32
// File : lm32_multiplier.v
// Title : Pipelined multiplier.
// Dependencies : lm32_include.v
// Version : 6.1.17
// : Initial Release
// Version : 7.0SP2, 3.0
// : No Change
// Version : 3.1
// : No Change
// =============================================================================
`include
"../../src/lm32_include.v"
//`include "lm32_include.v"
/////////////////////////////////////////////////////
// Module interface
/////////////////////////////////////////////////////
module
lm32_multiplier
(
// ----- Inputs -----
clk_i
,
rst_i
,
stall_x
,
stall_m
,
operand_0
,
operand_1
,
// ----- Ouputs -----
result
)
;
/////////////////////////////////////////////////////
// Inputs
/////////////////////////////////////////////////////
input
clk_i
;
// Clock
input
rst_i
;
// Reset
input
stall_x
;
// Stall instruction in X stage
input
stall_m
;
// Stall instruction in M stage
input
[
`LM32_WORD_RNG
]
operand_0
;
// Muliplicand
input
[
`LM32_WORD_RNG
]
operand_1
;
// Multiplier
/////////////////////////////////////////////////////
// Outputs
/////////////////////////////////////////////////////
output
[
`LM32_WORD_RNG
]
result
;
// Product of multiplication
wire
[
`LM32_WORD_RNG
]
result
;
/////////////////////////////////////////////////////
// Internal nets and registers
/////////////////////////////////////////////////////
// Divide multiplicands into high and low
`define
HALF_WORD_WIDTH
(`
LM32_WORD_WIDTH
/
2
)
`define
HALF_WORD_RNG
(`
HALF_WORD_WIDTH
-
1
):
0
// Result = c+d+e = a*b
reg
[
`HALF_WORD_RNG
]
a0
,
a1
,
b0
,
b1
;
reg
[
`HALF_WORD_RNG
]
c0
,
c1
;
reg
[
`HALF_WORD_RNG
]
d1
,
e1
;
reg
[
`HALF_WORD_RNG
]
result0
,
result1
;
assign
result
=
{
result1
,
result0
};
/////////////////////////////////////////////////////
// Sequential logic
/////////////////////////////////////////////////////
always
@
(
posedge
clk_i
`CFG_RESET_SENSITIVITY
)
begin
if
(
rst_i
==
`TRUE
)
begin
a0
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
a1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
b0
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
b1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
c0
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
c1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
d1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
e1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
result0
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
result1
<=
{
`HALF_WORD_WIDTH
{
1'b0
}};
end
else
begin
if
(
stall_x
==
`FALSE
)
begin
{
a1
,
a0
}
<=
operand_0
;
{
b1
,
b0
}
<=
operand_1
;
end
if
(
stall_m
==
`FALSE
)
begin
{
c1
,
c0
}
<=
a0
*
b0
;
d1
<=
a0
*
b1
;
e1
<=
a1
*
b0
;
end
result0
<=
c0
;
result1
<=
c1
+
d1
+
e1
;
end
end
endmodule
modules/wishbone/wb_simple_pwm/simple_pwm_wb.wb
View file @
fa8df2bb
...
...
@@ -5,7 +5,7 @@
-- Project : General Cores Collection
-------------------------------------------------------------------------------
-- File : simple_pwm_wb.wb
-- Author : Tomasz W
ł
ostowski
-- Author : Tomasz W
l
ostowski
-- Company : CERN BE-CO-HT
-- Created : 2012-12-10
-- Last update: 2013-01-09
...
...
modules/wishbone/wb_simple_timer/Manifest.py
View file @
fa8df2bb
files
=
[
"wb_tics.vhd"
,
"xwb_tics.vhd"
];
\ No newline at end of file
files
=
[
"wb_tics.vhd"
,
"xwb_tics.vhd"
];
modules/wishbone/wb_uart/uart_async_rx.vhd
View file @
fa8df2bb
------------------------------------------------------------------------------
-- Title : Simple Wishbone UART - receiver
-- Project : General Cores Collection (gencores) library
------------------------------------------------------------------------------
-- File : uart_async_rx.vhd
-- Author : Tomasz Wlostowski
-- Company : CERN
-- Platform : FPGA-generic
-- Standard : VHDL'93
-------------------------------------------------------------------------------
-- Copyright (c) 2010 CERN
--
-- This source file is free software; you can redistribute it
-- and/or modify it under the terms of the GNU Lesser General
-- Public License as published by the Free Software Foundation;
-- either version 2.1 of the License, or (at your option) any
-- later version.
--
-- This source is distributed in the hope that it will be
-- useful, but WITHOUT ANY WARRANTY; without even the implied
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-- PURPOSE. See the GNU Lesser General Public License for more
-- details.
--
-- You should have received a copy of the GNU Lesser General
-- Public License along with this source; if not, download it
-- from http://www.gnu.org/licenses/lgpl-2.1.html
-------------------------------------------------------------------------------
library
ieee
;
use
ieee
.
std_logic_1164
.
all
;
use
ieee
.
numeric_std
.
all
;
entity
uart_async_rx
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
baud8_tick_i
:
in
std_logic
;
rxd_i
:
in
std_logic
;
rx_ready_o
:
out
std_logic
;
rx_error_o
:
out
std_logic
;
rx_data_o
:
out
std_logic_vector
(
7
downto
0
)
);
end
uart_async_rx
;
architecture
behavioral
of
uart_async_rx
is
signal
Baud8Tick
:
std_logic
;
signal
RxD_sync_inv
:
std_logic_vector
(
1
downto
0
);
signal
RxD_cnt_inv
:
unsigned
(
1
downto
0
);
signal
RxD_bit_inv
:
std_logic
;
signal
state
:
std_logic_vector
(
3
downto
0
);
signal
bit_spacing
:
std_logic_vector
(
3
downto
0
);
signal
next_bit
:
std_logic
;
signal
RxD_data
:
std_logic_vector
(
7
downto
0
);
signal
RxD_data_ready
:
std_logic
;
signal
RxD_data_error
:
std_logic
;
begin
-- behavioral
Baud8Tick
<=
baud8_tick_i
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
RxD_sync_inv
<=
(
others
=>
'0'
);
else
if
(
Baud8Tick
=
'1'
)
then
RxD_sync_inv
<=
RxD_sync_inv
(
0
)
&
(
not
rxd_i
);
end
if
;
end
if
;
end
if
;
end
process
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
RxD_bit_inv
<=
'0'
;
RxD_cnt_inv
<=
(
others
=>
'0'
);
else
if
(
Baud8Tick
=
'1'
)
then
if
(
RxD_sync_inv
(
1
)
=
'1'
and
RxD_cnt_inv
/=
"11"
)
then
RxD_cnt_inv
<=
RxD_cnt_inv
+
1
;
elsif
(
RxD_sync_inv
(
1
)
=
'0'
and
RxD_cnt_inv
/=
"00"
)
then
RxD_cnt_inv
<=
RxD_cnt_inv
-
1
;
end
if
;
if
(
RxD_cnt_inv
=
"00"
)
then
RxD_bit_inv
<=
'0'
;
elsif
(
RxD_cnt_inv
=
"11"
)
then
RxD_bit_inv
<=
'1'
;
end
if
;
end
if
;
end
if
;
end
if
;
end
process
;
next_bit
<=
'1'
when
(
bit_spacing
=
x"a"
)
else
'0'
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
bit_spacing
<=
(
others
=>
'0'
);
else
if
(
state
=
x"0"
)
then
bit_spacing
<=
"0000"
;
elsif
(
Baud8Tick
=
'1'
)
then
-- bit_spacing <= std_logic_vector(resize((unsigned(bit_spacing(2 downto 0)) + 1), 4))
bit_spacing
<=
std_logic_vector
(
unsigned
(
'0'
&
bit_spacing
(
2
downto
0
))
+
1
)
or
(
bit_spacing
(
3
)
&
"000"
);
end
if
;
end
if
;
end
if
;
end
process
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
state
<=
(
others
=>
'0'
);
else
if
(
Baud8Tick
=
'1'
)
then
case
state
is
when
"0000"
=>
if
(
RxD_bit_inv
=
'1'
)
then
-- start bit
state
<=
"1000"
;
end
if
;
when
"1000"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1001"
;
-- bit 0
end
if
;
when
"1001"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1010"
;
-- bit 1
end
if
;
when
"1010"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1011"
;
-- bit 2
end
if
;
when
"1011"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1100"
;
-- bit 3
end
if
;
when
"1100"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1101"
;
-- bit 4
end
if
;
when
"1101"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1110"
;
-- bit 5
end
if
;
when
"1110"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1111"
;
-- bit 6
end
if
;
when
"1111"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"0001"
;
-- bit 7
end
if
;
when
"0001"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"0000"
;
-- bit stop
end
if
;
when
others
=>
state
<=
"0000"
;
end
case
;
end
if
;
end
if
;
end
if
;
end
process
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
RxD_data
<=
(
others
=>
'0'
);
else
if
(
Baud8Tick
=
'1'
and
next_bit
=
'1'
and
state
(
3
)
=
'1'
)
then
RxD_data
<=
(
not
RxD_bit_inv
)
&
RxD_data
(
7
downto
1
);
end
if
;
end
if
;
end
if
;
end
process
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
RxD_data_error
<=
'0'
;
RxD_data_ready
<=
'0'
;
else
if
(
Baud8Tick
=
'1'
and
next_bit
=
'1'
and
state
=
"0001"
and
RxD_bit_inv
=
'0'
)
then
RxD_data_ready
<=
'1'
;
else
RxD_data_ready
<=
'0'
;
end
if
;
if
(
Baud8Tick
=
'1'
and
next_bit
=
'1'
and
state
=
"0001"
and
RxD_bit_inv
=
'1'
)
then
RxD_data_error
<=
'1'
;
else
RxD_data_error
<=
'0'
;
end
if
;
end
if
;
end
if
;
end
process
;
rx_data_o
<=
RxD_data
;
rx_ready_o
<=
RxD_data_ready
;
rx_error_o
<=
RxD_data_error
;
end
behavioral
;
------------------------------------------------------------------------------
-- Title : Simple Wishbone UART - receiver
-- Project : General Cores Collection (gencores) library
------------------------------------------------------------------------------
-- File : uart_async_rx.vhd
-- Author : Tomasz Wlostowski
-- Company : CERN
-- Platform : FPGA-generic
-- Standard : VHDL'93
-------------------------------------------------------------------------------
-- Copyright (c) 2010 CERN
--
-- This source file is free software; you can redistribute it
-- and/or modify it under the terms of the GNU Lesser General
-- Public License as published by the Free Software Foundation;
-- either version 2.1 of the License, or (at your option) any
-- later version.
--
-- This source is distributed in the hope that it will be
-- useful, but WITHOUT ANY WARRANTY; without even the implied
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-- PURPOSE. See the GNU Lesser General Public License for more
-- details.
--
-- You should have received a copy of the GNU Lesser General
-- Public License along with this source; if not, download it
-- from http://www.gnu.org/licenses/lgpl-2.1.html
-------------------------------------------------------------------------------
library
ieee
;
use
ieee
.
std_logic_1164
.
all
;
use
ieee
.
numeric_std
.
all
;
entity
uart_async_rx
is
port
(
clk_sys_i
:
in
std_logic
;
rst_n_i
:
in
std_logic
;
baud8_tick_i
:
in
std_logic
;
rxd_i
:
in
std_logic
;
rx_ready_o
:
out
std_logic
;
rx_error_o
:
out
std_logic
;
rx_data_o
:
out
std_logic_vector
(
7
downto
0
)
);
end
uart_async_rx
;
architecture
behavioral
of
uart_async_rx
is
signal
Baud8Tick
:
std_logic
;
signal
RxD_sync_inv
:
std_logic_vector
(
1
downto
0
);
signal
RxD_cnt_inv
:
unsigned
(
1
downto
0
);
signal
RxD_bit_inv
:
std_logic
;
signal
state
:
std_logic_vector
(
3
downto
0
);
signal
bit_spacing
:
std_logic_vector
(
3
downto
0
);
signal
next_bit
:
std_logic
;
signal
RxD_data
:
std_logic_vector
(
7
downto
0
);
signal
RxD_data_ready
:
std_logic
;
signal
RxD_data_error
:
std_logic
;
begin
-- behavioral
Baud8Tick
<=
baud8_tick_i
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
RxD_sync_inv
<=
(
others
=>
'0'
);
else
if
(
Baud8Tick
=
'1'
)
then
RxD_sync_inv
<=
RxD_sync_inv
(
0
)
&
(
not
rxd_i
);
end
if
;
end
if
;
end
if
;
end
process
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
RxD_bit_inv
<=
'0'
;
RxD_cnt_inv
<=
(
others
=>
'0'
);
else
if
(
Baud8Tick
=
'1'
)
then
if
(
RxD_sync_inv
(
1
)
=
'1'
and
RxD_cnt_inv
/=
"11"
)
then
RxD_cnt_inv
<=
RxD_cnt_inv
+
1
;
elsif
(
RxD_sync_inv
(
1
)
=
'0'
and
RxD_cnt_inv
/=
"00"
)
then
RxD_cnt_inv
<=
RxD_cnt_inv
-
1
;
end
if
;
if
(
RxD_cnt_inv
=
"00"
)
then
RxD_bit_inv
<=
'0'
;
elsif
(
RxD_cnt_inv
=
"11"
)
then
RxD_bit_inv
<=
'1'
;
end
if
;
end
if
;
end
if
;
end
if
;
end
process
;
next_bit
<=
'1'
when
(
bit_spacing
=
x"a"
)
else
'0'
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
bit_spacing
<=
(
others
=>
'0'
);
else
if
(
state
=
x"0"
)
then
bit_spacing
<=
"0000"
;
elsif
(
Baud8Tick
=
'1'
)
then
-- bit_spacing <= std_logic_vector(resize((unsigned(bit_spacing(2 downto 0)) + 1), 4))
bit_spacing
<=
std_logic_vector
(
unsigned
(
'0'
&
bit_spacing
(
2
downto
0
))
+
1
)
or
(
bit_spacing
(
3
)
&
"000"
);
end
if
;
end
if
;
end
if
;
end
process
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
state
<=
(
others
=>
'0'
);
else
if
(
Baud8Tick
=
'1'
)
then
case
state
is
when
"0000"
=>
if
(
RxD_bit_inv
=
'1'
)
then
-- start bit
state
<=
"1000"
;
end
if
;
when
"1000"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1001"
;
-- bit 0
end
if
;
when
"1001"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1010"
;
-- bit 1
end
if
;
when
"1010"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1011"
;
-- bit 2
end
if
;
when
"1011"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1100"
;
-- bit 3
end
if
;
when
"1100"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1101"
;
-- bit 4
end
if
;
when
"1101"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1110"
;
-- bit 5
end
if
;
when
"1110"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"1111"
;
-- bit 6
end
if
;
when
"1111"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"0001"
;
-- bit 7
end
if
;
when
"0001"
=>
if
(
next_bit
=
'1'
)
then
state
<=
"0000"
;
-- bit stop
end
if
;
when
others
=>
state
<=
"0000"
;
end
case
;
end
if
;
end
if
;
end
if
;
end
process
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
RxD_data
<=
(
others
=>
'0'
);
else
if
(
Baud8Tick
=
'1'
and
next_bit
=
'1'
and
state
(
3
)
=
'1'
)
then
RxD_data
<=
(
not
RxD_bit_inv
)
&
RxD_data
(
7
downto
1
);
end
if
;
end
if
;
end
if
;
end
process
;
process
(
clk_sys_i
,
rst_n_i
)
begin
if
rising_edge
(
clk_sys_i
)
then
if
rst_n_i
=
'0'
then
RxD_data_error
<=
'0'
;
RxD_data_ready
<=
'0'
;
else
if
(
Baud8Tick
=
'1'
and
next_bit
=
'1'
and
state
=
"0001"
and
RxD_bit_inv
=
'0'
)
then
RxD_data_ready
<=
'1'
;
else
RxD_data_ready
<=
'0'
;
end
if
;
if
(
Baud8Tick
=
'1'
and
next_bit
=
'1'
and
state
=
"0001"
and
RxD_bit_inv
=
'1'
)
then
RxD_data_error
<=
'1'
;
else
RxD_data_error
<=
'0'
;
end
if
;
end
if
;
end
if
;
end
process
;
rx_data_o
<=
RxD_data
;
rx_ready_o
<=
RxD_data_ready
;
rx_error_o
<=
RxD_data_error
;
end
behavioral
;
modules/wishbone/wbgen2/wbgen2_dpssram.vhd
View file @
fa8df2bb
...
...
@@ -11,13 +11,13 @@
-- Copyright (c) 2011 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
...
...
modules/wishbone/wbgen2/wbgen2_eic.vhd
View file @
fa8df2bb
...
...
@@ -11,13 +11,13 @@
-- Copyright (c) 2011 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
...
...
modules/wishbone/wbgen2/wbgen2_fifo_async.vhd
View file @
fa8df2bb
...
...
@@ -11,13 +11,13 @@
-- Copyright (c) 2011 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
...
...
modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd
View file @
fa8df2bb
...
...
@@ -11,13 +11,13 @@
-- Copyright (c) 2011 CERN
--
-- Copyright and related rights are licensed under the Solderpad Hardware
-- License, Version 0.51 (the
“License”
) (which enables you, at your option,
-- License, Version 0.51 (the
"License"
) (which enables you, at your option,
-- to treat this file as licensed under the Apache License 2.0); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at http://solderpad.org/licenses/SHL-0.51.
-- Unless required by applicable law or agreed to in writing, software,
-- hardware and materials distributed under this License is distributed on an
--
“AS IS”
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
--
"AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions
-- and limitations under the License.
-------------------------------------------------------------------------------
...
...
platform/xilinx/wb_xilinx_fpga_loader/wb_xilinx_fpga_loader.vhd
View file @
fa8df2bb
...
...
@@ -3,7 +3,7 @@
-- Project : General Cores Library
-------------------------------------------------------------------------------
-- File : wb_xilinx_fpga_loader.vhd
-- Author : Tomasz W
ł
ostowski
-- Author : Tomasz W
l
ostowski
-- Company : CERN BE-CO-HT
-- Created : 2012-01-30
-- Last update : 2012-01-30
...
...
platform/xilinx/wb_xilinx_fpga_loader/xloader_wb.wb
View file @
fa8df2bb
...
...
@@ -5,7 +5,7 @@
-- Project : General Cores Library
-------------------------------------------------------------------------------
-- File : xloader_wb.wb
-- Author : Tomasz W
ł
ostowski
-- Author : Tomasz W
l
ostowski
-- Company : CERN BE-CO-HT
-- Created : 2012-01-30
-- Last update : 2012-01-30
...
...
platform/xilinx/wb_xilinx_fpga_loader/xwb_xilinx_fpga_loader.vhd
View file @
fa8df2bb
...
...
@@ -3,7 +3,7 @@
-- Project : General Cores Library
-------------------------------------------------------------------------------
-- File : xwb_xilinx_fpga_loader.vhd
-- Author : Tomasz W
ł
ostowski
-- Author : Tomasz W
l
ostowski
-- Company : CERN BE-CO-HT
-- Created : 2012-01-30
-- Last update : 2012-01-30
...
...
testbench/wishbone/lm32_testsys/sw/target/lm32/crt0.S
View file @
fa8df2bb
/****************************************************************************
**
** Name: crt0ram.S
**
** Description:
** Implements boot-code that calls LatticeDDInit (that calls main())
** Implements exception handlers (actually, redirectors)
**
** $Revision: $
**
** Disclaimer:
**
** This source code is intended as a design reference which
** illustrates how these types of functions can be implemented. It
** is the user's responsibility to verify their design for
** consistency and functionality through the use of formal
** verification methods. Lattice Semiconductor provides no warranty
** regarding the use or functionality of this code.
**
** --------------------------------------------------------------------
**
** Lattice Semiconductor Corporation
** 5555 NE Moore Court
** Hillsboro, OR 97214
** U.S.A
**
** TEL: 1-800-Lattice (USA and Canada)
** (503)268-8001 (other locations)
**
** web: http://www.latticesemi.com
** email: techsupport@latticesemi.com
**
** --------------------------------------------------------------------------
**
** Change History (Latest changes on top)
**
** Ver Date Description
** --------------------------------------------------------------------------
** 3.8 Apr-15-2011 Added __MICO_USER_<handler>_HANDLER__ preprocessor to
** allow customers to implement their own handlers for:
** DATA_ABORT, INST_ABORT
**
** 3.1 Jun-18-2008 Added __MICO_NO_INTERRUPTS__ preprocessor
** option to exclude invoking MicoISRHandler
** to reduce code-size in apps that don't use
** interrupts
**
** 3.0 Mar-25-2008 Added Header
**
**---------------------------------------------------------------------------
*****************************************************************************/
/*
* LatticeMico32 C startup code.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/* From include/sys/signal.h */
#define SIGINT 2 /* interrupt */
#define SIGTRAP 5 /* trace trap */
#define SIGFPE 8 /* arithmetic exception */
#define SIGSEGV 11 /* segmentation violation */
/****************************************************************************
**
** Name: crt0ram.S
**
** Description:
** Implements boot-code that calls LatticeDDInit (that calls main())
** Implements exception handlers (actually, redirectors)
**
** $Revision: $
**
** Disclaimer:
**
** This source code is intended as a design reference which
** illustrates how these types of functions can be implemented. It
** is the user's responsibility to verify their design for
** consistency and functionality through the use of formal
** verification methods. Lattice Semiconductor provides no warranty
** regarding the use or functionality of this code.
**
** --------------------------------------------------------------------
**
** Lattice Semiconductor Corporation
** 5555 NE Moore Court
** Hillsboro, OR 97214
** U.S.A
**
** TEL: 1-800-Lattice (USA and Canada)
** (503)268-8001 (other locations)
**
** web: http://www.latticesemi.com
** email: techsupport@latticesemi.com
**
** --------------------------------------------------------------------------
**
** Change History (Latest changes on top)
**
** Ver Date Description
** --------------------------------------------------------------------------
** 3.8 Apr-15-2011 Added __MICO_USER_<handler>_HANDLER__ preprocessor to
** allow customers to implement their own handlers for:
** DATA_ABORT, INST_ABORT
**
** 3.1 Jun-18-2008 Added __MICO_NO_INTERRUPTS__ preprocessor
** option to exclude invoking MicoISRHandler
** to reduce code-size in apps that don't use
** interrupts
**
** 3.0 Mar-25-2008 Added Header
**
**---------------------------------------------------------------------------
*****************************************************************************/
//#define MICO32_FULL_CONTEXT_SAVE_RESTORE
/*
* LatticeMico32 C startup code.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/* Exception handlers - Must be 32 bytes long. */
.section .boot, "ax", @progbits
.global _start
_start:
.global _reset_handler
.type _reset_handler, @function
_reset_handler:
xor r0, r0, r0
wcsr IE, r0
wcsr IM, r0
mvhi r1, hi(_reset_handler)
ori r1, r1, lo(_reset_handler)
wcsr EBA, r1
calli _crt0
nop
.size _reset_handler, .-_reset_handler
/* From include/sys/signal.h */
#define SIGINT 2 /* interrupt */
#define SIGTRAP 5 /* trace trap */
#define SIGFPE 8 /* arithmetic exception */
#define SIGSEGV 11 /* segmentation violation */
//#define MICO32_FULL_CONTEXT_SAVE_RESTORE
/* Exception handlers - Must be 32 bytes long. */
.section .boot, "ax", @progbits
.global _start
_start:
.global _reset_handler
.type _reset_handler, @function
_reset_handler:
xor r0, r0, r0
wcsr IE, r0
wcsr IM, r0
mvhi r1, hi(_reset_handler)
ori r1, r1, lo(_reset_handler)
wcsr EBA, r1
calli _crt0
nop
.size _reset_handler, .-_reset_handler
.extern _irq_entry
.org 0xc0
.global _interrupt_handler
.type _interrupt_handler, @function
_interrupt_handler:
sw (sp+0), ra
calli _save_all
mvi r1, SIGINT
#ifndef __MICO_NO_INTERRUPTS__
.global _interrupt_handler
.type _interrupt_handler, @function
_interrupt_handler:
sw (sp+0), ra
calli _save_all
mvi r1, SIGINT
#ifndef __MICO_NO_INTERRUPTS__
calli _irq_entry
#else
wcsr IE, r0
#endif
bi _restore_all_and_return
nop
nop
nop
#else
wcsr IE, r0
#endif
bi _restore_all_and_return
nop
nop
nop
.org 0x100
.global _crt0
.type _crt0, @function
_crt0:
/* Clear r0 */
xor r0, r0, r0
/* Setup stack and global pointer */
mvhi sp, hi(_fstack)
ori sp, sp, lo(_fstack)
mvhi gp, hi(_gp)
ori gp, gp, lo(_gp)
.global _crt0
.type _crt0, @function
_crt0:
/* Clear r0 */
xor r0, r0, r0
/* Setup stack and global pointer */
mvhi sp, hi(_fstack)
ori sp, sp, lo(_fstack)
mvhi gp, hi(_gp)
ori gp, gp, lo(_gp)
mvhi r1, hi(_fbss)
ori r1, r1, lo(_fbss)
mvi r2, 0
...
...
@@ -140,120 +140,120 @@ _crt0:
ori r3, r3, lo(_ebss)
sub r3, r3, r1
calli memset
mvi r1, 0
mvi r2, 0
mvi r3, 0
mvi r1, 0
mvi r2, 0
mvi r3, 0
calli main
loopf:
bi loopf
.global _save_all
.type _save_all, @function
_save_all:
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
addi sp, sp, -128
#else
addi sp, sp, -60
#endif
sw (sp+4), r1
sw (sp+8), r2
sw (sp+12), r3
sw (sp+16), r4
sw (sp+20), r5
sw (sp+24), r6
sw (sp+28), r7
sw (sp+32), r8
sw (sp+36), r9
sw (sp+40), r10
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
sw (sp+44), r11
sw (sp+48), r12
sw (sp+52), r13
sw (sp+56), r14
sw (sp+60), r15
sw (sp+64), r16
sw (sp+68), r17
sw (sp+72), r18
sw (sp+76), r19
sw (sp+80), r20
sw (sp+84), r21
sw (sp+88), r22
sw (sp+92), r23
sw (sp+96), r24
sw (sp+100), r25
sw (sp+104), r26
sw (sp+108), r27
sw (sp+120), ea
sw (sp+124), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+128)
sw (sp+116), r1
mv r1, sp
addi r1, r1, 128
sw (sp+112), r1
#else
sw (sp+52), ea
sw (sp+56), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+60)
sw (sp+48), r1
mv r1, sp
addi r1, r1, 60
sw (sp+44), r1
#endif
// xor r1, r1, r1
// wcsr ie, r1
ret
.size _save_all, .-_save_all
.global _restore_all_and_return
.type _restore_all_and_return, @function
/* Restore all registers and return from exception */
_restore_all_and_return:
// addi r1, r0, 2
// wcsr ie, r1
lw r1, (sp+4)
lw r2, (sp+8)
lw r3, (sp+12)
lw r4, (sp+16)
lw r5, (sp+20)
lw r6, (sp+24)
lw r7, (sp+28)
lw r8, (sp+32)
lw r9, (sp+36)
lw r10, (sp+40)
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
lw r11, (sp+44)
lw r12, (sp+48)
lw r13, (sp+52)
lw r14, (sp+56)
lw r15, (sp+60)
lw r16, (sp+64)
lw r17, (sp+68)
lw r18, (sp+72)
lw r19, (sp+76)
lw r20, (sp+80)
lw r21, (sp+84)
lw r22, (sp+88)
lw r23, (sp+92)
lw r24, (sp+96)
lw r25, (sp+100)
lw r26, (sp+104)
lw r27, (sp+108)
lw ra, (sp+116)
lw ea, (sp+120)
lw ba, (sp+124)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+112)
#else
lw ra, (sp+48)
lw ea, (sp+52)
lw ba, (sp+56)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+44)
#endif
nop
eret
.size _restore_all_and_return, .-_restore_all_and_return
.global _save_all
.type _save_all, @function
_save_all:
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
addi sp, sp, -128
#else
addi sp, sp, -60
#endif
sw (sp+4), r1
sw (sp+8), r2
sw (sp+12), r3
sw (sp+16), r4
sw (sp+20), r5
sw (sp+24), r6
sw (sp+28), r7
sw (sp+32), r8
sw (sp+36), r9
sw (sp+40), r10
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
sw (sp+44), r11
sw (sp+48), r12
sw (sp+52), r13
sw (sp+56), r14
sw (sp+60), r15
sw (sp+64), r16
sw (sp+68), r17
sw (sp+72), r18
sw (sp+76), r19
sw (sp+80), r20
sw (sp+84), r21
sw (sp+88), r22
sw (sp+92), r23
sw (sp+96), r24
sw (sp+100), r25
sw (sp+104), r26
sw (sp+108), r27
sw (sp+120), ea
sw (sp+124), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+128)
sw (sp+116), r1
mv r1, sp
addi r1, r1, 128
sw (sp+112), r1
#else
sw (sp+52), ea
sw (sp+56), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+60)
sw (sp+48), r1
mv r1, sp
addi r1, r1, 60
sw (sp+44), r1
#endif
// xor r1, r1, r1
// wcsr ie, r1
ret
.size _save_all, .-_save_all
.global _restore_all_and_return
.type _restore_all_and_return, @function
/* Restore all registers and return from exception */
_restore_all_and_return:
// addi r1, r0, 2
// wcsr ie, r1
lw r1, (sp+4)
lw r2, (sp+8)
lw r3, (sp+12)
lw r4, (sp+16)
lw r5, (sp+20)
lw r6, (sp+24)
lw r7, (sp+28)
lw r8, (sp+32)
lw r9, (sp+36)
lw r10, (sp+40)
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
lw r11, (sp+44)
lw r12, (sp+48)
lw r13, (sp+52)
lw r14, (sp+56)
lw r15, (sp+60)
lw r16, (sp+64)
lw r17, (sp+68)
lw r18, (sp+72)
lw r19, (sp+76)
lw r20, (sp+80)
lw r21, (sp+84)
lw r22, (sp+88)
lw r23, (sp+92)
lw r24, (sp+96)
lw r25, (sp+100)
lw r26, (sp+104)
lw r27, (sp+108)
lw ra, (sp+116)
lw ea, (sp+120)
lw ba, (sp+124)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+112)
#else
lw ra, (sp+48)
lw ea, (sp+52)
lw ba, (sp+56)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+44)
#endif
nop
eret
.size _restore_all_and_return, .-_restore_all_and_return
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment