【基于APB总线的DES实现】

2023-12-18 23:52
文章标签 实现 总线 des apb

本文主要是介绍【基于APB总线的DES实现】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于APB总线的DES实现

  • 本文内容摘要
  • APB介绍
  • 仿真结果
    • 整体仿真
    • 写入数据
    • DES加密部分
    • DES加密读出密文
  • 整体代码

本文内容摘要

  本文是设计一个可兼容APB总线的DES加密协处理器,用来将DES加密模块与APB总线进行对接,使总线发送来的数据可以正常写入并进行加密后并由总线读取。
  下面介绍关于APB兼容的方面,DES加密部分在其他博客内介绍。整体使用Modelsim软件进行仿真

APB介绍

  APB_slave基本结构如图所示:
APB总体框架图
  为了使APB总线的输入兼容,须使apb_slave的输入和输出设置成与总线一致,因此在输入端设置多路控制位信号输入。如PSELx(通讯选择从设备)、PENABLE(APB使能信号,指示一次APB传输的第二个时钟周期)、PCLK(APB总线时钟信号)、PRESETN(APB总线复位信号,低电平有效)、PWRITE(APB写指令信号,高电平为写,低电平为读)、PADDR(APB总线读写地址)、PWDATA(APB总线写数据),desIn(DES加密后数据输入端,存储密文于apb总线读数据的时候输出),在输出端设置了start两个输出,用于表示已经接收完毕总线所发送来的数据,此信号是DES加密开始的标志信号。
  此时可以进行加密运算。apb_slave 写入时的输出端有两个64bit的数据线,传输明文以及密钥至DES模块。在读加密后的密文信号时,输入端有一个64bit的数据线,使总线读入64bit密文,并输出两个32bit数据。
  因为APB总线是32位宽,而DES加密模块是64bit明文输入、64bit密钥输入、64bit密文输出,因此要使用2个32位寄存器,通过总线地址选择数据分别写入2个32位地址之中,并且将数据合并成为64bit输出至加密模块进行加密后再以32位数据的方式存储至APB_slave中。
  APB总线的时序逻辑如下图所示。总线输入地址后和要写入的数据后,PWRITE和PWDATA变为高电平,开始预传输数据,延迟一个CLK后PENABLE变为高电平,此时开始向存储器内写入数据,写入条件为PWRITE和PSEL以及PENABLE均为高电平。读出的工作条件为PWRITE为低电平,PSEL以及PENABLE均为高电平时。
时序逻辑图

仿真结果

  仿真四个子模块的波形图,下面一一介绍。

整体仿真

  首先是整体模块的仿真模型,可以看到当片选和使能控制高脉冲时,总线开启选择DES加密模块,加密模块开始工作,等待一段时间后加密完成,总线控制将所得密文取到总线数据线上,如图所示,padata为总线上的32bit数据线,取到的最后信息为32位c1b123a7,对应测试的得到的正确密文的低32位数据。
整体测试波形图

写入数据

  下图是总线挂入DES加密模块后向加密模块写入数据。可以看到当输入有效数据后,并且当使能信号来后,总线通过数据线向DES加密设备写入明文和密钥,并给start一个高脉冲,标志已写入有效数据。
写入测试波形图

DES加密部分

  当start脉冲到来后开始加密,16轮运算进行完获得密文。

DES加密测试波形图

DES加密读出密文

  总线从DES加密设备读出密文的波形测试图如下图所示,可以看到,当使能信号到来后,总线数据线分两次取出64bit密文信息,分别存入两个32bit寄存器内。
读出测试波形图

整体代码

代码见资源,包含顶层代码、加密读写代码和激励测试代码

这篇关于【基于APB总线的DES实现】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510216

相关文章

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各