| Signal Processing Blockset™ | ![]() |
Signal Management / Buffers
dspbuff3
The Stack block stores a sequence of input samples in a last in, first out (LIFO) register. The register capacity is set by the Stack depth parameter, and inputs can be scalars, vectors, or matrices.
The block pushes the input at the In port onto the top of the stack when a trigger event is received at the Push port. When a trigger event is received at the Pop port, the block pops the top element off the stack and holds the Out port at that value. The last input to be pushed onto the stack is always the first to be popped off.

A trigger event at the optional Rst port empties the stack contents. When you select Clear output port on reset, then a trigger event at the Rst port empties the stack and sets the value at the Out port to zero. This setting also applies when a disabled subsystem containing the Stack block is reenabled; the Out port value is only reset to zero in this case when you select Clear output port on reset.
When two or more of the control input ports are triggered at the same time step, the operations are executed in the following order:
The rate of the trigger signal must be the same as the rate of the data signal input. You specify the triggering event for the Push, Pop, and Rst ports in the Trigger type pop-up menu:
Rising edge — Triggers execution of the block when the trigger input does one of the following:
Rises from a negative value to a positive value or zero
Rises from zero to a positive value, where the rise is not a continuation of a rise from a negative value to zero (see the following figure)

Falling edge — Triggers execution of the block when the trigger input does one of the following:
Falls from a positive value to a negative value or zero
Falls from zero to a negative value, where the fall is not a continuation of a fall from a positive value to zero (see the following figure)

Either edge — Triggers execution of the block when the trigger input is a Rising edge or Falling edge (as described above).
Non-zero sample — Triggers execution of the block at each sample time that the trigger input is not zero.
Note When running simulations in the Simulink® MultiTasking mode, sample-based trigger signals have a one-sample latency, and frame-based trigger signals have one frame of latency. Thus, there is a one-sample or one-frame delay between the time the block detects a trigger event, and when it applies the trigger. For more information on latency and the Simulink tasking modes, see Excess Algorithmic Delay (Tasking Latency) and Models with Multiple Sample Rates in the Real-Time Workshop® User's Guide. |
The Push full stack parameter specifies the block's behavior when a trigger is received at the Push port but the register is full. The Pop empty stack parameter specifies the block's behavior when a trigger is received at the Pop port but the register is empty. The following options are available for both cases:
Ignore — Ignore the trigger event, and continue the simulation.
Warning — Ignore the trigger event, but display a warning message in the MATLAB® command window.
Error — Display an error dialog box and terminate the simulation.
The Push full stack parameter additionally offers the Dynamic reallocation option, which dynamically resizes the register to accept as many additional inputs as memory permits. To find out how many elements are on the stack at a given time, enable the Num output port by selecting the Show number of stack entries port parameter.
Note When Dynamic reallocation is selected, the System target file parameter on the Real-Time Workshop pane of the Configuration Parameters dialog box must be set to grt_malloc.tlc – Generic Real-Time Target with dynamic memory allocation. |
The table below illustrates the Stack block's operation for a Stack depth of 4, Trigger type of Either edge, and Clear output port on reset enabled. Because the block triggers on both rising and falling edges in this example, each transition from 1 to 0 or 0 to 1 in the Push, Pop, and Rst columns below represents a distinct trigger event. A 1 in the Empty column indicates an empty buffer, while a 1 in the Full column indicates a full buffer.
In | Push | Pop | Rst | Stack | Out | Empty | Full | Num |
|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 |
2 | 1 | 0 | 0 |
| 0 | 0 | 0 | 1 |
3 | 0 | 0 | 0 |
| 0 | 0 | 0 | 2 |
4 | 1 | 0 | 0 |
| 0 | 0 | 0 | 3 |
5 | 0 | 0 | 0 |
| 0 | 0 | 1 | 4 |
6 | 0 | 1 | 0 |
| 5 | 0 | 0 | 3 |
7 | 0 | 0 | 0 |
| 4 | 0 | 0 | 2 |
8 | 0 | 1 | 0 |
| 3 | 0 | 0 | 1 |
9 | 0 | 0 | 0 |
| 2 | 1 | 0 | 0 |
10 | 1 | 0 | 0 |
| 2 | 0 | 0 | 1 |
11 | 0 | 0 | 0 |
| 2 | 0 | 0 | 2 |
12 | 1 | 0 | 1 |
| 0 | 0 | 0 | 1 |
Note that at the last step shown, the Push and Rst ports are triggered simultaneously. The Rst trigger takes precedence, and the stack is first cleared and then pushed.
The dspqdemo demo provides an example of the related Queue block.

The number of entries that the LIFO register can hold.
The type of event that triggers the block's execution. The rate of the trigger signal must be the same as the rate of the data signal input.
Response to a trigger received at the Push port when the register is full. Inputs to this port must have the same built-in data type as inputs to the Pop and Rst input ports.
When Dynamic reallocation is selected, the System target file parameter on the Real-Time Workshop pane of the Configuration Parameters dialog box must be set to grt_malloc.tlc – Generic Real-Time Target with dynamic memory allocation.
Response to a trigger received at the Pop port when the register is empty. Inputs to this port must have the same built-in data type as inputs to the Push and Rst input ports.
Enable the Empty output port, which is high (1) when the stack is empty, and low (0) otherwise.
Enable the Full output port, which is high (1) when the stack is full, and low (0) otherwise. The Full port remains low when you select Dynamic reallocation from the Push full stack parameter.
Enable the Num output port, which tracks the number of entries currently on the stack. When inputs to the In port are double-precision values, the outputs from the Num port are double-precision values. Otherwise, the outputs from the Num port are 32-bit unsigned integer values.
Enable the Rst input port, which empties the stack when the trigger specified by the Trigger type is received. Inputs to this port must have the same built-in data type as inputs to the Push and Pop input ports.
Reset the Out port to zero (in addition to clearing the stack) when a trigger is received at the Rst input port.
| Port | Supported Data Types |
|---|---|
In |
|
Push |
|
Pop |
|
Rst |
|
Out |
|
Empty |
|
Full |
|
Num |
|
| Buffer | Signal Processing Blockset |
| Delay Line | Signal Processing Blockset |
| Queue | Signal Processing Blockset |
![]() | Spectrum Scope | Standard Deviation | ![]() |
| © 1984-2008- The MathWorks, Inc. - Site Help - Patents - Trademarks - Privacy Policy - Preventing Piracy - RSS |