我试图在Simulink(2015 a)中创建SHA 256哈希函数,同时尽可能避免使用用户定义的函数-使用它们不是我正在寻找的答案。
我试过使用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;
字符串
所以我的问题是:* 我如何用新分配的变量(重新)开始循环?*
1条答案
按热度按时间4urapxun1#
首先:我没有2015 a(所以不能很容易地测试它),而且我对SHA 256的来龙去脉并不特别熟悉。
Delay
块的默认行为是将其输出信号初始化为全零,但这不是它唯一可用的行为。初始条件可以在掩码上设置,或者(至少在最近的版本中)有a check box on the mask会“神奇地”使一个额外的输入端口出现:x 0-初始条件标量|向量
指定为从输入端口继承的初始条件。当选择初始条件:源参数作为输入端口时启用。
(令人沮丧的是,许多内置Simulink模块都具有类似的“多态”能力,可以更改输入或输出端口)
在启用这个额外的端口后,您可以将H信号路由到它(并且可能将H1路由到
Delay
块的“主”输入)。为了让您有所了解,许多Simulink模块都有一些设置初始条件的机制,通常使用掩码参数。还有相关的
IC
模块,它可以根据掩码参数设置信号的初始条件。FWIW,根据我的经验,在“纯”Simulink中实现这样的东西并不能真正发挥Simulink的优势。(以及信息)路由,它的动态引擎相当强大。但是对于做“简单”的数学,块的堆积通常不如使用Matlab函数块清晰。您的m-代码
for
循环对我来说比等效的Simulink更简单(并且您的Simulink以非常合理的方式布局)。另外供参考,您用于将H拆分为a. h的
Subsystem
块可能会被Demux
替换。进一步的FYI,在我看来,你使用的
addMsgSch(a, b... z)
可以替换为sum([a, b... z])
或只是常规的加法,这两种方法都可以提高可读性。