factory-bitstream: rework led to fix pulse counter
Now we count the number of transitions. Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
parent
18178e4a71
commit
165cf24bc7
@ -343,14 +343,18 @@ class SBLED(Module, AutoCSR):
|
||||
|
||||
count = Signal(24)
|
||||
led_value = Signal()
|
||||
last_led_value = Signal()
|
||||
rgb = Signal(3)
|
||||
sent_pulses = Signal(32)
|
||||
detected_pulses = Signal(32)
|
||||
rgba_drv = Signal(3)
|
||||
|
||||
last_detected_val = Signal()
|
||||
|
||||
self.sync += [
|
||||
last_led_value.eq(led_value),
|
||||
If(last_detected_val != detected_pulse,
|
||||
detected_pulses.eq(detected_pulses + 1),
|
||||
),
|
||||
last_detected_val.eq(detected_pulse),
|
||||
# When the PWM count is updated, reset everything and
|
||||
# copy the results out.
|
||||
If(self.pulse.re,
|
||||
@ -368,18 +372,11 @@ class SBLED(Module, AutoCSR):
|
||||
count.eq(count + 1),
|
||||
If(count < self.duty.storage,
|
||||
led_value.eq(0),
|
||||
).Elif(count == self.duty.storage,
|
||||
led_value.eq(1),
|
||||
sent_pulses.eq(sent_pulses + 1),
|
||||
).Else(
|
||||
led_value.eq(1),
|
||||
|
||||
# On the transition from 0 > 1, increment the counter
|
||||
# and see if the LED has changed. If so, increment
|
||||
# the number of detected pulses.
|
||||
If(~last_led_value,
|
||||
sent_pulses.eq(sent_pulses + 1),
|
||||
If(detected_pulse,
|
||||
detected_pulses.eq(detected_pulses + 1),
|
||||
),
|
||||
),
|
||||
),
|
||||
).Else(
|
||||
# Reset the count once it gets greater than "Pulse"
|
||||
@ -388,6 +385,47 @@ class SBLED(Module, AutoCSR):
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
# last_led_value = Signal()
|
||||
# self.sync += [
|
||||
# last_led_value.eq(led_value),
|
||||
# # When the PWM count is updated, reset everything and
|
||||
# # copy the results out.
|
||||
# If(self.pulse.re,
|
||||
# count.eq(0),
|
||||
|
||||
# self.sent_pulses.status.eq(sent_pulses),
|
||||
# sent_pulses.eq(0),
|
||||
|
||||
# self.detected_pulses.status.eq(detected_pulses),
|
||||
# detected_pulses.eq(0),
|
||||
|
||||
# led_value.eq(0),
|
||||
|
||||
# ).Elif(count < self.pulse.storage,
|
||||
# count.eq(count + 1),
|
||||
# If(count < self.duty.storage,
|
||||
# led_value.eq(0),
|
||||
# ).Else(
|
||||
# led_value.eq(1),
|
||||
|
||||
# # On the transition from 0 > 1, increment the counter
|
||||
# # and see if the LED has changed. If so, increment
|
||||
# # the number of detected pulses.
|
||||
# If(~last_led_value,
|
||||
# sent_pulses.eq(sent_pulses + 1),
|
||||
# If(detected_pulse,
|
||||
# detected_pulses.eq(detected_pulses + 1),
|
||||
# ),
|
||||
# ),
|
||||
# ),
|
||||
# ).Else(
|
||||
# # Reset the count once it gets greater than "Pulse"
|
||||
# count.eq(0),
|
||||
# led_value.eq(0),
|
||||
# ),
|
||||
# ]
|
||||
|
||||
# Wire up the bypasses
|
||||
self.comb += [
|
||||
If(self.bypass.storage[0],
|
||||
@ -417,6 +455,9 @@ class SBLED(Module, AutoCSR):
|
||||
o_RGB1 = pads.rgb1,
|
||||
o_RGB2 = pads.rgb2,
|
||||
p_CURRENT_MODE = "0b1", # Half current
|
||||
# p_RGB0_CURRENT = "0b111111", # 12 mA
|
||||
# p_RGB1_CURRENT = "0b111111", # 12 mA
|
||||
# p_RGB2_CURRENT = "0b111111", # 12 mA
|
||||
p_RGB0_CURRENT = "0b000011", # 4 mA
|
||||
p_RGB1_CURRENT = "0b000011", # 4 mA
|
||||
p_RGB2_CURRENT = "0b000011", # 4 mA
|
||||
@ -858,7 +899,7 @@ class BaseSoC(SoCCore):
|
||||
# and the "-dffe_min_ce_use 4" flag prevents Yosys from generating a
|
||||
# Clock Enable signal for a LUT that has fewer than 4 flip-flops.
|
||||
# This increases density, and lets us use the FPGA more efficiently.
|
||||
platform.toolchain.nextpnr_yosys_template[2] += " -relut -dffe_min_ce_use 4"
|
||||
platform.toolchain.nextpnr_yosys_template[2] += " -relut -dffe_min_ce_use 5"
|
||||
if use_dsp:
|
||||
platform.toolchain.nextpnr_yosys_template[2] += " -dsp"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user