美文网首页互联网科技产品经理每天写1000字
SHA-256算法在FPGA上的实现 带子模块说明和接口定义

SHA-256算法在FPGA上的实现 带子模块说明和接口定义

作者: 壹诺思维 | 来源:发表于2018-12-02 21:07 被阅读12次

前面文章讲解了在FPGA上实现SHA-256的原理性讨论。
SHA-256算法在FPGA上的实现
本文在前文的基础上进行了若干修正,增加了子模块的功能说明以及子模块之间的连接关系。本文是今天课堂讨论的整理。

SHA256_IP在FPGA上的实现

总的设计思路

我们希望尽可能多地使用现成的Altera IP来搭建我们的设计。我们的设计中会用到HPS2FPGA lightweighted bridge来挂接需要进行少量数据交互的模块如PIO和中断,用HPS2FPGA bridge来挂接需要传递大量数据的模块如双口memory,用PIO口来实现控制寄存器和状态寄存器的功能,用interrupt模块来触发ARM的中断。上图中那两块双口memory用来存储数据M和Kj。
这些模块的使用均可以在Altera的图形化系统开发工具Qsys中实现。
在Qsys中可以直接从IP库中选择需要的IP,通过鼠标拖拽来例化IP,通过鼠标操作来将所有IP和HPS/ARM连接起来组成一个SoC系统。在Qsys可以对每个IP进行设置,如设置基础地址,偏移地址,位宽,大小,输入输出属性等。

SHA-256 core的说明

上图中SHA-256 core实现SHA-256压缩算法的所有核心功能,如CH(x,y,z), Maj(x,y,x), Sigma0, Sigma1等。 这个模块均为组合逻辑,输入输出如上图所示。
该模块并行实现了复杂的数学运算。这就是为什么基于FPGA的SHA-256实现可以秒杀基于最强大CPU的软件SHA-256实现。

关于PIO START的说明

这是一个新引入的模块,其主要功能是启动硬件加速器。我们约定如果这个模块的值被软件设为‘1’时,硬件加速器被初始化,所有计数器(Counter 1...N ,Counter 0...63)被复位,加速器工作状态被复位,然后加速器开始工作。
这个模块的输出连到了状态机的输入。由于软件写为’1’后不可能立刻再清为0,状态机中必须加入上升沿检测来保证硬件加速器不会被反复重启。
软件需要在程序最开始时将该寄存器设为0,然后设置其他所有模块,最后再将该寄存器设为1。

关于Counter 0...63的说明

每个512bit message block需要经过64次迭代。Counter 0...63用来记录每个message block已经经过了多少次迭代。这个计数器在硬件加速器启动时被复位,然后进行模64计数,即当计数达到64时就回到0。
这个计数器可以用来生成Kj memory的读地址,与Counter1...N一起可以生成M memory的读地址。这个计数器还要用来控制Wj Gen模块的运行。
所有双口memory的FPGA侧输入信号的生成,包括地址,片选CS,读写信号Wr/Rd等均由状态机 State Machine模块实现。
这个模块是整个SHA-256 IP的核心模块。其实现以后再讲。

关于Counter 1...N的说明

Counter1...N用来记录多少个512bit Message Block已经被处理。我们要求这是一个8bit计数器,所以我们的设计最大支持的报文是512bit*256。这个值决定了memory M的大小。
当Counter0...63被计满一次时这个计数器的值加1。由于处理报文的长度是随机的,我们引入另外一个寄存器PIO CNT_N来存储报文M中有多少个512bit message block,即N值。
当计数器Counter1...N的值等于PIO CNT_N中的N值时运算结束。此时Buffer register a...h中的值就是最终的哈希值。

关于Wj Gen模块的说明

双口memory M中存放了所有的报文。根据SHA-256的规范,当j小于16时Wj直接来自512bit message block的切片,当j大于15时,Wj由过去的Wj生成。
所以该模块中需要实现深度为15宽度为32bit的移位寄存器,以及σ0和σ1的功能。
该模块需要用到计数器 Counter 0...63.

关于Interrupt gen模块的说明

该模块的功能是在所有运算结束时生成ARM的中断信号。当ARM接收到该中断时就会通过PIO register result a...h来读取最终的哈希结果。
该模块读取Counter 1...N 和Counter 0...63来判断所有运算是不是已经结束。

buffer register a...h

Buffer register a...h中存放当前512bit message block的压缩结果。

p.s 今天彻底被Visio打败了

蒙哥马利元帅曾经把人分为四种,智慧又勤劳的应该当参谋,智慧又懒惰的可以当将领,愚蠢又懒惰的可以当士兵,愚蠢又勤快的应该枪毙。
今天用Visio画图的时候不小心碰到了一个什么设置,那个自动走线变得极其灵敏又荒谬。这样的功能只能拿去关掉。

相关文章

  • SHA-256算法在FPGA上的实现 带子模块说明和接口定义

    前面文章讲解了在FPGA上实现SHA-256的原理性讨论。SHA-256算法在FPGA上的实现本文在前文的基础上进...

  • SHA-256算法在FPGA上的实现

    SHA-256是区块链和比特币方案中用到的一种哈希算法。区块链和比特币大家都应该有所了解。比特币的设计原则是用加密...

  • 策略模式

    策略模式 定义 通用类图 说明:Strategy是算法接口,ConcreteStrategy是算法的具体实现,Co...

  • js 代码模块化

    JavaScript代码模块化 隐藏模块内部实现 定义模块接口 解决依赖关系 利用对象、闭包和立即执行函数实现模块...

  • Spring-Beans

    spring-beans模块笔记 整理了关键接口和实现类,部分常用注解和一些流程说明 核心接口 BeanFact...

  • 二.EP2C8Q208 FPGA(循环点亮LED灯)

    1 介绍 1.1 实现说明 使用FPGA循环点亮led灯,有2种方式,有计数,计时等。 1.2 硬件接口 按照上一...

  • LMS自适应滤波的FPGA实现(二)

    LMS自适应滤波的FPGA实现(二) 终于调通著 [TOC] 本文目录:LMS自适应滤波的FPGA实现(二)算法流...

  • java集合

    java集合 定义 Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有...

  • 软件测评师47天——软件测试基础②

    模块测试:目的在于检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,发现模块内部可...

  • 抽象和接口的不同

    接口只有定义, 欺负不能再接口中实现, 只有实现接口的类才能实现接口中定义的方法, 而抽象类可以定义和实现, 即其...

网友评论

    本文标题:SHA-256算法在FPGA上的实现 带子模块说明和接口定义

    本文链接:https://www.haomeiwen.com/subject/fyyscqtx.html