我尝试在 Simulink (2015a) 中创建 SHA256 哈希函数,同时尽可能避免使用用户定义的函数 - 使用它们不是我正在寻找的答案。
我尝试过使用Delay块,但它也延迟了我的a-h变量的初始化(这意味着,例如,我的T1将是0),所以问题可能就在那里
我对这类事情很陌生,所以我很抱歉,如果这是一个已经得到解答的问题,我只是不知道要通过谷歌搜索什么才能得到答案,因为英语不是我的母语,无论如何,这是我的方案:
它应该代表这个 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;
所以我的问题是:如何使用新分配的变量(重新)启动循环?
前言:我没有 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])
或只是常规添加,这两者都会提高可读性。