Clean up FPGA reset
This commit is contained in:
parent
75833de0a3
commit
3fff60832f
|
@ -94,7 +94,7 @@ package puzzlefw_pkg is
|
||||||
-- Firmware info word.
|
-- Firmware info word.
|
||||||
constant fw_api_version: natural := 1;
|
constant fw_api_version: natural := 1;
|
||||||
constant fw_version_major: natural := 0;
|
constant fw_version_major: natural := 0;
|
||||||
constant fw_version_minor: natural := 11;
|
constant fw_version_minor: natural := 12;
|
||||||
constant fw_info_word: std_logic_vector(31 downto 0) :=
|
constant fw_info_word: std_logic_vector(31 downto 0) :=
|
||||||
x"4a"
|
x"4a"
|
||||||
& std_logic_vector(to_unsigned(fw_api_version, 8))
|
& std_logic_vector(to_unsigned(fw_api_version, 8))
|
||||||
|
|
|
@ -72,11 +72,11 @@ architecture arch of puzzlefw_top is
|
||||||
signal clk_fclk: std_logic;
|
signal clk_fclk: std_logic;
|
||||||
|
|
||||||
-- Reset signals.
|
-- Reset signals.
|
||||||
signal s_gpio_reset_n: std_logic; -- reset signal from GPIO, active low
|
signal s_ext_reset_n: std_logic; -- reset signal from GPIO, active low
|
||||||
signal s_pll_reset: std_logic; -- reset signal for PLL
|
signal s_pll_reset: std_logic; -- reset signal for PLL
|
||||||
signal s_pll_locked: std_logic; -- PLL locked status
|
signal s_pll_locked: std_logic; -- PLL locked status
|
||||||
signal s_ext_reset_n: std_logic; -- reset signal for processing system
|
|
||||||
signal s_reset: std_logic; -- main reset, synchronized to clk_adc
|
signal s_reset: std_logic; -- main reset, synchronized to clk_adc
|
||||||
|
signal r_reset_done: std_logic; -- reset status report via GPIO
|
||||||
|
|
||||||
-- Internal clock signals.
|
-- Internal clock signals.
|
||||||
signal s_adc_clk_ibuf: std_logic;
|
signal s_adc_clk_ibuf: std_logic;
|
||||||
|
@ -181,7 +181,7 @@ begin
|
||||||
|
|
||||||
-- Global FPGA reset.
|
-- Global FPGA reset.
|
||||||
-- GPIO(0) = '0' to reset.
|
-- GPIO(0) = '0' to reset.
|
||||||
s_gpio_reset_n <= s_gpio_out(0);
|
s_ext_reset_n <= s_gpio_out(0);
|
||||||
|
|
||||||
-- ADC clock duty cycle stabilizer.
|
-- ADC clock duty cycle stabilizer.
|
||||||
-- GPIO(2) = '1' to enable, '0' to disable.
|
-- GPIO(2) = '1' to enable, '0' to disable.
|
||||||
|
@ -189,7 +189,7 @@ begin
|
||||||
|
|
||||||
-- GPIO inputs to the PS.
|
-- GPIO inputs to the PS.
|
||||||
-- GPIO(1) = '0' while in reset, '1' when reset released.
|
-- GPIO(1) = '0' while in reset, '1' when reset released.
|
||||||
s_gpio_in(1) <= not s_reset;
|
s_gpio_in(1) <= r_reset_done;
|
||||||
s_gpio_in(0) <= '0';
|
s_gpio_in(0) <= '0';
|
||||||
s_gpio_in(23 downto 2) <= (others => '0');
|
s_gpio_in(23 downto 2) <= (others => '0');
|
||||||
|
|
||||||
|
@ -247,10 +247,7 @@ begin
|
||||||
CLKFBIN => s_pll_clkfbin );
|
CLKFBIN => s_pll_clkfbin );
|
||||||
|
|
||||||
-- Reset PLL when external reset is applied.
|
-- Reset PLL when external reset is applied.
|
||||||
s_pll_reset <= not s_gpio_reset_n;
|
s_pll_reset <= not s_ext_reset_n;
|
||||||
|
|
||||||
-- Reset processing system when PLL is not locked.
|
|
||||||
s_ext_reset_n <= s_gpio_reset_n and s_pll_locked;
|
|
||||||
|
|
||||||
-- Clock buffers for PLL.
|
-- Clock buffers for PLL.
|
||||||
inst_bufg_pll_clkfb: BUFG
|
inst_bufg_pll_clkfb: BUFG
|
||||||
|
@ -270,6 +267,7 @@ begin
|
||||||
ps_fclk => clk_fclk,
|
ps_fclk => clk_fclk,
|
||||||
peripheral_reset_0(0) => s_reset,
|
peripheral_reset_0(0) => s_reset,
|
||||||
ext_reset_in_0 => s_ext_reset_n,
|
ext_reset_in_0 => s_ext_reset_n,
|
||||||
|
dcm_locked_0 => s_pll_locked,
|
||||||
DDR_0_addr => DDR_0_addr,
|
DDR_0_addr => DDR_0_addr,
|
||||||
DDR_0_ba => DDR_0_ba,
|
DDR_0_ba => DDR_0_ba,
|
||||||
DDR_0_cas_n => DDR_0_cas_n,
|
DDR_0_cas_n => DDR_0_cas_n,
|
||||||
|
@ -643,11 +641,24 @@ begin
|
||||||
s_irq_f2p(0) <= s_reg_control.irq_enable and or_reduce(s_irq_pending);
|
s_irq_f2p(0) <= s_reg_control.irq_enable and or_reduce(s_irq_pending);
|
||||||
s_irq_f2p(7 downto 1) <= (others => '0');
|
s_irq_f2p(7 downto 1) <= (others => '0');
|
||||||
|
|
||||||
|
-- Report reset status via GPIO.
|
||||||
|
process (clk_adc, s_ext_reset_n) is
|
||||||
|
begin
|
||||||
|
if s_ext_reset_n = '0' then
|
||||||
|
r_reset_done <= '0';
|
||||||
|
elsif rising_edge(clk_adc) then
|
||||||
|
r_reset_done <= not s_reset;
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
|
||||||
-- Blinking LED, 1 Hz.
|
-- Blinking LED, 1 Hz.
|
||||||
process (clk_adc) is
|
process (clk_adc) is
|
||||||
begin
|
begin
|
||||||
if rising_edge(clk_adc) then
|
if rising_edge(clk_adc) then
|
||||||
if r_adcclk_cnt = 62499999 then
|
if s_reset = '1' then
|
||||||
|
r_adcclk_cnt <= (others => '0');
|
||||||
|
r_adcclk_led <= '0';
|
||||||
|
elsif r_adcclk_cnt = 62499999 then
|
||||||
r_adcclk_cnt <= (others => '0');
|
r_adcclk_cnt <= (others => '0');
|
||||||
r_adcclk_led <= not r_adcclk_led;
|
r_adcclk_led <= not r_adcclk_led;
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"design": {
|
"design": {
|
||||||
"design_info": {
|
"design_info": {
|
||||||
"boundary_crc": "0x9117A810100AEEF7",
|
"boundary_crc": "0xFEDCCBE640F58A4D",
|
||||||
"device": "xc7z010clg400-1",
|
"device": "xc7z010clg400-1",
|
||||||
"gen_directory": "../../../../redpitaya_puzzlefw.gen/sources_1/bd/puzzlefw",
|
"gen_directory": "../../../../redpitaya_puzzlefw.gen/sources_1/bd/puzzlefw",
|
||||||
"name": "puzzlefw",
|
"name": "puzzlefw",
|
||||||
|
@ -330,6 +330,9 @@
|
||||||
},
|
},
|
||||||
"SPI0_MOSI_T_0": {
|
"SPI0_MOSI_T_0": {
|
||||||
"direction": "O"
|
"direction": "O"
|
||||||
|
},
|
||||||
|
"dcm_locked_0": {
|
||||||
|
"direction": "I"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"components": {
|
"components": {
|
||||||
|
@ -1747,6 +1750,12 @@
|
||||||
"xlconstant_0/dout",
|
"xlconstant_0/dout",
|
||||||
"processing_system7_0/SPI0_SS_I"
|
"processing_system7_0/SPI0_SS_I"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"dcm_locked_0_1": {
|
||||||
|
"ports": [
|
||||||
|
"dcm_locked_0",
|
||||||
|
"proc_sys_reset_0/dcm_locked"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"addressing": {
|
"addressing": {
|
||||||
|
|
Loading…
Reference in New Issue