AES算法基于FPGA的硬件实现(3)AES算法的Verilog实现(完结)

这篇具有很好参考价值的文章主要介绍了AES算法基于FPGA的硬件实现(3)AES算法的Verilog实现(完结)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本设计实现AES加密算法为ecb模式,填充模式未设置,同时支持AES-128/192/256三种密钥长度。代码完全开源,开源链接在文章末尾。

1.文件架构

下图为GitHub仓库中上传的文件第一级结构,第一级为matlab和user,matlab中存储的是在进行列混淆运算时查表所用的coe文件,这些文件用来初始化vivado中的bram IP以便于查表运算。

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发

user

ip:存放使用到的Xilinx ip文件;
src:存放算法设计的Verilog文件;
sim:存放仿真文件。

matlab

gen_coe.m:用于产生对应的coe文件
*.coe:用于初始化IP。

2.代码说明以及仿真结果

2.1 代码结构

为了方便进行上板验证,在设计时我使用串口进行了代码的封装,因此顶层文件top中添加了串口以及串口协议解析的部分代码,这些代码是和aes算法本身没有关系的,所以可以直接忽略。aes算法的核心应该是aes_core以及它的子文件。

top

key_filter:按键滤波接入外部控制信号(与aes算法无关,建议忽略);
uart_aes_packed:次顶层,该部分将aes代码和串口解析代码以及串口接口封装到了一起(与aes算法无关,建议忽略);

串口解析部分:这部分代码没有封装成子模块,直接在uart_aes_packed文件中编写,这个部分的任务主要是将接收到的串口数据解析为密钥或者明文,比如我设定首先连续接收到“key”字符表示数据为密钥,然后下一个字符为“a/b/c”分别来指代当前的密钥长度为128/192/256bit三种模式。
uart_tx/rx:串口接收发送模块;
aes_core:aes算法顶层代码。该部分代码为实现重点

aes_key_expasion:密钥拓展模块,实现同时支持AES128/192/256三种密钥长度的密钥拓展。

aes_sbox:实现同时支持4byte的S盒替换。

aes_encipher:加密模块,实现分别支持三种密钥长度的aes加密;

aes_sbox_128:实现同时支持16byte的S盒替换;
aes_col_mux:实现列混淆计算;
轮密钥加和行移位较为简单,直接在代码中实现未单独写为v文件。

aes_decipher:解密模块,实现分别支持三种密钥长度的aes解密。

aes_inv_sbox_128:实现同时支持16byte的逆S盒替换;
aes_inv_col_mix:实现逆列混淆计算。

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发
aes_core的rtl原理图

2.2 代码仿真结果

2.2.1 密钥拓展模块仿真

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发AES-128密钥拓展结果(与(二)中c++结果对比)
fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发AES-192密钥拓展结果(与(二)中c++结果对比)
fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发AES-256密钥拓展结果(与(二)中c++结果对比)

2.2.2 加密模块仿真

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发AES-128加密结果(与(二)中c++结果对比)
fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发AES-192加密结果(与(二)中c++结果对比)
fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发AES-256加密结果(与(二)中c++结果对比)

2.2.3 解密模块仿真

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发 与输入明文相同,解密成功。

2.2.4 整体结果仿真(包含串口解析以及串口收发部分)

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发这部分仿真了串口接入密钥以及明文数据后的结果,但是使用串口只是为了方便上实物,我认为如果没有上实物需求可以完全忽略这部分,而且应该有更好的上板验证方法。

2.3 上板验证结果

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发开发板板连接
fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发串口发送的密钥流

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发串口发送的明文流

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发接收到的密文和仿真结果密文对比

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发接收到的解密结果

2.4 资源消耗

fpga 加密算法 程序,AES加密算法的FPGA实现,算法,fpga开发aes_core的资源消耗(在vivado 2023.2平台下,器件为zynq7020的情况下的综合结果)

2.5 接口说明

密钥拓展模块

module aes_key_expasion
(
    input  wire                         clk                        ,
    input  wire                         rst                        ,

    input  wire        [ 255:0]         key_in                     ,//*按有可能输入的最大值来输入(256bit)
    input  wire        [   1:0]         keylen                     ,//*0 1 2
    input  wire                         init                       ,//*indicate the initial key is ready
    
    input  wire        [   3:0]         round                      ,//*indicate the current round
    output wire        [ 127:0]         round_key                  ,//*output the round key
    output wire                         key_ready                  ,//密钥拓展完成信号
    output wire        [   3:0]         round_num                   //表明当前的加密模式总共有多少轮

);

加密模块

module aes_encipher (
    input  wire clk,
    input  wire rst,

    input  wire next,//开始工作信号,表明明文准备完毕
    input  wire [3:0] round_num,//需要加密的轮数,表示不同的密钥长度
    input  wire key_ready,//密钥准备完成信号

    input  wire [127:0] round_key,//轮密钥
    output reg  [3:0]   round,//当前轮

    input  wire [127:0] plain,//输入明文
    output reg [127:0] cipher,//输出密文
    output reg cipher_ready,//加密完成标志

    output wire error       //*密钥未生成,收到了加密信号
);

解密模块

与加密模块基本相同

https://github.com/MaxWei250/aes_fpga 代码地址
如有帮助希望可以star💕文章来源地址https://www.toymoban.com/news/detail-801693.html

到了这里,关于AES算法基于FPGA的硬件实现(3)AES算法的Verilog实现(完结)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一种基于FPGA的TCP乱序重排算法,并通过Verilog语言进行了实现

    基于fpga的tcp乱序重排算法实现,通过verilog实现适用于fpga的tcp乱序重排算法,并通过实际数据测试验证。 代码里包含注释,可以明白每个模块的含义。 采用自创的乱序重排算法,易于在硬件中实现。 该算法和工程可用于实际应用、算法设计、研究学习。 提供测试用的抓包文

    2024年02月05日
    浏览(40)
  • FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

    FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供3套工程源码和技术支持 没玩过图像缩放和视频拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文详细描述了FPGA实现图像去雾的实现设计方案,视频输入源有两种,一种是板载

    2024年02月01日
    浏览(28)
  • 紫光同创FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

    紫光同创FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持 2019年初我刚出道时,还是Xilinx遥遥领先的时代(现在貌似也是),那时的国产FPGA还处于黑铁段位,国产FPGA仰望Xilinx情不自禁道:你以为躲在这里就找不到你吗?没用的,你那样拉轰的

    2024年02月06日
    浏览(31)
  • 基于FPGA的DES加解密verilog实现

    目录 一、理论基础 二、核心程序 三、仿真结论        DES(Data Encryption Standard)是一种对称密钥加密算法,是目前应用最广泛的加密算法之一。它是由美国国家标准局(National Institute of Standards and Technology,NIST)于1977年发布并公开的,用于保护计算机系统中的数据安全。

    2024年02月09日
    浏览(29)
  • 基于FPGA的移相波束形成verilog实现

    欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果

    2023年04月08日
    浏览(30)
  • 【FPGA教程案例40】通信案例10——基于FPGA的简易OFDM系统verilog实现

    FPGA教程目录 MATLAB教程目录 --------------------------------------------------------------------------------------- 目录 1.软件版本 2.OFDM原理 3.OFDM系统的verilog实现

    2024年02月12日
    浏览(44)
  • FPGA硬件工程师Verilog面试题(基础篇一)

    ✅作者简介:大家好我是:嵌入式基地,是一名嵌入式工程师,希望一起努力,一起进步! 📃个人主页:嵌入式基地 🔥系列专栏:FPGA Verilog 习题专栏 微信公众号:嵌入式基地 点击进行在线练习 描述 制作一个四选一的多路选择器,要求输出定义上为线网类型 状态转换:

    2023年04月26日
    浏览(34)
  • FPGA Artix7-100T实现手写字硬件加速,纯Verilog编写的CNN神经网络加速器,有效减轻误识别问题

    fpga实现cnn神经网络加速 手写字硬件加速 FPGA artix7-100t 纯verilog编写 神经网络硬件加速 使用ov5640摄像头dvp接口 verilog实现手写字识别 包括卷积层、全连接层、池化层、softmax,有效减轻误识别问题。 注意: 该项目并未使用到arm核,是使用传统fpga的逻辑资源实现的。 ID:92299 7141

    2024年04月23日
    浏览(20)
  • 【FPGA教程案例98】数据处理1——基于FPGA的数据线性插值verilog实现,MATAB辅助验证

    FPGA教程目录 MATLAB教程目录 ---------------------------------------- 目录 1.软件版本 2.数据线性插值原理 3.数据线性插值的matlab仿真

    2023年04月09日
    浏览(29)
  • 基于FPGA和Verilog实现的9层电梯控制器仿真设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/85628810 资源下载地址:https://download.csdn.net/download/sheziqiong/85628810 电梯最少可以往返于0—9层楼。 乘客要去的楼层数A可手动输入并显示,按取消键可清除本次输入。 可自动显示电梯运行的楼层数B 当AB时,电梯上升; 当AB时,

    2024年02月02日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包