如何在 simulink 中使用子系统输出作为下一次迭代的输入

问题描述 投票:0回答:1

我尝试在 Simulink (2015a) 中创建 SHA256 哈希函数,同时尽可能避免使用用户定义的函数 - 使用它们不是我正在寻找的答案。

我尝试过使用Delay块,但它也延迟了我的a-h变量的初始化(这意味着,例如,我的T1将是0),所以问题可能就在那里

我对这类事情很陌生,所以我很抱歉,如果这是一个已经得到解答的问题,我只是不知道要通过谷歌搜索什么才能得到答案,因为英语不是我的母语,无论如何,这是我的方案:

For loop (but with placeholder const 1)

get a...g function

First iteration is giving me the correct output

它应该代表这个 MATLAB 代码:

% H = 1x8 const
% constK = 1x64 const

a = H(1);
b = H(2);
c = H(3);
d = H(4);
e = H(5);
f = H(6);
g = H(7);
h = H(8);

% Calc H1 subsystem in Simulink
for t = 1:64
    K = constK(t);
    temp1 = addMsgSch(h, cSigma1(e), choice(e, f, g), K, W(t));
    temp2 = addMsgSch(cSigma0(a), majority(a, b, c));
    h = g;
    g = f;
    f = e;
    e = addMsgSch(d, temp1);
    d = c;
    c = b;
    b = a;
    a = addMsgSch(temp1, temp2);
end

% addMsgSch(a, b... z) = a + b + ... + z;

所以我的问题是:如何使用新分配的变量(重新)启动循环?

matlab simulink
1个回答
0
投票

前言:我没有 2015a(因此无法轻易测试它),并且对 SHA256 的来龙去脉也不是特别熟悉。

Delay
块的默认行为是将其输出信号初始化为全零,但这并不是其唯一可用的行为。可以在掩码上设置初始条件,或者(至少在最近的版本中)掩码上有一个复选框,它将“神奇地”出现一个额外的输入端口:

x0 - 初始条件 标量|矢量

指定从输入端口继承的初始条件。当您选择初始条件:源参数作为输入端口时启用。

(大量内置 Simulink 模块具有类似的“多态”能力来更改输入或输出端口)

启用此附加端口后,您可以将 H 信号路由到其中(大概将 H1 路由到

Delay
块的“主”输入)。

请注意,许多 Simulink 模块都有一些设置初始条件的机制,通常带有掩码参数。还有相关的

IC
块,它可以根据掩码参数设置信号的初始条件。

FWIW,根据我的经验,在“纯”Simulink 中实现类似的东西并不能真正发挥 Simulink 的优势。 Simulink 非常适合管理信号(以及信息)路由,并且其动态引擎非常强大。但对于进行“简单”数学计算,块的堆积通常不如使用 Matlab Function 块那么清晰。对我来说,m-code

for
循环中的代码块比等效的 Simulink 更简单(并且 Simulink 的布局非常合理)。

另外仅供参考,您用来将 H 拆分为 a...h 的

Subsystem
块可能可以替换为
Demux

进一步仅供参考,在我看来,您对

addMsgSch(a, b... z)
的使用可以替换为
sum([a, b... z])
或只是常规添加,这两者都会提高可读性。

© www.soinside.com 2019 - 2024. All rights reserved.