2011-10-20 89 views
2

我正在研究一个需要使用哈希算法的组合实现的项目。 VHDL/Verilog是目标语言,因为我希望能够在FPGA上工作。我已经完成了一些搜索,并且我已经遇到了MD5和SHA1的RFC规范,但我似乎无法在任何地方找到VHDL/Verilog中的组合(避免使用时钟)。你知道吗?散列算法本身并不重要,只要它至少与MD1一样强大即可。哈希算法的组合实现

+0

它是否需要纯粹的组合,因为你有一个异步设计? –

+0

它需要是纯粹的组合,因为我希望实现在合成版本的代码中只有查找表。 – eqb

回答

3

从以C写成的MD5或SHA1的实现开始。然后手动将算法中的每个步骤转换为流程图中的一个步骤。 C代码中的每个算术或逻辑运算都成为组合逻辑运算(门)。 C代码中的源变量和目标变量将成为硬件设计的输入和输出端口。 C代码中的临时变量成为连接组合逻辑块的内部网络的名称。

从理论上讲,应该有可能创建这些算法的纯组合实现。实际上,您可能会发现它需要太多的硬件资源(加法器,乘法器等),并且需要重用资源。只要您需要重新使用资源,您需要引入一些中间寄存器,然后您的输出在一定数量的时钟周期内无效。

+0

我想我在互联网上看到一个项目,这种方式实现了SHA1。这是一个好主意......我会给它一个机会。谢谢! – eqb

1

这是一个有趣的古怪要求!

我想你会很难找到那里 - 哈希通常需要高吞吐量,这往往意味着大量的流水线和快速时钟,因此注册。

应该不会太难写,虽然:

  • 写模块/为各种“混合”算法中使用
  • 创建这使混合实体在一个圆形实体阶段的实体正确的顺序
  • 使用for .. generate循环(或其Verilog等价物)来创建所需的所有循环。
+0

真的......我想我会直接从代码中将一些C代码转换为VHDL/Verilog。谢谢! – eqb