- 博客(45)
- 资源 (1)
- 收藏
- 关注
原创 多级指针使用方法
我们如何用一个指针对象去指向另一个指针对象的地址呢?此时,我们将引入多级指针这一概念。如果我们要指向一个一级指针的地址,比如 int*p,此时如果要指向p的地址——&p,那么我们需要一个二级指针对象。比如:int **q=&p。这里q就是指向一级指针p的一个二级指针,其类型为int **,表示指向一个指针的指针。我们通过代码清单观察二级指针、一级指针以及普通对象之间的关系。**pp = q;**pp = 30;//这一步把y的值改为30。
2026-05-23 23:20:37
173
原创 C语言函数指针完全指南:从入门到精通
函数指针是一个指向函数的指针。就像普通指针指向内存中的数据一样,函数指针指向内存中的函数代码。✅ 动态选择要执行的函数✅ 实现回调机制✅ 创建灵活的API✅ 模拟面向对象的行为✅ 构建事件驱动的系统虽然函数指针的语法初看起来有点复杂,但一旦你掌握了基本概念,就会发现它们是多么有用。函数名就是函数的地址使用typedef简化复杂的声明始终检查指针是否为空确保类型匹配现在,你已经掌握了函数指针的精髓。去用它们构建更灵活、更强大的C程序吧!你有什么问题或想要深入讨论的话题吗?
2026-05-19 09:22:24
228
原创 对内存堆栈管理的简单理解[C语言]
全局变量的作用域由文件来限定可使用extern扩展,被其他文件引用可以用static进行限制,只能在本文件中被引用局部变量的作用域由{}限定可以用static修饰局部变量来改变他们的存储属性(生命周期),但不能改变其作用域。
2026-03-13 18:35:17
319
原创 C语言【结构体值传递问题】
本文记录了C语言结构体值传递问题的解决过程。作者在实现SM4加密算法时,发现结构体成员值无法通过函数正确传递。代码展示了MSG_struct结构体定义,包含加密相关字段。问题出在main函数中初始化结构体后,通过dataFrame_decode函数处理时,ciphertext指针的值未正确更新。通过内存对比发现函数内外指针地址不一致,最终通过指针传递解决了该问题。文章提供了SM4加密的测试用例数据,包括明文、密钥和预期密文。该问题体现了C语言中结构体传参时需要注意指针引用的特性。
2026-03-12 14:47:24
229
原创 C语言数组基础篇
本文总结了C语言中一维数组的7种初始化方式:1)局部数组未初始化时元素值不确定;2)static数组未初始化时默认为0;3)全局数组未初始化时默认为0;4)全部初始化需在定义时完成;5)部分初始化时未赋值元素为0;6)自动确定数组长度的初始化;7)全部初始化为0的三种方法({0}、memset、bzero)。重点说明了数组初始化必须在定义时完成的特性。
2026-03-12 00:34:57
32
原创 GTX DRP动态重配置技术
摘要:本文介绍了GTX/GTH收发器的动态重配置端口(DRP)技术,该接口支持动态修改器件参数。详细说明了DRP的功能描述、端口属性(包括地址/数据总线、控制信号等)以及读写操作时序。DRP通过同步接口实现处理器友好的配置访问,其中DRPCLK为时钟域,DRPEN/DRPWE控制读写操作,DRPRDY指示操作完成。文章还展示了GTXE2_CHANNEL和GTXE2_COMMON模块的端口差异,并提供了读写操作的时序图示例。后续将介绍软件实现方法。(150字)
2026-02-13 17:12:28
674
原创 密码学算法之数字签名和认证协议篇(一)
公钥密码学获得的最重要进展之一是数字签名。数字签名是实现对数据完整性检验、真实性认证及抗抵赖的重要技术。他提供了其他方式已以实现的安全机制。本文介绍数字签名的基本概念和依赖数字签名使用的认证协议、数字签名标准(DSS)及支持应用级认证和数字签名的认证函数。第 5 章 数字签名与认证技术。
2026-01-16 15:14:04
1292
原创 VIM基础教程篇——教你如何玩转史上最强大的编辑器VIM
Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。好了,以上就是VIM的基础操作,上面的基本命令学会后就能轻松玩转VIM了,怎么样,是不是迫不及待去跃跃欲试了呢,有问题和大家一起在评论区讨论留言,分享自己遇到的有趣的事吧!ByeBye~~~
2026-01-16 14:26:43
981
原创 C语言第4章——函数与程序结构
本文介绍了C语言函数与程序结构的关键概念:1)函数定义的基本形式与通信方式;2)非整型返回值函数的实现方法;3)外部变量的作用域与生存期特性;4)静态变量的文件作用域限制;5)递归函数的实现条件;6)预处理器指令的使用。重点讲解了变量作用域规则、存储类别(自动/静态/寄存器变量)以及头文件的组织方式,通过实例演示了类型转换、递归和变量初始化等核心编程技术,为结构化程序设计提供了基础规范。
2026-01-16 11:55:10
607
原创 一文读懂国密SM4算法:分组加密的核心逻辑与实现流程
在国密算法体系中,SM4算法占据着重要的“对称加密”地位——它是面向分组数据的加密算法,广泛应用于金融、政务、物联网等领域的敏感数据传输与存储。相比于非对称加密算法,SM4运算效率更高,适合处理大量数据的加密需求。今天,我们就从基础结构到完整流程,一步步拆解SM4算法的核心逻辑,让复杂的加密原理变得清晰易懂。原始密钥(MK):长度128比特,分为4个32比特的“字”(1字=4字节=32比特),表示为MK=(MK0, MK1, MK2, MK3),是生成轮密钥的基础;系统参数(FK)固定参数(CK)
2026-01-14 18:05:55
1413
原创 一文读懂国密SM3算法:从应用场景到核心实现
在数字支付、账号登录、电子合同等场景中,如何保证数据不被篡改、身份不被伪造?这就需要消息摘要算法的“保驾护航”。今天我们要聊的,就是中国自主研发的国密算法之一——SM3消息摘要算法。它不仅是国家密码标准,更在各类关键信息基础设施中广泛应用。接下来,我们从实际场景出发,一步步拆解SM3的核心逻辑和实现细节。SM3是国家密码管理局2010年首次发布、2016年正式实施国家标准(GB/T 32905-2016)的消息摘要算法。
2026-01-14 17:53:25
1393
原创 C语言第3章-控制流
本文介绍了C语言中的控制流语句,包括基本语句结构、条件判断和循环语句。主要内容涵盖:1)语句与程序块的定义;2)if-else和else-if条件语句;3)switch多分支选择结构;4)while和for循环语句;5)do-while循环;6)break和continue跳转语句的使用场景;7)goto语句的用法。文章通过代码示例详细说明了各种控制结构的具体语法和使用方法,如使用break提前退出循环、continue跳过当前迭代等,并强调了在特定情况下goto语句的必要性。这些控制流语句构成了C语言程序
2026-01-14 16:36:39
874
原创 C语言第2章-类型、运算符与表达式
本文总结了C语言第二章关于类型、运算符与表达式的核心内容。主要包括:1)变量命名规则;2)基本数据类型及限定符;3)常量表示方法;4)变量声明方式;5)各类运算符(算术、关系、逻辑、位运算等)的使用规则和优先级;6)类型转换机制;7)特殊运算符如自增自减的使用;8)条件表达式语法。文章详细说明了不同运算符的运算规则和优先级顺序,为C语言基础语法提供了系统性的参考。
2026-01-13 15:12:44
1072
原创 C语言第1章第2讲
本文介绍了C语言的三个重要概念:1)参数传值调用机制,函数通过临时变量副本接收参数值,无法直接修改主调函数的变量;2)字符数组的基本操作,通过示例说明如何查找最长文本行;3)外部变量与作用域规则,外部变量需在函数外定义,通过extern声明访问,并讨论了多文件编程时使用头文件管理外部变量的方法。这些概念涉及C语言函数参数传递、数组处理和变量作用域等核心特性。
2026-01-13 14:26:41
311
原创 Vitis HLS 学习指南与实践教程
Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F
2025-10-23 22:20:16
1333
原创 vivado综合报错,但没有明确报错信息
文章摘要:代码在组合逻辑中使用temp_reg进行自运算导致综合报错,原因是组合逻辑中自运算会产生自依赖问题。解决方案是通过引入临时变量作为中转,有效避免了组合逻辑中的自依赖报错问题。修改后代码进行赋值操作,综合时不再报错,功能验证正确。修改方案简单高效,仅需增加临时变量中转即可解决该问题。
2025-10-22 20:05:30
337
原创 vivado问题解决- ila抓波形时,抓取的数据变成了constant
ila抓波形时,抓取的数据变成了constant,我用ila抓取了1024位的数据data_out[1023:0],但显示的是ila/constant0_n。在messages中发现warning信息,信息提示要抓取的数据有多驱动行为,选择修改代码,解决多驱动问题后再抓取数据即可。
2025-09-23 14:48:31
265
原创 modelsim命令行基础教程
本文介绍了使用ModelSim进行Verilog仿真的基本命令流程。主要包括:1)创建工作目录和库(vlib work);2)编译Verilog文件(vlog);3)启动仿真(vsim)并设置参数;4)添加观测信号(add wave);5)运行仿真(run);6)查看波形窗口(view signals/wave)。文中详细说明了各命令参数的含义,如-novopt禁止优化、-c命令行模式等,并提供了完整的TCL仿真脚本示例。这些命令涵盖了从工程建立到波形查看的完整仿真流程,适合初学者快速掌握ModelSim的
2025-08-15 16:39:35
439
原创 基于XADC原语实现FPGA板卡测温
本文介绍了基于XADC原语实现FPGA板卡温度测量的方法。通过Verilog代码实现了温度监测模块,适用于7系列FPGA芯片。核心代码使用XADC IP核配置温度阈值参数,通过状态机控制数据读取过程,输出16位温度测量值MEASURED_TEMP。该方案可直接复用,支持外部时钟输入和复位控制,并提供转换结束标志信号EOC/EOS。代码中设置了温度上下限报警值,并提供了完整的XADC配置参数,便于开发者快速实现FPGA温度监测功能。
2025-08-04 15:49:57
501
原创 【7系列GTX收发器系列文章——一文带你读懂GT收发器(一)】
最近饱受GTX收发器的痛苦,调试一直有非常多的问题,找百度找网友找豆包找Deppseek找了个遍,效率实在太低。期间也是遇到了很多的困难难以解决,现在我回个头 反思了下自己,是不是自己太差劲,最后想想还是要给自己加油!所以,现在我准备沉下心来去阅读手册,开发手册应用手册。我遇到的问题别人肯定也遇到过,多去学习别人的思路和方法。针对我自己遇到的问题,我也希望给遇到相同的问题踩个坑,帮助他们去解决相关的问题,
2025-07-25 16:43:09
774
原创 vivado报错[Synth 8-3391] Unable to infer a block/distributed RAM for ‘buff‘ because the memory pattern
分析原因:下面是我的memory定义。报错原因是我的WRITE_LENGTH值太大。
2025-07-25 10:17:31
607
原创 Vivado报错信息[Place 30-574] Poor placement for routing between an IO pin and BUFG
摘要:使用Vivado时出现差分时钟输入报错,原因是将信号绑定在普通IO而非晶振上。解决方案有两种:1)将信号正确绑定到晶振;2)在xdc文件中添加set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets adc_dclk_p]命令,将报错转为警告以生成比特流。该问题可通过修改时钟路由约束解决,参考相关博客获取详细说明。
2025-07-23 19:48:01
442
原创 ADS8331手册驱动开发
值得注意的就几个引脚,CONVST,EOC,CS,RESET,SDI,SDO,SCLK。CONVST:转换开始标志EOC:状态输出,转换过程中EOC是一直为低的,这个引脚也可以编程为INT中断信号。如果编程为INT信号,在转换后引脚会拉低并在cs拉低后拉高CS:片选信号,低有效,没啥好说的RESET:ADC复位信号,高有效SDI:可以理解为SPI接口的MISOSDO:MOSI,SPI接口SCLK:SPI时钟。
2025-07-16 23:39:10
980
原创 GT IP核仿真测试
摘要 本文介绍了GT IP核的仿真测试与配置方法。作者分享了使用Xilinx 7系列FPGA中GTX IP核的实践经验,详细讲解了IP核的多页配置参数,包括线速率(3.125Gbps)、参考时钟(156.250MHz)、数据宽度(20bit)等关键设置。重点分析了官方例程的代码框架,指出核心模块gtwizard_exdes.v、gtwizard_0_support和帧生成/检测模块的作用。文章强调在仿真阶段需将EXAMPLE_SIM_GTRESET_SPEEDUP设为TRUE,并建议初学者先理解GT基本原理
2025-07-11 23:20:56
1413
原创 IPsec协议概述
IPv6 作为新一代的网络互联协议提供了标准的、健壮的以及包容广泛的机制,可以有效地保证数据在不安全的公共网络上进行安全传输,是建立一个可靠的、可管理的、安全的和高效的 IP 网络的长期解决方案,其先进性和灵活性得到越来越多的认可。用户到用户的协议之间的连接都是认证的、加密的,两个网关之间连接的认证和加密是可选的。两个网关之间的连接是认证的、加密的,但从用户到用户的网关之间的连接,服务器和服务器的网关之间的网际连接是未加密的,这是企业的小分支机构通过网络远程访问企业内部网络的 VPN 方式。
2025-06-28 19:57:01
1260
原创 HMAC算法
HMAC是一种基于哈希的消息认证码技术,用于验证消息完整性和身份认证。其核心原理是将密钥与消息通过哈希函数处理:首先对密钥进行预处理(补零或哈希),然后分别与ipad(0x36)和opad(0x5c)异或,再与消息拼接后哈希运算,最终结合两次哈希结果生成认证码。HMAC通过这种双重哈希机制增强了安全性,确保消息在传输中未被篡改且来源可信。
2025-06-21 22:20:43
446
原创 IDEA算法原理详细介绍
IDEA是一种分组加密算法,使用128位密钥和64位分组。其加密过程采用8轮迭代和输出变换,核心运算包括模2^16加法、模2^16+1乘法及异或操作。算法首先生成52个子密钥,每轮使用6个子密钥。解密过程与加密结构相同,仅需更换子密钥。IDEA设计便于软硬件实现,能有效实现数据扩散和扰乱。
2025-06-21 13:14:40
1268
原创 DES算法原理以及实现
DES是Data Encryption Standard的缩写,是美国国家标准局于1977年公布的由IBM公司研制的 Data Encryption Standard 的缩写,是美国国家标准局于 1977 年公布的由 IBM 公司及美国国家安全局,并被作为非机密门使用的数据加密标准。DES 成为标准以后,每五年进行一次再确认,通常在 12 月进行。1973 年 5 月,美国国家标准局(NBS)征求密码算法,用于在传输和存储期间保护数据。
2025-06-16 16:41:35
1294
原创 RC4算法原理
RC4是一种广泛使用的流密码算法,由Rivest于1987年开发。其原理基于密钥调度算法(KSA)和伪随机生成算法(PRGA)两个核心步骤。KSA通过可变长度密钥对256字节的内部状态数组进行初始化,PRGA则从该数组中选取字节生成密钥流。算法简单高效,曾应用于Windows、SSL等多种场景。文中通过n=3的简化示例,演示了从密钥初始化到密钥流生成的全过程,包括状态数组的置换和输出字节的计算。尽管RC4曾广泛使用,但现已发现安全漏洞,在重要场景中逐渐被更安全的算法替代。
2025-06-16 14:33:04
985
原创 SHA系列算法开篇-SHA3算法
SHA3是新一代安全散列算法标准,采用创新的"海绵结构"设计,包含吸收和挤压两个阶段。其核心为Keccak-f置换函数,通过24轮操作(θ、ρ、π、χ、ι)对1600位状态矩阵进行非线性变换。与SHA-2不同,SHA3采用独特的消息填充机制,确保任意长度输入都能适配算法运算。该算法由Keccak团队在NIST竞赛中胜出,2015年成为FIPS标准,提供了更高的安全性和灵活性,成为密码学领域的重要突破。
2025-06-15 19:49:31
1455
原创 Vivado综合输入输出IO接口优化问题
通过分析代码发现我使用function时将state_reg赋值给本身了,修改代码后正常。定义state_reg_r变量,将function后的值赋值给state_reg_r。在编译综合时,我的输入和输出都是128位的数据,但。重新编译综合后正常。
2025-06-13 10:41:59
360
原创 SSL/TLS通信
SSL/TLS是一种结合对称密码、公钥密码和数字签名等技术的安全通信协议,用于保护HTTP等网络通信的机密性、完整性和认证。它通过加密传输数据防止窃听(如信用卡号),使用消息认证码检测篡改,并通过数字证书验证服务器身份。SSL是早期版本,TLS是其后续改进标准,目前已发展至TLS 1.3。SSL/TLS不仅用于HTTPS网页,也可保护SMTP、POP3等协议。其工作原理分为记录协议(加密传输)和握手协议(算法协商和身份验证),通过预定义的密码套件确保兼容性。由于SSL 3.0存在漏洞(如POODLE攻击),
2025-06-13 00:15:06
741
原创 伪随机数发生器
以上我们介绍几种伪随机数发生器,但用于密码学中的随机数都是真随机数,而不是通过算法去生成的,这种生成的随机数很容易被反推以及破解。
2025-06-12 22:45:51
483
原创 SHA系列算法开篇-SHA2-512
本文详细解析了SHA2-512哈希算法的核心原理与实现步骤。SHA2-512作为安全关键领域广泛使用的密码学哈希函数,具有512位输出、1024位消息分块和80轮计算等特征。文章首先介绍了算法的初始化哈希值和轮常数,然后分步骤讲解了消息填充、分块处理、逻辑函数、密钥扩展等关键过程,重点剖析了80轮压缩函数的运算机制。通过伪代码展示了从消息预处理到最终哈希值生成的全流程,为理解SHA2-512的工作原理提供了清晰的技术路径。该算法通过复杂的位运算和迭代处理,确保输出具有抗碰撞性和不可逆性。
2025-06-11 23:58:22
1102
原创 Diffi-Hellman交换
Diffie-Hellman密钥交换是1976年提出的一种安全协议,允许通信双方在不安全的信道上生成共享密钥。其核心步骤为:双方首先公开交换大质数P和生成元G;然后各自生成随机私密数A和B;通过计算并交换G^A mod P和G^B mod P;最终各自能独立计算出相同的共享密钥(G^(A×B) mod P)。该协议基于离散对数难题,被广泛用于密钥协商(如IPSec),即使交换过程被监听,攻击者也无法轻易推算出密钥。
2025-06-11 20:47:34
868
原创 SHA系列算法开篇-SHA2-256
作为现代密码学的基石之一,SHA-256保护着我们的数字世界。本文将深入探讨这一算法的内部工作原理,揭示它如何将任意长度的输入转换为固定长度的"数字指纹"。
2025-06-10 21:09:31
837
原创 RSS实现数字签名
本文演示了使用RSA算法进行数字签名的完整流程。首先利用私钥(D=29,N=323)对消息123生成签名157,然后通过公钥(E=5,N=323)验证签名还原出原始消息123。整个过程验证了签名的真实性,展示RSA签名具有防篡改特性。需要注意的是,实际应用中还应结合单向散列函数以提高安全性。
2025-06-10 20:39:53
382
【集成电路设计】基于HDL的FPGA编码规范:Actel器件硬件描述语言代码风格指南与性能优化技术
2026-01-14
makefile文档教程-零基础学习makefile
2025-01-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅