Store inputs into LIFO register
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:
Rst
Push
Pop
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
If your model contains any referenced models that use a Stack block with the
Push full stack parameter set to Dynamic
reallocation
, you cannot simulate your top-level model in
Simulink® Accelerator mode.
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.
Note
The Push full stack and Pop empty
stack parameters are diagnostic parameters. Like all
diagnostic parameters on the Configuration Parameters dialog box, they are
set to Ignore
in the code generated for this
block by Simulink
Coder™ code generation software.
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 Code
Generation pane of the Model 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
example
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 Code
Generation pane of the Model 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 | DSP System Toolbox |
Delay Line | DSP System Toolbox |
Queue | DSP System Toolbox |