Entity: axi_dmac_reset_manager

Diagram

ASYNC_CLK_REQ_SRC ASYNC_CLK_SRC_DEST ASYNC_CLK_DEST_REQ clk resetn ctrl_enable ctrl_pause req_enabled dest_clk dest_ext_resetn dest_enabled src_clk src_ext_resetn src_enabled req_resetn req_enable dest_resetn dest_enable src_resetn src_enable [11:0] dbg_status

Description



Copyright 2014 - 2018 (c) Analog Devices, Inc. All rights reserved.

In this HDL repository, there are many different and unique modules, consisting of various HDL (Verilog or VHDL) components. The individual modules are developed independently, and may be accompanied by separate and unique license terms.

The user should read each of these license terms, and understand the freedoms and responsibilities that he or she has by using this source/core.

This core is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Redistribution and use of source or resulting binaries, with or without modification of this file, are permitted under one of the following two license terms:

  1. The GNU General Public License version 2 as published by the Free Software Foundation, which can be found in the top level directory of this repository (LICENSE_GPL2), and also online at: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html

OR

  1. An ADI specific BSD license, which can be found in the top level directory of this repository (LICENSE_ADIBSD), and also on-line at: https://github.com/analogdevicesinc/hdl/blob/master/LICENSE_ADIBSD This will allow to generate bit files and not release the source code, as long as it attaches to an ADI device.


Generics

Generic name Type Value Description
ASYNC_CLK_REQ_SRC 1
ASYNC_CLK_SRC_DEST 1
ASYNC_CLK_DEST_REQ 1

Ports

Port name Direction Type Description
clk input
resetn input
ctrl_enable input
ctrl_pause input
req_resetn output
req_enable output
req_enabled input
dest_clk input
dest_ext_resetn input
dest_resetn output
dest_enable output
dest_enabled input
src_clk input
src_ext_resetn input
src_resetn output
src_enable output
src_enabled input
dbg_status output [11:0]

Signals

Name Type Description
state reg [2:0]
needs_reset reg
do_reset reg
do_enable reg
enabled_dest wire
enabled_src wire
enabled_all wire
disabled_all wire
reset_async_chain wire [3:0] * Chain the reset through all clock domains. This makes sure that is asserted * for at least 4 clock cycles of the slowest domain, no matter what. If * successive domains have the same clock they'll share their reset signal. */
reset_sync_chain wire [3:0]
reset_chain_clks wire [2:0]

Constants

Name Type Value Description
STATE_DO_RESET 3'h0 * TODO: * If an external reset is asserted for a domain that domain will go into reset * immediately. If a transfer is currently active the transfer will be aborted * and other domains will be shutdown gracefully. The reset manager will stay in * the shutdown state until all external resets have been de-asserted. */
STATE_RESET 3'h1
STATE_DISABLED 3'h2
STATE_STARTUP 3'h3
STATE_ENABLED 3'h4
STATE_SHUTDOWN 3'h5
GEN_ASYNC_RESET undefined

Processes

Type: always

Type: always

Type: always

Description

  • If ctrl_enable goes from 1 to 0 a shutdown procedure is initiated. During the * shutdown procedure all domains are signaled that a shutdown should occur. The * domains will then complete any active transactions that are required to * complete according to the interface semantics. Once a domain has completed * its transactions it will indicate that it has been shutdown. Once all domains * indicate that they have been disabled a reset pulse will be generated to all * domains to clear all residual state. The reset pulse is long enough so that it * is active in all domains for at least 4 clock cycles. * * Once the reset signal is de-asserted the DMA is in an idle state and can be * enabled again. If the DMA receives a enable while it is performing a shutdown * sequence it will only be re-enabled once the shutdown sequence has * successfully completed. * * If ctrl_pause is asserted all domains will be disabled. But there will be no * reset, so when the ctrl_pause signal is de-asserted again the DMA will resume * with its previous state. * */
    * If ctrl_enable goes low, even for a single clock cycle, we want to go through * a full reset sequence. This might happen when the state machine is busy, e.g. * going through a startup sequence. To avoid missing the event store it for * later. */

Type: always

Instantiations

State machines

state transitions cluster_state state STATE_DO_RESET STATE_DO_RESET STATE_RESET STATE_RESET STATE_DO_RESET->STATE_RESET STATE_DISABLED STATE_DISABLED STATE_RESET->STATE_DISABLED ctrl_enable == 1'b1 && req_resetn == 1'b1    STATE_DISABLED->STATE_DO_RESET needs_reset == 1'b1    STATE_STARTUP STATE_STARTUP STATE_DISABLED->STATE_STARTUP ctrl_pause == 1'b0    STATE_ENABLED STATE_ENABLED STATE_STARTUP->STATE_ENABLED enabled_all == 1'b1    STATE_SHUTDOWN STATE_SHUTDOWN STATE_ENABLED->STATE_SHUTDOWN needs_reset == 1'b1 || ctrl_pause == 1'b1    STATE_SHUTDOWN->STATE_DISABLED disabled_all == 1'b1