From 165cf24bc7b9a731401295d7475789f91a8fc019 Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Sun, 26 May 2019 18:19:15 +0800 Subject: [PATCH] factory-bitstream: rework led to fix pulse counter Now we count the number of transitions. Signed-off-by: Sean Cross --- hw/factory-bitstream.py | 67 +++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/hw/factory-bitstream.py b/hw/factory-bitstream.py index ec01429..739f059 100644 --- a/hw/factory-bitstream.py +++ b/hw/factory-bitstream.py @@ -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"