Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
V
VME64x core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
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
VME64x core
Commits
e02c9e0f
Commit
e02c9e0f
authored
Jan 27, 2020
by
Tristan Gingold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vme_bus: add setup time.
parent
ef710744
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
6 deletions
+29
-6
vme_bus.vhd
hdl/rtl/vme_bus.vhd
+29
-6
No files found.
hdl/rtl/vme_bus.vhd
View file @
e02c9e0f
...
...
@@ -68,6 +68,15 @@ entity vme_bus is
vme_iack_n_i
:
in
std_logic
;
vme_iackout_n_o
:
out
std_logic
;
-- Setup and hold times for dtack (in number of cycles).
-- [3:0] is the hold time for 160MB/s
-- [7:4] setup
-- [11:8] hold 266MB/s
-- [15:12] setup
-- [19:16] hold 320MB/s
-- [23:20] setup
data_timing
:
in
std_logic_vector
(
23
downto
0
)
:
=
x"11_22_22"
;
-- WB signals
wb_stb_o
:
out
std_logic
;
wb_ack_i
:
in
std_logic
;
...
...
@@ -222,9 +231,11 @@ architecture rtl of vme_bus is
signal
s_DS_latch_count
:
unsigned
(
2
downto
0
);
signal
s_setup
:
unsigned
(
3
downto
0
);
-- WB FSM states
type
t_WBFSMstates
is
(
-- Wait until the Main FSM issues a WB cycle.
-- Wait until the Main FSM issues a WB cycle.
IDLE
,
-- Wait for WB reply
...
...
@@ -452,9 +463,14 @@ begin
vme_odff_addr_dir
<=
'1'
;
vme_odff_data_dir
<=
'1'
;
vme_dtack_async_ctrl
<=
'1'
;
if
s_setup
=
0
then
-- Do not assert dtack before setup cycles.
vme_dtack_async_ctrl
<=
'1'
;
else
s_setup
<=
s_setup
-
1
;
end
if
;
vme_odff_addr
<=
data_reg
(
63
downto
33
);
vme_odff_addr
<=
data_reg
(
63
downto
33
);
vme_odff_lword_n
<=
data_reg
(
32
);
vme_odff_data
<=
data_reg
(
31
downto
0
);
end
if
;
...
...
@@ -479,7 +495,7 @@ begin
vme_odff_addr_dir
<=
'1'
;
vme_odff_data_dir
<=
'1'
;
if
s_wb_done
=
'1'
then
if
s_wb_done
=
'1'
and
s_setup
=
0
then
-- Prefetch.
s_wb_start
<=
'1'
;
...
...
@@ -501,6 +517,8 @@ begin
end
if
;
when
LATCH_DS
=>
-- At least one DS line is asserted. Wait a little bit to check
-- if both are asserted or not.
-- This state is necessary indeed the VME master can assert the
-- DS lines not at the same time.
vme_odff_dtack_oe
<=
'1'
;
...
...
@@ -528,7 +546,8 @@ begin
s_mainFSMstate
<=
DTACK_LOW
;
if
vme_idff_write_n
=
'1'
then
-- Can fetch the first data.
-- Can fetch the first data. Cannot be done before
-- because we need to know that this is a read access.
s_wb_start
<=
'1'
;
end
if
;
else
...
...
@@ -575,6 +594,7 @@ begin
if
s_conf_sel
=
'1'
or
s_wb_done
=
'1'
or
s_irq_sel
=
'1'
then
vme_odff_data_dir
<=
vme_idff_write_n
;
-- Put data (only enabled on read.)
if
g_VME32
then
-- only for MBLT
vme_odff_addr
<=
data_reg
(
63
downto
33
);
...
...
@@ -638,11 +658,14 @@ begin
vme_odff_addr_dir
<=
'0'
;
else
-- Any block transfer.
if
g_VME32
and
s_transferType
=
MBLT
and
s_MBLT_Data
=
'0'
then
if
g_VME32
and
s_transferType
=
MBLT
then
-- MBLT: end of address phase.
s_MBLT_Data
<=
'1'
;
end
if
;
-- Load the setup counter.
s_setup
<=
unsigned
(
data_timing
(
7
downto
4
));
-- Keep same direction for data and address.
s_mainFSMstate
<=
WAIT_FOR_DS
;
end
if
;
...
...
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