真随机数生成器TRNG外设模块详解

news2024/7/30 0:32:21

真随机数生成器TRNG外设模块详解

文章目录

  • 真随机数生成器TRNG外设模块详解
    • 简介
    • 原理与机制
    • 应用要点
      • 时钟源
      • 中断源
      • 初始化
      • 数据
    • 软件支持

简介

国产车规微控制器原厂云途半导体设计和发售的YTM32ME微控制器上集成的真随机数生成器TRNG(True Random Number Generator)外设模块,是一个可生成256位随机数的硬件模块,生成的随机数将用于数据加解密等应用场景。在功能安全相关的系统中,随机数也可以作为生成加密算法的种子数据的生成器。

原理与机制

TRNG包含了一个回环振荡器(Ring Oscillator)、一个随机比特流搜集器(Random Bits Collector)、一个时钟监测器(Clock Monitor)和一个错误检测器(Fault Detector)。有内部结构系统框图,如图x所示。

在这里插入图片描述

图x TRNG系统框图

其中,回环振荡器是随机噪声的高速时钟信号源,它对环境状况非常敏感,例如温度、电压、电磁干扰,以及别的潜在的噪声源。这些噪声可以引起回环振荡器输出时钟频率产生微弱的、连续的和随机的变化,每个振荡时钟周期会产生非常微小的变化,因此,使用功能时钟信号(的上升沿)对回环振荡器时钟信号进行采样,得到的逻辑电平值,每次都是随机不确定的。这就是随机特性的最初来源。

随机比特位流搜集器的核心是一个定时器和一个计数器。其中,定时器的计数时钟源来自于外部的功能时钟,计时周期数量可由软件配置(TRNG_SDCTL[ENT_DLY])。在定时器启动的同时,计数器也复位并开始启动,当定时器的周期数达到软件预先配置的数量时,使用功能时钟的上升沿对回环振荡器产生的高速时钟信号进行采样得到一个比特的逻辑值,会被送到随机数数据移位寄存器中并参与移位过程,如此周而复始,后续送入足够多的随机比特,形成比特流。

时钟监测器主要用于监测回环振荡器的频率的变化范围,软件可以读取回环振荡器频率的当前值(TRNG_FRQCNT),并可设定允许范围的上限(TRNG_FRQMAX)和下限(TRNG_FRQMIN),一旦频率的当前值超出设定允许的范围,TRNG就会设定一个标志位TRNG_STAT[FRQ_CT_IF],对应也可以触发中断。时钟检测器相当于实现了一个对回环振荡器频率的硬件比较机制。

错误检测器通过一些测试,以对产生随机数的过程进行统计分析。其中:

  • 长期运行测试(Long Run Test)可以限制在生成随机比特流中连续产生全0或全1的长度(TRNG_CTRL[LRUN_MAX],并称之为“长期运行”事件。当检测到长期运行事件时,TRNG将会自动清空当前缓存的比特流,重新开始新的随机比特流的生成过程。
  • 单边位约束(Monobit Limitation)限制了产生随机比特流过程中,输出0或者1的总数(TRNG_SCML[MONO_RNG]TRNG_SCML[MONO_MAX]),如果产生的随机比特流中破坏了配置好的单边位约束,TRNG将会自动清空当前缓存的比特流,重新开始新的随机比特流的生成过程。
  • 重试次数约束(Retry Count Limitation)限定了因上述原因产生重置的合法次数(TRNG_CTRL[RTY_CT]),当重置次数超过配置数量,将被视为产生错误(TRNG_STAT[HW_ERR_IF]

需要注意的是,这里产生的“错误”并不是因为硬件运行出现故障而产生的错误,而是表示产生随机数过程中超出了某些预设的约束条件,因为产生的数据是随机的,用户不能预判生成数据的内容,所以,当这些所谓的“错误”发生后,TRNG硬件上激活了一些标志位,可以当做是一些状态的提示,用户可以简单地忽略,或者为了适配某些使用随机数的算法,以某些处理方法,适当地重置随机过程并记录统计信息。

应用要点

时钟源

TRNG外设相关的时钟源有3个:外设模块的访问时钟(总线时钟)、功能时钟,以及自己内部的回环振荡器。

  • TRNG挂在APB总线上,当AHB总线主机(CPU)访问TRNG的寄存器时,通过AHB总线到APB总线的外设桥转接到低速设备,此时用到的是系统时钟(System Clock)。
  • 功能时钟(function clock)在手册中描述TRNG的章节中出现多次,通过查阅IPC中的可配置信息可知,YTM32ME微控制器上,固定使用SLOW_BUS_CLK作为时钟源。而SLOW_BUS_CLK是从系统时钟经过两次分频后得到的。
  • 回环振荡器是TRNG内部实现的一个高速时钟源,频率高(300MHz左右),但不准,作为获取随机数据的信号源。

中断源

TRNG模块设计的中断源如表x所示。

表x TRNG外设模块的中断源
标志位开关控制触发条件清零标志位条件
TRNG_STAT[REQ_CT_IF]TRNG_CTRL[FRQ_CT_IE]内部的回环振荡器产生的时钟频率超出预设的范围,可触发本中断事件。写1清零
TRNG_STAT[ENT_VAL_IF]TRNG_CTRL[ENT_VAL_IE]每次成功产生一次有效的随机数,可触发本中断事件。TRNG_ENT[7]寄存器的数
TRNG_STAT[HW_ERR_IF]TRNG_CTRL[HW_ERR_IE]TRNG内部的硬件错误(长期运行测试、单边位约束、重试次数约束三种错误发生其中任何一种)写1清零

TRNG的中断源未连接到DMA触发源,因此不能触发DMA搬运过程。

初始化

对TRNG外设模块的配置,包括各种参数、功能开关,均可在初始化过程中完成。

TRNG外设模块设计了一个锁定机制(TRNG_CTRL[UNLOCK]):只有当TRNG_CTRL[UNLOCK]寄存器的值为1时,才能向各配置寄存器中写数;配置完毕后,将TRNG_CTRL[UNLOCK]寄存器写0,以防止各配置参数被意外篡改。

TRNG外设模块包含一个自动复位硬件配置到复位状态的控制位TRNG_CTRL[SWR],每次向该位写1,都将复位多个配置寄存器的值至初始状态。当然,这个控制位,也需要再解锁状态下(TRNG_CTRL[UNLOCK]=1)操作。

TRNG外设模块设计了一个使能控制位TRNG_CTRL[TRNG_EN],这个控制位实际启用随机数生成器是否开始启动生成过程。其开关与否不影响修改其它配置。

数据

顾名思义,TRNG是一个数据生成器,仅输出数据。TRNG生成器每次执行过程,将生成1个256位的随机数,存放在TRNG_ENT0 - TRNG_ENT7的8个32位寄存器中。每当TRNG_STAT[ENT_VAL_IF]标志位置1时,表示这256个比特的随机数据流已经填充完毕,可供软件读走。在软件读走生成数据之前,TRNG将暂停工作。特别注意,读TRNG_ENT7寄存器的操作,将会触发TRNG继续启动工作,因此,为了读到一个完整一致性的256位随机数,应该先从TRNG_ENT0寄存器开始读数,读到TRNG_ENT7时,软件可以拿已经读到的8个32位数进行后续计算,而硬件也将会重新生成新的随机数填充这8个寄存器。

软件支持

SDK为TRNG设计了驱动程序,供开发者使用。这里列写TRNG驱动程序的API,读者可以一窥TRNG驱动程序的用法。至于具体用法,读者可以体验一下ytmicro-sdk

void TRNG_Init(TRNG_Type * base, trng_config_t *config);
void TRNG_GetEntropyValues(TRNG_Type * base, uint32_t * values);
uint32_t TRNG_GetStatus(TRNG_Type * base);
void TRNG_ClearStatus(TRNG_Type * base, uint32_t flags);
  • END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/977979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01_TMS320F28004x系列MCU介绍和资料搜集

1. TI C2000 实时微控制器 TI公司在处理器方面的产品线有:基于ARM内核的微控制器/微处理器、MSP430微控制器、C2000系列实时微控制器、还有数字信号处理器(DSP)。 其中,C2000是TI公司专门针对实时控制推出的32位微控制器。TI公司…

继承(个人学习笔记黑马学习)

1、基本语法 #include <iostream> using namespace std; #include <string>//普通实现页面//Java页面 //class Java { //public: // void header() { // cout << "首页、公开课、登录、注册...(公共头部)" << endl; // } // void footer() …

IDEA爪哇操作数据库

少小离家老大回,乡音无改鬓毛衰 ⒈.IDEA2018设置使用主题颜色 IDEA2018主题颜色分为三种&#xff1a;idea原始颜色&#xff0c;高亮色&#xff0c;黑色 设置方法&#xff1a;Settings–Appearance&Behavior–Appearance ⒉.mysql中&#xff0c;没有my.ini&#xff0c;只有…

计算机视觉中的自监督学习

如何只使用少量标记示例来训练模型&#xff1f; 到目前为止&#xff0c;人工智能所提供的大部分价值都来自于在日益庞大的数据集上训练的监督模型。其中许多数据集都是由人类标记的&#xff0c;这是一项枯燥、耗时、容易出错&#xff0c;有时还很昂贵的工作。自监督学习&#x…

JVM基础面试题

JDK、JRE、JVM的关系 JVM Java虚拟机&#xff0c;它只识别.class类型文件&#xff0c;它能将class文件中的字节码指令进行识别并调用操作系统向上的API完成动作。 JRE Java运行时环境。它主要包含两部分&#xff1a;Jvm的标准实现和Java的一些基本类库。相对于JVM来说,JRE多出来…

【狂神】SpringMVC笔记(一)之详细版

1.Restful 风格 概念&#xff1a; 实现方式&#xff1a; 使用PathVariable 在url相同的情况下&#xff0c;会根据请求方式的不同来执行不同的方法。 使用RestFull风格的好处&#xff1a;简洁、高效、安全 2、接受请求参数及数据回显 2.1、请求参数 方式一&#xff1a;这里…

无涯教程-JavaScript - TIME函数

描述 TIME函数返回特定时间的十进制数。如果在输入功能之前单元格格式为"常规",则输出格式为日期。 TIME返回的十进制数是一个介于0(零)到0.99988426之间的值,代表从0:00:00(12:00:00 AM)到23:59:59(11:59:59 P.M.)的时间。 语法 TIME (hour, minute, second)争论…

Android studio 调整jar包顺序

第一步&#xff1a;编译jar包&#xff0c;放入lib路径下&#xff1a;如&#xff1a; 第二步&#xff1a;app 目录下build.gradle 中添加 compileOnly files(libs/classes.jar) 第三步&#xff1a;project目录下build.gradle 中添加 allprojects {gradle.projectsEvaluated {t…

十四、MySQL(DCL)如何实现用户的简单管理?配置用户?

1、DCL语句&#xff1a; 要学习DCL语言&#xff0c;就要清楚DCL语言是用来干什么的&#xff0c;首先DCL语言英文全称是Data Control Language&#xff0c;是数据控制语言&#xff0c;主要用来管理数据库用户、控制数据库的访问权限/ 2、DCL的基础语法&#xff1a; &#xff08;…

SpringBoot项目启动时预加载

SpringBoot项目启动时预加载 Spring Boot是一种流行的Java开发框架&#xff0c;它提供了许多方便的功能来简化应用程序的开发和部署。其中一个常见的需求是在Spring Boot应用程序启动时预加载一些数据或执行一些初始化操作。 1. CommandLineRunner 和 ApplicationRunner Spri…

垃圾回收 - 标记压缩算法

压缩算法是将标记清除算法与复制算法相结合的产物。 1、什么是标记压缩算法 标记压缩算法是由标记阶段和压缩阶段构成。 首先&#xff0c;这里的标记阶段和标记清除算法时提到的标记阶段完全一样。 接下来我们要搜索数次堆来进行压缩。压缩阶段通过数次搜索堆来重新填充活动对…

mtbatisplus

title: mybatis_plus date: 2023-09-03 21:06:27 tags: mybatis_plusreviews 约定大于配置 默认 当我们要使用mybatisplus的时候 我们需要去集成mp提供的BaseMapper public interface UserMapper extends BaseMapper 关于mybatisplus常用注解 注解到类上 TableName(“表…

【c++】只出现一次的数字I II III(三个版本:三道题)

注&#xff1a;看这篇文章之前你需要了解& | ^ << >> 这五个运算符&#xff0c;此外&#xff0c;代码均经过测试运行通过 目录 1、只出现一次的数字I&#xff08;难度&#xff1a;简单&#xff09; 2、只出现一次的数字II&#xff08;难度&#xff1a;中等&a…

Ubuntu之apt-get系列--apt-get安装软件的方法/教程

原文网址&#xff1a;Ubuntu之apt-get系列--apt-get安装软件的方法/教程_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Ubuntu使用apt-get安装软件的方法。 安装软件 先更新列表 sudo apt-get update 安装软件 sudo apt-get install <package name>[<version>]…

importlib的使用、9个视图子类、视图集、drf之路由、drf之请求响应回顾、GenericViewSet相关流程图

一 drf之请求响应回顾 # 1 drf请求-请求对象&#xff1a;data&#xff0c;query_params&#xff0c;其他跟之前一样&#xff0c;FILES-默认&#xff1a;支持三种编码-局部配置&#xff1a;视图类中-from rest_framework.parsers import JSONParser, FormParser, MultiPartPars…

MySQL的故事——MySQL架构与历史

MySQL架构与历史 文章目录 MySQL架构与历史一、MySQL逻辑架构二、并发控制三、事务四、多版本并发控制(MVCC) 一、MySQL逻辑架构 第一层&#xff1a;连接处理、授权认证、安全等等 第二层&#xff1a;查询解析、分析、优化、缓存以及所有的内置函数。包含跨存储引擎的功能&…

【数据结构与算法】十大经典排序算法

文章目录 前言一、常见十大排序算法总结1、名词解释2、时间复杂度 二、排序算法与C语言实现1、冒泡排序2、选择排序3、插入排序4、希尔排序5、归并排序6、快速排序7、堆排序8、计数排序9、桶排序10、基数排序 总结 前言 排序算法是《数据结构与算法》中最基本的算法之一。 排序…

java:操作cookie

背景 cookie 是一种客户端会话技术&#xff0c;将数据保存到客户端。主要流程就是&#xff1a; 1、服务器把数据设置到cookie并返回给浏览器 2、浏览器自动保存 3、浏览器下一次发送请求自动携带cookie给服务器 我们主要来看一下 java 是怎么操作 cookie 的。 cookie介绍 特…

区块链技术与应用 - 学习笔记2【密码学基础】

大家好&#xff0c;我是比特桃。本系列笔记只专注于探讨研究区块链技术原理&#xff0c;不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划&#xff0c;在“加快数字发展 建设数字中国”篇章中&#xff0c;区块链被列为“十四五”七大数字经济重点产业之一&#…

Node.js安装使用

目录 一、安装 Node.js二、环境变量配置三、npm常用命令 Node.js 是一个强大的运行时环境&#xff0c;它使您能够在服务器端运行 JavaScript 代码。它非常流行&#xff0c;用于构建 Web 应用程序、API 和各种后端服务。 一、安装 Node.js 1、访问 Node.js 官方网站。 在主页上…