From 1ea8951b542ffebb30a44b898d4d13117cbe5e37 Mon Sep 17 00:00:00 2001 From: Raptor Engineering Development Team Date: Wed, 17 Jan 2018 06:43:12 -0600 Subject: Correct polarity of BMC boot complete signal Use fading startup pattern instead of prior KR pattern --- main.v | 46 ++++++++++++++++++++++++++++++++++++++-------- system_fpga.pcf | 2 +- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/main.v b/main.v index b535f05..2ffb23a 100644 --- a/main.v +++ b/main.v @@ -65,7 +65,7 @@ module system_fpga_top // Resets output reg lpc_rst, - input wire bmc_software_pg, + input wire bmc_boot_complete_n, output reg bmc_rst, output reg fan_rst, output reg usbhub_rst, @@ -263,6 +263,7 @@ module system_fpga_top wire panel_nic2_led_cathode_std; wire panel_uid_led_std; reg [2:0] bmc_startup_kr = 3'b000; + reg [2:0] bmc_startup_fader = 3'b000; // Implement nasty ring oscillator for fallback use when main system clock is offline // Thanks to Clifford Wolf for the idea and basic code! @@ -355,7 +356,36 @@ module system_fpga_top end endcase end - + + // Generate fading lamp test for front panel + wire fader_clk; + reg [12:0] fader_clk_counter; + always @(posedge clk_in) begin + fader_clk_counter <= fader_clk_counter + 1; + end + assign fader_clk = fader_clk_counter[12]; + + reg [5:0] fader_pwm_level = 0; + reg [6:0] fader_pwm_internal_counter = 0; + always @(posedge fader_clk) begin + fader_pwm_internal_counter = fader_pwm_internal_counter + 1; + if (fader_pwm_internal_counter >= 64) begin + fader_pwm_level = 63 - (fader_pwm_internal_counter - 64); + end else begin + fader_pwm_level = fader_pwm_internal_counter; + end + end + + reg [5:0] fader_pwm_counter = 0; + always @(posedge clk_in) begin + fader_pwm_counter = fader_pwm_counter + 1; + if (fader_pwm_counter >= fader_pwm_level) begin + bmc_startup_fader = 3'b000; + end else begin + bmc_startup_fader = 3'b111; + end + end + assign i2c_rst = 1'b0; // Handle I2C // 2 8-bit registers with PGOOD state on error @@ -753,7 +783,7 @@ module system_fpga_top // System PWRGOOD always @(posedge clk_in) begin sysgood_buf = delay_done[14]; - sysgood = sysgood_buf & bmc_software_pg; + sysgood = sysgood_buf & ~bmc_boot_complete_n; lpc_rst = sysgood_buf; end @@ -765,7 +795,7 @@ module system_fpga_top // BMC RESETs always @(posedge clk_in) begin bmc_rst = bmc_vr_pg; - usbhub_rst = sysgood_buf & bmc_software_pg; + usbhub_rst = sysgood_buf & ~bmc_boot_complete_n; fan_rst = bmc_vr_pg; end @@ -803,14 +833,14 @@ module system_fpga_top // Assign front panel indicators according to BMC status always @(posedge clk_in) begin - if (bmc_software_pg) begin + if (!bmc_boot_complete_n) begin panel_nic1_led_cathode = panel_nic1_led_cathode_std; panel_nic2_led_cathode = panel_nic2_led_cathode_std; panel_uid_led = panel_uid_led_std; end else begin - panel_nic1_led_cathode = bmc_startup_kr[0]; - panel_nic2_led_cathode = bmc_startup_kr[1]; - panel_uid_led = bmc_startup_kr[2]; + panel_nic1_led_cathode = bmc_startup_fader[0]; + panel_nic2_led_cathode = bmc_startup_fader[1]; + panel_uid_led = bmc_startup_fader[2]; end end diff --git a/system_fpga.pcf b/system_fpga.pcf index ce653c6..29c5879 100644 --- a/system_fpga.pcf +++ b/system_fpga.pcf @@ -85,7 +85,7 @@ set_io cpub_clk_oeb 9 # Resets set_io lpc_rst 82 -set_io bmc_software_pg 8 +set_io bmc_boot_complete_n 8 set_io bmc_rst 83 set_io fan_rst 1 set_io usbhub_rst 87 -- cgit v1.2.1