Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC DEL 1ns 2cha
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
9
Issues
9
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
FMC DEL 1ns 2cha
Commits
548e07d3
Commit
548e07d3
authored
Aug 16, 2016
by
Jan Pospisil
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added OneWire function (not working yet); added calculation for pulse configuration
parent
811d92b0
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
114 additions
and
10 deletions
+114
-10
FFPG_driver.py
sw/FFPG_driver.py
+114
-10
No files found.
sw/FFPG_driver.py
View file @
548e07d3
...
...
@@ -21,7 +21,7 @@ class ConColors:
m
=
encoreio
.
Module
.
get_instance
(
'fmc_fpg'
,
0
)
WB_DEBUG
=
True
WB_DEBUG_2_SV
=
Tru
e
WB_DEBUG_2_SV
=
Fals
e
WB_DEBUG_2_SV_FILE
=
'wb_trace.svh'
###################################################################
...
...
@@ -370,6 +370,79 @@ def Debug():
PrintBits
(
debug
,
0
,
2
,
"CH1 FSM state"
,
(
"Stop"
,
"WaitForTrigger"
,
"Generating"
,
"Outputting"
))
PrintBits
(
debug
,
3
,
5
,
"CH2 FSM state"
,
(
"Stop"
,
"WaitForTrigger"
,
"Generating"
,
"Outputting"
))
###################################################################
## OneWire stuff
###################################################################
OW_CMD_ROM_SEARCH
=
0xF0
OW_CMD_ROM_READ
=
0x33
OW_CMD_ROM_MATCH
=
0x55
OW_CMD_ROM_SKIP
=
0xCC
OW_CMD_ALARM_SEARCH
=
0xEC
OW_CMD_CONVERT_T
=
0x44
OW_CMD_WRITE_SCRATCHPAD
=
0x4E
OW_CMD_READ_SCRATCHPAD
=
0xBE
OW_CMD_COPY_SCRATCHPAD
=
0x48
OW_CMD_RECALL_E_2
=
0xB8
OW_CMD_READ_POWER_SUPPLY
=
0xB4
# overdrive: 0 - normal mode / 1 - overdrive mode
def
OneWireReset
(
overdrive
=
0
):
print
'OW: reset'
WbWrite
(
'onewire_ctrl_sta'
,
0x08
|
(
overdrive
<<
2
)
|
0x02
)
reg
=
WbRead
(
'onewire_ctrl_sta'
)
while
(
0x08
&
reg
):
reg
=
WbRead
(
'onewire_ctrl_sta'
)
reg
&=
0x01
print
'OW: presence = '
+
str
(
reg
)
return
reg
def
OneWireSlot
(
bit
,
overdrive
=
0
):
WbWrite
(
'onewire_ctrl_sta'
,
0x08
|
(
overdrive
<<
2
)
|
bit
)
reg
=
WbRead
(
'onewire_ctrl_sta'
)
while
(
0x08
&
reg
):
reg
=
WbRead
(
'onewire_ctrl_sta'
)
return
reg
&
0x01
def
OneWireReadBit
(
overdrive
=
0
):
result
=
OneWireSlot
(
overdrive
,
1
)
print
'OW: read bit = '
+
str
(
result
)
return
result
def
OneWireWriteBit
(
bit
,
overdrive
=
0
):
print
'OW: write bit('
+
str
(
bit
)
+
')'
OneWireSlot
(
overdrive
,
bit
)
def
OneWireRead
(
overdrive
=
0
):
result
=
0
;
for
i
in
range
(
8
):
result
|=
OneWireReadBit
(
overdrive
)
result
<<=
1
print
'OW: read = '
+
hex
(
result
)
return
result
def
OneWireWrite
(
byte
,
overdrive
=
0
):
print
'OW: write('
+
hex
(
byte
)
+
')'
for
i
in
range
(
8
):
OneWireWriteBit
(
byte
&
1
,
overdrive
)
byte
>>=
1
def
OneWireReadRom
(
overdrive
=
0
):
presence
=
OneWireReset
(
overdrive
)
if
presence
==
0
:
print
'OW Thermometer is not present!'
return
OneWireWrite
(
OW_CMD_ROM_READ
,
overdrive
)
print
hex
(
OneWireRead
())
print
hex
(
OneWireRead
())
print
hex
(
OneWireRead
())
print
hex
(
OneWireRead
())
print
hex
(
OneWireRead
())
print
hex
(
OneWireRead
())
print
hex
(
OneWireRead
())
print
hex
(
OneWireRead
())
###################################################################
## Test functions
###################################################################
...
...
@@ -383,10 +456,25 @@ def Init(memoryPart = -1):
SetVcxoFrequency
(
-
0.2105
)
# 125.0000 MHz
ClearMemory
(
0
,
'*'
,
memoryPart
)
# time 't' is in [ns] - same as other times
# output: (bit, delay)
# bit - position of the bit to set
# delay - delay parameter to be set
def
CalculateParams
(
t
):
rfPeriod
=
4.99
delayOffset
=
3.739
bit
=
int
(
t
/
rfPeriod
)
# bit position
rest
=
t
-
bit
*
rfPeriod
# in ns
rest
+=
delayOffset
delay
=
int
(
round
(
rest
*
100
))
# delay IC value
return
(
bit
,
delay
)
def
TestPulse
(
channel
=
1
,
overflow
=
17820
):
# configure channel
WbWrite
(
'overflow'
,
overflow
)
WbWrite
(
'trig_latency'
,
8
)
WbWrite
(
'trig_latency'
,
11
)
# start = 5
# length = 20
...
...
@@ -407,25 +495,40 @@ def TestPulse(channel = 1, overflow = 17820):
# CreatePulse(channel, 13, 23)
# CreatePulse(channel, 14, 24)
CreatePulse
(
channel
,
5
,
10
)
CreatePulse
(
channel
,
20
,
50
)
CreatePulse
(
channel
,
100
,
300
)
# CreatePulse(channel, 5, 10)
# CreatePulse(channel, 20, 50)
# CreatePulse(channel, 100, 300)
# all times in ns
pulseDelay
=
4.87
pulseWidth
=
12.3
(
setBit
,
setDelay
)
=
CalculateParams
(
pulseDelay
)
(
resBit
,
resDelay
)
=
CalculateParams
(
pulseDelay
+
pulseWidth
)
CreatePulse
(
channel
,
setBit
,
resBit
)
WbWrite
(
'ch'
+
str
(
channel
)
+
'_delay_set'
,
100
)
WbWrite
(
'ch'
+
str
(
channel
)
+
'_delay_res'
,
500
)
WbWrite
(
'ch'
+
str
(
channel
)
+
'_delay_set'
,
setDelay
)
WbWrite
(
'ch'
+
str
(
channel
)
+
'_delay_res'
,
resDelay
+
18
)
Enable
(
channel
)
Start
Once
(
channel
)
Start
(
channel
)
Init
(
15
)
# Init(15)
Init
()
Control
()
Status
()
TestPulse
(
1
,
400
)
# TestPulse(1, 600)
TestPulse
(
1
)
# TestPulse(2)
Control
()
Status
()
Debug
()
# OneWireReadRom(1) # does not work :/
###################################################################
## debug ending
###################################################################
...
...
@@ -434,3 +537,4 @@ if WB_DEBUG_2_SV:
WB_DEBUG_2_SV_FP
.
write
(
'
\n
'
)
WB_DEBUG_2_SV_FP
.
write
(
'$display("Error count:
%0
d
\\
n", errors);
\n
'
)
WB_DEBUG_2_SV_FP
.
close
()
WB_DEBUG_2_SV
=
False
\ No newline at end of file
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