我的学记|刘航宇的博客 - 刘航宇
type: channel
link: https://ee.ac.cn/index.php/author/1/
description: 刘航宇
items: 在FPGA上部署轻量BP神经网络-Python与Verilog：信号检测实战
items: 数字IC设计项目高性能FFT芯片设计（前后端全流程）
items: 基于51/52单片机电容、电感、电阻参数测量系统设计与Proteus仿真
items: 利用图像处理技术mfc设计细胞识别程序-C++
items: EBI开发手册|FPGA与STM32 EBI高速并行通信技术详解
items: 电子信息类专业考研-简历-就业宝藏公众号：843电子信息站
items: 格雷码（Gray Code）原理与应用详解-结合工程领域说明
items: 国家线已出，26复试与27届考研西北大学843电子信息该如何准备？
items: 【FPGA】AXI DMA详解
items: SoC架构、通信举例、AHB、APB接口

在FPGA上部署轻量BP神经网络-Python与Verilog：信号检测实战
type: item
date: 2026-08-01T13:52:00+08:00
description: {mtitle title="目录"/}储备知识：一、背景：为什么要在FPGA上跑神经网络？二、系统整体架构三、神经网络模型设计：极致轻量四、FPGA硬件实现详解4.1 串并转换模块（Serial-to-Parallel4.2 数据归一化模块4.3 隐藏层神经元模块（核心计算单元）4.4 ReLU激活函数模块4.5 输出层神经元模块4.6 阈值判断模块五、关键优化技巧5.1 归一化的"逆向"处理5.2 权值二值化（BWN）降低功耗5.3 亚稳态消除六、实验结果：功耗与性能七、总结与思考python和verilog源程序下载储备知识：我们在前文讲了BP神经网络算法和激活函数BP神经网络算法https://ee.ac.cn/index.php/archives/612.html激活函数讲解https://ee.ac.cn/index.php/archives/617.html一、背景：为什么要在FPGA上跑神经网络？在无源物联网（Battery-free IoT）和反向散射通信（Backscatter）场景中，传统的信号检测方法（如能量检测）虽然电路简单，但无法区分同频段的多种信号，且受噪声影响大；而基于PC或GPU的深度学习方案虽然精度高，但功耗动辄数十瓦，显然无法部署在依赖能量采集的微瓦级标签上。核心矛盾在于：缺乏一种检测精度高、功耗极低（毫瓦级）、且能实时处理的解决方案。答案是将轻量级的BP神经网络部署到低功耗FPGA上，在边缘端完成信号推理。二、系统整体架构整个检测系统的链路如下：目标信号 → 天线 → 阻抗匹配 → LNA放大 → 包络检波(ENV) → ADC采样(1MSPS, 12bit) → FPGA(BP神经网络推理) → 调制控制信号在FPGA内部，BP神经网络负责识别当前输入的512点采样数据是否为LoRa信号的前导码（Preamble）。一旦识别成功，输出控制信号，开启后端的Backscatter调制模块。FPGA选型：Actel IGLOO/e系列 AGLE600V5-FG484。选择它的原因是：Flash架构：上电即运行，无需外部配置芯片，适合无源系统；超低功耗：静态功耗仅0.046mW，适合能量采集场景；资源适中：13824个逻辑单元，足以容纳轻量级网络。三、神经网络模型设计：极致轻量为了在FPGA上高效部署，网络结构必须足够"轻"。本文设计的网络结构如下：层级神经元数说明输入层512对应ADC采集的一条信号的512个采样点隐藏层2仅2个神经元，大幅降低计算量输出层1二分类：是目标信号(1) / 非目标信号(0)激活函数：隐藏层和输出层均采用 ReLU。$$f(x) = \max(0, x)$$选择ReLU的原因不仅是训练效果好，更重要的是硬件实现极其简单——只需一个比较器判断正负，无需计算指数或乘法，这对FPGA非常友好。训练环境：TensorFlow/Keras，使用Adam优化器和MSE损失函数。在真实环境数据集上训练后，测试集识别准确率可达 95.76%。四、FPGA硬件实现详解FPGA内部的神经网络是一个纯推理引擎。本节按数据流方向，逐个拆解每个模块的设计思路和Verilog实现要点。整体RTL结构如下：4.1 串并转换模块（Serial-to-ParallelADC（ADS7042）在片选信号CS拉低后，先输出2个前导0，再输出12位有效数据（D11→D0），每个数据位占用一个CLK周期。设计要点：CS和CLK由FPGA内部产生，CS每16个CLK周期拉低一次；在CS下降沿开始，用计数器对串行数据移位寄存；凑齐12位有效数据后，输出一组并行数据 adc_data[11:0]。波形图module serial_p(input data0_in,input cs,input clk,output[12:0] data0_out,input rst); reg[11:0] temp; reg[12:0] save; integer count; integer cnt; always @(negedge clk or negedge rst) begin if(!rst) begin//reset temp<=12'b000000000000; count<=-1; save<=12'b111111111111; cnt<=-1; end else if(cs&&count%16==0) begin save<={1'b0,temp}; count<=1; cnt<=cnt+1; if(cnt==512) begin cnt<=1; end end else if(cs) begin temp<=12'b0; count<=1; end else if(count<3) count<=count…

数字IC设计项目高性能FFT芯片设计（前后端全流程）
type: item
date: 2026-07-26T10:53:00+08:00
description: 本项目为数字集成电路设计基于 SMIC 0.18 μm 工艺，完成了 16 点基-4 FFT 算法 的芯片级前后端全流程设计，涵盖 RTL 建模、功能仿真、逻辑综合（DC）与物理实现（ICC）。最终芯片工作频率达到 135 MHz，面积 4.6953 mm²，单次 FFT 能耗 5.25×10⁻⁶ mJ。文章末尾有芯片设计源码与项目其他文件，包含：前端RTL源码、中端DC源码脚本、后端ICC源码脚本、项目报告、参考文件等。{mtitle title="目录"/}一、设计规范简介1.1 功能描述1.2 性能指标能耗计算单位面积功耗时间操作次数二、电路性能分析与结构设计2.1 性能估算面积开销运算性能吞吐率带宽工作频率2.2 硬件结构图2.3 流水线时序设计2.4 时序过程三、RTL 模型与仿真验证3.1 验证方法3.2 验证平台搭建3.3 仿真验证结果3.3.1 功能点验证3.3.2 第一组数据验证对比3.3.3 测试向量3.3.4 仿真性能统计四、逻辑综合策略与结果4.1 逻辑综合流程参数设置4.2 逻辑综合结果时序结果面积结果功耗结果资源使用设计违例五、物理实现与结果分析5.1 ICC 设计步骤5.1.1 数据设定 (Data Setup)5.1.2 布局规划 (Floorplanning)5.1.3 布局 (Placement)5.1.4 时钟树综合 (CTS)5.1.5 布线 (Routing)5.2 ICC 设计结果5.2.1 芯片概貌5.2.2 时序结果5.2.3 面积结果5.2.4 功耗结果5.2.5 芯片压降5.2.6 拥塞分析5.2.7 资源使用5.2.8 设计违例六、设计总结6.1 遇到的主要问题6.2 相应的解决思路6.3 关键优化点乘法器优化（频率提升核心）七、参考资料八、项目工程下载（源码、文档和参考文献）一、设计规范简介1.1 功能描述本次课程设计的核心目标是实现一个 高能效的快速傅里叶变换（FFT）电路，具体规格如下：算法：16 点基-4 FFT 算法输入数据：实部与虚部均为 17 bit（1 bit 符号位 + 8 bit 整数位 + 8 bit 小数位）旋转因子：实部与虚部均为 8 bit（1 bit 符号位 + 7 bit 数据位）数据格式：定点数表示，如图 1 所示图 1 16 点基-4 FFT 蝶形运算原理图图 2 数据表示方式（17 bit 输入 / 8 bit 旋转因子）运算数据的实部虚部均为17 bit而旋转因子的实部与虚部为8 bit1.2 性能指标评价指标具体数值完成一次 16 点 FFT 运算的能耗5.25118208 × 10⁻⁶ mJ单位面积功耗时间 FFT 操作次数4.1987688 × 10⁴ 次/(mm²·mW·s)工作频率135.135135 MHz面积开销4.695300 mm²能耗计算单次 FFT 能耗 = 每秒能耗 / 每秒 FFT 运算次数 = 44.3512 mW/s / (1 / (16 × 7.4 ns)) = 5.251182 × 10⁻⁶ mJ单位面积功耗时间操作次数单位面积功耗时间 FFT 操作次数 = 每秒 16 点 FFT 运算次数 / (面积 × 功耗 × 时间) = (1 / (16 × 7.4 ns)) / (4.535456 mm² × 44.3512 mW × 1 s) = 4.1987688 × 10⁴ 次/(mm²·mW·s)二、电路性能分析与结构设计2.1 性能估算面积开销芯片共有 90 个管脚，布局尺寸计算如下：长：76 μm × 23 + 210 μm × 2 = 2168 μm = 2.168 mm宽：76 μm × 22 + 210 μm × 2 = 2092 μm = 2.092 mm总面积：2.168 mm × 2.092 mm = 4.535456 mm²运算性能每秒可完成 FFT 运算次数 = 1 s / (16 × 7.4 ns) = 8.445946 × 10⁶ 次吞吐率芯片采用 串行输入输出 方式，每 16 个周期完成一次信号输入，从输入第 13 个信号时开始蝶形运算，经过 8 个周期完成运算，再经过 16 个周期输出：单次运算周期：13 + 8 + 16 = 37 个周期单次运算吞吐率：1 / (37 × 7.4 ns) = 3.65 × 10⁶ 次/秒由于采用了 三级流水线 架构，在连续运算足够多的情况下：流水运算周期：16 个周期（每周期输出一个结果）流水吞吐率：1 / (16 × 7.4 ns) = 8.45 × 10⁶ 次/秒带宽存储器时钟频率和数据输入速度保持恒定，峰值带宽与平均带宽相同：带宽 = 17 bit × 2(实部+虚部) × 135.135135 MHz = 4.595 Gbps工…

基于51/52单片机电容、电感、电阻参数测量系统设计与Proteus仿真
type: item
date: 2026-07-26T09:29:00+08:00
description: {mtitle title="目录"/}一、设计任务和要求二、方案设计与论证2.1 系统总设计框图2.2 方案一：电桥平衡原理① 电阻的测量：直流电桥平衡原理② 电容的测量：交流电桥平衡原理③ 电感的测量：交流电桥平衡原理2.3 方案二：频率转换法（本设计采用）① 电阻的测量：555 构成单稳态② 电容的测量：555 构成单稳态③ 电感的测量：电容三点式正弦波振荡2.4 方案对比与选择三、单元电路设计和参数计算3.1 电阻的检测单元电路设计3.2 电容的检测单元电路设计3.3 电感的检测单元电路设计四、总原理图及元器件清单4.1 总原理图4.2 元器件清单五、程序设计5.1 程序流程图5.2 核心代码中断函数（频率测量）主函数显示函数键盘检测函数5.3 完整程序清单及protues仿真文件（附录）六、安装与调试6.1 仿真调试（1）电阻测量电路仿真（2）电容测量电路仿真（3）电感测量电路仿真调试要点液晶显示电路调试仿真整体显示6.2 实物调试电阻检测电容检测电感检测八、参考文献九、附录-完整软件程序与protues仿真文件完整程序与仿真文件见文章末尾一、设计任务和要求设计并制作一个元器件参数测量仪电阻阻值测量，范围：100Ω ~ 1MΩ电容容值测量，范围：100pF ~ 10000pF测量精度：±5%电感参数的测量扩大量程提高测量精度二、方案设计与论证2.1 系统总设计框图图1 系统总设计框图在测量各元件参数时，采用首先把电感、电容、电阻的参数转化为频率[1]，再送至单片机检测，检测结束后，送至 LCD1602 进行显示。2.2 方案一：电桥平衡原理① 电阻的测量：直流电桥平衡原理图2 直流电桥平衡电路图根据电路平衡原理，不断调节电位器 R3，使得电表指针指向正中间，再测量电位器电阻值。② 电容的测量：交流电桥平衡原理图3 交流电桥平衡电路图通过调节 Z1、Z2 使电桥平衡。这时电表的读数为零。通过读取 Z1、Z2、Zn 的值，即可得到被测电容的值。③ 电感的测量：交流电桥平衡原理图4 交流电桥平衡电路图2.3 方案二：频率转换法（本设计采用）① 电阻的测量：555 构成单稳态图5 555 定时器构成单稳态电路图根据 555 定时器构成单稳态，产生脉冲波形，通过单片机读取高低电平得出频率，通过公式换算得到电阻阻值。② 电容的测量：555 构成单稳态图6 555 定时器构成单稳态电路图**根据 555 定时器构成单稳态，产生脉冲波形，通过单片机读取高低电平得出频率，通过公式换算得到电容值。③ 电感的测量：电容三点式正弦波振荡图7 电容三点式正弦波振荡电路图由电容三点式正弦波振荡电路得出频率，通过单片机读取高低电平得出频率，通过公式换算得到电感值。2.4 方案对比与选择对比项方案一（电桥法）方案二（频率法）测量精度受人为调节影响大单片机数字化，精度高操作难度调节麻烦，不易操作自动测量，一键显示电感测量不易测得准确值振荡电路，相对稳定数字化不易数字化便于单片机处理结论： 方案二通过单片机读取转化，精确度会明显提高，且便于数字化显示。故本设计选择方案二。三、单元电路设计和参数计算3.1 电阻的检测单元电路设计图8 555 定时器构成单稳态电路图由 555 单稳态触发公式：$$f=\frac{1}{\ln2(R_{1}+2R_x)C}$$得：$$R_x=\frac{1}{2}(\frac{1}{\ln2fC}-R_{1})$$从而，可以计算得出电阻值的大小。3.2 电容的检测单元电路设计图9 555 定时器构成单稳态电路图根据 555 定时器构成单稳态，产生脉冲波形，通过单片机读取高低电平得出频率，通过公式换算得到电容值[2]。由：$$f=\frac{1}{\ln2^*(R_1+2R_2)^*C_x}$$若 R1 = R2，得：$$C_x=\frac{1}{3\ln2^*f^*R_1}$$从而，可以计算得出电容值的大小。3.3 电感的检测单元电路设计图10 电容三点式正弦波振荡电路图由 LC 振荡频率公式：$$f=\frac{1}{2\pi\sqrt{\frac{C_1*C_2}{C_1+C_2}*L_x}}$$得：$$L_x=\frac{1}{\left(2\pi f\right)^2\frac{C_1*C_2}{C_1+C_2}}$$从而，可以计算得出电感值的大小。四、总原理图及元器件清单4.1 总原理图图11 电阻、电容、电感参数测试总原理图图12 测量电阻、电容部分的原理图图13 测量电感以及 ±5V 发生原理图4.2 元器件清单元件序号型号数量备注U1STC89C52RC1单片机R3A103J1排阻R2, R3, R17, R1810KΩ4电位器X111.0592M1晶振C325V, 10uF1电解电容C1, C2, C111…

利用图像处理技术mfc设计细胞识别程序-C++
type: item
date: 2026-07-24T10:44:00+08:00
description: {mtitle title="目录"/}一、图像处理设计目标1.1 课题与技术指标1.2 任务点二、设计思路三、创建工程及算法分析3.1 预备工作及工程创建3.2 打开 BMP 图片与显示 HSI 值代码分析主要代码3.3 Mark - 细胞标记代码分析主要代码3.4 OnTwoValue() - 二值化代码分析状态标记说明主要代码3.5 OnFillHoles() - 填洞代码分析主要代码3.6 shrink() - 收缩代码分析主要代码3.7 findcenter() - 中心点获取代码分析合并中心点去除多余圆或者错误圆主要代码3.8 count() - 统计代码分析3.9 OnCellprgAll() - 按序执行全部四、错误情况及分析4.1 未声明全局变量信息头4.2 错把指针当作 int 型4.3 软件菜单栏突然丢失4.4 矩形框在鼠标未按下就出现了五、总结参考文献一、图像处理设计目标1.1 课题与技术指标课题： 利用图像处理技术设计细胞识别程序。设计指标：实验 VS2019 MFC 开发平台待识别图像为 24bit 的真彩色细胞图像进行处理要求识别出细胞，并且保证准确度情况下，统计出细胞的个数和大小1.2 任务点完成图像标注：添加 cdib.h、cdib.cpp、添加函数、添加消息响应函数、添加菜单、打开图像完成细胞的判别：持续判断 Maybe 点邻域有无 Mark 点、Sobel 计算边缘、删除孤立边缘、生成黑白图像细胞收缩：利用 stack、vector 获取孔洞坐标、填充孔洞、Edge 处置 0、4 方向、8 方向交替生成边缘细胞中心点信息获取：递归算法、判别局部是否全是边缘、储存全部中心位置错误信息的删除：计算中心点均值、半径、去除半径过小的点、包含圆的剔除、相交过大圆的剔除、信息统计与显示二、设计思路图像处理之细胞识别的主要工作就是识别细胞数目以及选择出指定大小细胞。设计思路如下图所示。同时我们要去除不符合要求的中心点，来确定最终的细胞数目，去除太小和太大的细胞1，并结合实际来修改各种参数，设计合理。图1 系统设计思路（流程图：打开图像 → HSI 转换 → 细胞标记 → 二值化 → 填洞 → 收缩 → 中心点获取 → 错误删除 → 统计输出）三、创建工程及算法分析3.1 预备工作及工程创建（1）VS2019 安装 MFC 与 C++ 开发环境（2）创建 MFC 工程，配置 MFC 应用程序向导图2 创建工程 / 图3 MFC 配置3.2 打开 BMP 图片与显示 HSI 值代码分析（1）在 OnDraw 函数实现显示图片；在 messages 中添加 display() 实现打开一幅图像的功能。在 LoadBmp() 函数中利用 fopen 实现自动打开图片，利用 fread 读取图片信息。（2）通过：查看 → 建立类向导 → 添加 OnMouseMove() 函数，添加代码实现获取所要信息；实现鼠标移动显示 HSI。（3）通过函数 RgbtoHsi 实现 RGB 向 HSI 的转化。RGB → HSI 转换原理：RGB 向 HSI 模型的转换是由一个基于笛卡尔直角坐标系的单位立方体向基于圆柱极坐标的双锥体的转换。基本要求是将 RGB 中的亮度因素分离，将色度分解为色调和饱和度，并用角向量表示色调2。如果直接对 R、G、B 处理，其处理过程中很可能会引起三个量不同程度的变化，这样就会产生色差问题，甚至带来颜色上的失真。HSI 模型的出现，使得在保持色彩无失真的情况下实现图像处理成为可能。图4 HSI 显示效果主要代码// HSI 主要代码示意 void RgbtoHsi(RGB* rgb, HSI* hsi) { // 将 RGB 转换为 HSI 色彩空间 // H: 色调, S: 饱和度, I: 亮度 // 分离亮度因素，保持色彩无失真 }图5 HSI 主要代码3.3 Mark - 细胞标记代码分析确定 Mark 与 mbMark 是通过半径来的，通过计算图像上的某个像素点与细胞内部像素点的欧几里得距离与归一化门限值分别为 0.09 和 0.15 比较：r < 0.09 → Mark（红色，细胞内部）0.09 < r < 0.15 → mbMark（蓝色，可能边界）OnMouseMove 函数里调用 RgbtoHsi(&rgb, &Hsi) 函数，可以在屏幕上显示鼠标所指点的坐标以及 RGB、HSI 和灰度值，通过 HSI 的可以选取合适的阈值来找到细胞以及边界3。边缘提取的方法：先滤波，去除噪声的影响，防止细胞内的噪声的影响之后用 Sobel 算子 求出边界之后画一个 5×5 的矩形，如果没有遇到边界，是噪声，去除边界点是绿色。细胞边界分别用红色、暗红、蓝色和绿色标记出来主要代码// Mark 主要…

EBI开发手册|FPGA与STM32 EBI高速并行通信技术详解
type: item
date: 2026-07-23T15:54:00+08:00
description: 适用场景：复杂电子系统 / 高可靠FPGA-MCU协同设计 关键词：FPGA · STM32 · EBI · LocalBus · 异步SRAM · EE学术{mtitle title="目录"/}1. 为什么选EBI而非SPI？2. EBI系统框图3. EBI开发手册下载4. EBI读写时序EBI读时序EBI写时序5. EBI硬件连接与信号定义5.1 信号连接表5.2 硬件设计注意事项6. FPGA端Verilog接口设计6.1 模块接口定义6.2 核心设计要点6.2.1 信号直通与数据三态控制3.2.2 写信号同步6.2.3 读信号同步7. 内部模块连接示例8. STM32端HAL配置与驱动8.1 GPIO初始化8.2 FMC异步SRAM模式初始化8.3 读写驱动函数9. 读写时序分析9.1 读时序 (FPGA → STM32)9.2 写时序 (STM32 → FPGA)10. 关键设计决策说明10.1 为什么写信号只用1级同步，读信号用3级？10.2 三态门控制逻辑10.3 地址直通 vs 同步EBI开发手册下载1. 为什么选EBI而非SPI？在高可靠嵌入式系统中，STM32与FPGA通信的常见方式有SPI、I2C、UART等串行接口，以及EBI（External Bus Interface）等并行总线。虽然SPI实现简单，但在需要高带宽、低延迟、内存映射访问的场景下，EBI并行总线具有显著优势：对比维度SPIEBI数据宽度1~4 bit (QSPI)8/16 bit理论带宽~50 MB/s (QSPI)~100+ MB/s访问方式寄存器操作内存映射 (直接读写)DMA支持有限原生支持适用场景控制命令、低速数据图像缓冲、FFT数据流、航电总线对于需要FPGA处理高速数据流（如传感器采集、信号处理）并将结果回传MCU的场景，EBI允许STM32像访问内部SRAM一样直接读写FPGA内部寄存器或FIFO，无需复杂的协议栈开销。这种"内存映射"方式使得CPU可以通过简单的指针操作完成数据交换，几乎零额外软件开销。2. EBI系统框图3. EBI开发手册下载见文章末尾4. EBI读写时序EBI读时序EBI写时序5. EBI硬件连接与信号定义以STM32F407 + FPGA（Xilinx/Altera）为例，采用16位数据宽度、非复用地址模式，典型连接如下：5.1 信号连接表STM32 引脚FPGA 引脚信号说明PD14~PD15, PE7~PE15IO_EBI_data[15:0]EBI数据总线 (16位双向)PF0~PF5, PG0~PG13I_EBI_addr[23:0]EBI地址总线 (24位，可寻址16MB)PG9I_EBI_CS_nEBI片选 (低有效)PD4I_EBI_OE_nEBI读使能 (低有效)PD5I_EBI_WE_nEBI写使能 (低有效)—I_sys_clkFPGA系统时钟 (≥100MHz)—I_rst_n系统复位 (低有效)地址映射：Bank1_NE2 → 0x6400_0000 ~ 0x64FF_FFFF (16MB空间)5.2 硬件设计注意事项⚠️ 关键提示FPGA的IO电平必须与STM32匹配（通常 3.3V LVTTL/LVCMOS33）数据线建议串联 22~47Ω 电阻抑制信号反射，尤其是高速运行时地址线若不需要全部使用，可接地或接固定电平，减少FPGA引脚占用若使用等待信号（NWAIT），需在EBI配置中使能，并在FPGA中正确驱动航空电子场景需特别关注 EMC/EMI 设计，建议增加滤波和屏蔽6. FPGA端Verilog接口设计FPGA侧的核心任务是模拟一个"SRAM设备"，响应STM32的读写时序。以下是基于异步SRAM模式的完整Verilog接口模块，直接对应你的实际工程代码：6.1 模块接口定义module EBI_LOCALBUS ( /* --------------------- Input Signals --------------------- */ input I_sys_clk, // 系统时钟 input I_rst_n, // 系统复位 input I_EBI_CS_n, // EBI片选 input I_EBI_WE_n, // EBI写信号 input I_EBI_OE_n, // EBI读信号 input [23 : 00] I_EBI_addr, // EBI地址 (24位) inout [15 : 00] IO_EBI_data, // EBI数据总线 (16位双向) input [15 : 00] I_EBI_RD_data, // CPU读数据 (来自内部模块) /* --------------------- Output Signals -…

电子信息类专业考研-简历-就业宝藏公众号：843电子信息站
type: item
date: 2026-07-17T14:26:00+08:00
description: 电子信息类专业（通信、电子、集成电路、人工智能等）的同学们，大学四年转瞬即逝，考研、实习、求职三座大山接踵而至。信息差，往往比努力更致命。从技术、考研到就业，本博客和公众号843电子信息站将会给大家带来很多信息差上的帮助。技术栈考研栈简历与就业栈技术栈可以关注本博客https://ee.ac.cn/，本博客包含嵌入式、FPGA、数字IC领域多项基础知识以及实战项目，非常适合找工作的宝子们，以此来提高笔试和面试机会。FPGA、STM32视频教程可以关注我的哔站https://space.bilibili.com/470370345考研栈欢迎大家报考考研西北大学843电子信息类专业：新一代电子信息技术、电子科学与技术、信息与通信工程专业，西大在行业认可度属于比较高的，毕业生可去央国企、华为、腾讯等大厂。推荐的843专业考研课程网站（学习通上课）：https://edu.ee.ac.cn/简历与就业栈可关注微信公众号：843电子信息站，致力于电子工程-FPGA与嵌入式技术的分享、电子信息就业信息分享；西北大学843考研模电、数电、电路指导等。

格雷码（Gray Code）原理与应用详解-结合工程领域说明
type: item
date: 2026-06-29T16:11:00+08:00
description: 一、什么是格雷码格雷码（Gray Code）是一种特殊的二进制编码方式，它的核心特点是相邻两个数之间只有一位二进制位发生变化。这与普通二进制码不同——比如二进制中 3011011011 到 4100100100 有三位同时翻转，而格雷码中相邻数永远只变一位。二、为什么需要格雷码普通二进制在数值递增时，多位可能同时翻转，这在硬件世界中会引入一个严重问题：亚稳态和毛刺（Glitch）。举个例子：• 二进制从 0111 777 变到 1000 888• 4位同时翻转，由于电路延迟差异，实际可能短暂出现 0101、0010 等错误中间态• 如果此时被采样，就会读到完全错误的数据格雷码从根本上避免了这个问题——任何时候只有1位变化，不存在中间错误态。三、格雷码的主要应用场景应用场景 为什么用格雷码四、格雷码 vs 二进制 对照表（3位）五、FPGA中最经典的用法：异步FIFO// 二进制计数器 → 格雷码转换 → 跨时钟域传输 module gray_code_converter #( parameter WIDTH = 8 )( input WIDTH−1:0WIDTH-1:0WIDTH−1:0 bin, // 二进制计数器值 output WIDTH−1:0WIDTH-1:0WIDTH−1:0 gray // 格雷码输出 ); // 转换公式：gray = bin ^ bin>>1bin >> 1bin>>1 assign gray = bin ^ bin>>1bin >> 1bin>>1; endmodule为什么FIFO指针必须用格雷码？• 写时钟域的写指针要传到读时钟域进行比较• 如果用二进制，多位同时变化 → 跨时钟域采样可能抓到错误值 → 空满判断出错 → 数据丢失或覆盖• 格雷码每次只变1位 → 即使采样时机不对，最多差1个地址 → 不会误判空满状态六、格雷码 ↔ 二进制 转换公式【二进制 → 格雷码】 G(n) = B(n) ^ B(n+1) // 最高位不变，其余位与高位异或 // 或简写： gray = bin ^ (bin >> 1) 【格雷码 → 二进制】 B(n) = G(n) ^ B(n+1) // 从最高位开始，逐位异或恢复 // 或递推： bin[MSB] = gray[MSB] bin[i] = gray[i] ^ bin[i+1] 七、一句话总结格雷码不是为了"计算"方便，而是为了"变化安全"——在硬件世界中，让每一次状态切换都干净、无歧义、无毛刺。这是数字电路从"理论正确"走向"工程可靠"的关键一步，也是FPGA/嵌入式设计中跨时钟域、机械编码器等场景的标准做法。

国家线已出，26复试与27届考研西北大学843电子信息该如何准备？
type: item
date: 2025-01-27T15:17:00+08:00
description: 🔥 26届复试党（迫在眉睫版）🌱 27届考研党（早鸟规划版）27考研概况843专业招生人数考试科目初试题型与分值下面针对新生常见提问的一些问答：国家线终于出了是264分！考西北大学843电子信息的宝子们看过来，这篇一次性说清26届复试和27届初试该怎么准备！🔥 26届复试党（迫在眉睫版）先联系导师，选导师！！提前占据自己喜欢的研究方向⏰ 时间节点要记牢国家线公布后1-2周内，西大自划线+复试名单就会出复试一般安排在3月底-4月初📋 西北大学复试考什么？843电子信息复试通常包含：专业课笔试综合面试实验操作💡 现阶段必做3件事：速查官网 → 按研究生网站或提供的资料看以往复试细则联系导师 → 邮件模板准备好，附上简历+初试成绩狂补专业课 → 重点看初试没考但复试常考的内容💬 西大复试很公平，不歧视双非！本科没项目也别慌，把毕业设计吃透也能聊！推荐的复试指导班和资料✅26 届 843 复试指导课仅需31（资料整理服务费68）不到一顿饭钱轻松助你考研一臂之力，报名链接👉https://mooc1.chaoxing.com/course/portal/f4Jg9QrC9ticE_Jwt1BcCA🌱 27届考研党（早鸟规划版）📌 843电子信息考情速览初试科目：政治、英语一、数学一、843电子基础综合参考书：模电、数电和电路🗓️ 全年时间轴（建议版）全科真题模拟；专业课刷西大历年真题（重点！）⚠️ 西大843避坑提醒：真题重复率不低！务必搞到近10年真题（报名27课程或者考研Q群519462257获取）电路计算题要动手算，别只看不做关注电子学院和计算机学院官网，9月看招生简章有无变动推荐的初试系统全程班和资料（报名特惠488，该班级会送复试）✅27 届 843 电子通信考研系统班：从基础划重点到真题逐题讲，还有复试全程指导，赠送 07-26 年 843/849 真题 + 笔记课件 + 复试资料包，报名链接👉https://mooc1.chaoxing.com/course/260044360.html请记住：初试分数是硬道理，复试表现是加分项别被"本科出身"焦虑绑架，西大真的很公平现在准备完全来得及，执行力比完美计划更重要27考研概况西北大学在大厂如华为、中兴、腾讯和阿里的认可度一向不错，西北大学电子信息类专业在211中报名人数一直较少，21~25年，这几年来看，复试分数线一直都是国家线或者比国家线高几分，因此从报考性价比和上岸概率来说无疑是个不错的选择！843专业招生人数新一代电子信息专硕专硕专硕120人左右，电子科学与技术（学硕）20人左右，信息与通信工程（学硕）20人左右考试科目模电、数电、电路----（三门课不少章节不考，考的不算多）初试题型与分值初试：三门，每门2~3题，每科目占50分考察基础理解程度下面针对新生常见提问的一些问答：问：西北大学843就业情况如何？答：就业不错，高的有年薪50~60W的，也低的也有18W、15W的，每年有不少去大厂、银行的。问：西北大学843三个专业初试是一样的吗？答：完全一样，卷子也一样，复试略有不同问：我本科不是电子信息类专业可以报名吗？答：可以，不歧视，根据以往843考研班统计结果来看，是有不少跨专业上岸的，跨幅最大是本科土木问：我本科是二本，专升本可以吗？答：可以报名，考试流程都是正常的，对于这类学生可能存在自身学习能力低下，但是只要努力就会有结果，根据以往843考研班统计结果：每年都有二本上岸的，2024年有两位是专升本过来的问：有没有843考研交流群？答：有，推荐下面这个843群有500多人QQ群号：519462257QQ群号：519462257QQ群号：519462257点击快速加入，西大843QQ交流大群问：843初试都有考哪些东西?答：模电，数电，电路分析三本书，不过不少地方不考，不用太担心！如果不知道重点可以进一步问学长问：是否有推荐的靠谱843课程班或资料？答：下面两个链接是推荐的843班https://edu.ee.ac.cn/https://mooc1.chaoxing.com/course/260044360.html如果只是需要考研初试复试真题资料话可以联系学长哦~问：843复试难吗，歧视双非吗？答：不难中规中矩，不歧视双非，每年有二本上岸的，双非压线上岸的问：843报考专业如何选择？答：这个开放的，大家可能根据自己本科专业或者喜好进行选择，学硕毕业要求会难一些，其次招生人数也会少一些

【FPGA】AXI DMA详解
type: item
date: 2025-01-09T20:14:00+08:00
description: <DMA简介ZYNQ DMA简介三、AXI DMA IP简介四、AXI DMA参数与接口分析Xilinx FPGA里面的AXI DMA IP核的简单用法DMA简介DMA是一种内存访问技术，允许某些计算机内部的硬件子系统可以独立的直接读写内存，而不需要CPU介入处理，从而不需要CPU的大量中断负载，否则，CPU需要从来源把每一片段的数据复制到寄存器，然后在把他们再次写回到新的地方，在这个时间里，CPU就无法执行其他的任务。DMA是一种快速数据传送方式，通常用来传送数据量较多的数据块。使用DMA时，CPU向DMA控制器发送一个存储器传输请求，这样当DMA控制器在传输的时候，CPU执行其他的操作，传输完成时DMA以中断的方式通知CPU。DMA传输过程的示意图为：DMA的传输过程为：1、为了配置用DMA传输数据到存储器，处理器（Cortex-A9）发出一条指令。2、DMA控制器把数据从外设传输到存储器或者从存储器传输到存储器，从而较少CPU处理的事务量。3、输出传输完成后，向CPU发出一个中断通知DMA传输可以关闭。为了发起传输事务，DMA控制器必须得到以下信息：（1）、源地址——数据被读出的地址（2）、目的地址——数据被写入的地址（3）、传输长度——应传输的字节数ZYNQ DMA简介ZYNQ提供了两种DMA，一种是集成在PS中的硬核DMA，另一种是PL中使用的软核AXI DMA IP。在ARM APU（Application Processor Unit，应用处理单元）设计过程中，已经考虑到大量数据搬移的情况，因此在APU中自带了一个DMA控制器DAMC，这个DMAC驻留在PS内，而且必须通过驻留在内存中的DMA指令编程，这些程序往往需要CPU准备，因此需要部分的CPU参与。DMAC支持多达8个通道，所以多个DMA结构的核可以挂载在单个DMAC上。DMAC与PL的连接是通过AXI-GP接口，这个接口最高支持到32位宽，这也限制了这种模式下的传输速率，理论上最大为600MB/s，这种模式不占用PL资源，但需要对DMA指令编程，会增加软件的复杂性。为了获取更高的速率，可以空间换时间，在PL中添加AXI DMA IP core，并利用AXI_HP接口完成高速的数据传输，各种接口的传输比较为：ZYNQ中ACI_HP接口的分布为：通过PL的DMA和AXI_HP接口传输方式的拓扑图为：DMA的数据传输经过S_AXI_HP接口，每一个HP接口都含有控制和数据fifo，这些fifo为大数据量突发传输提供缓冲，使得HP成为理想的高速数据接口。对DMA的控制或配置通过M_AXI_GP接口（M代表master为PS），传输状态通过中断传达到PS的中断控制器。对M_AXI_GP0理解是：在ZYNQ7处理器系统IP core中，在PS-PL Configuration下的AXI Non Secure Enablement下有一个GP Master AXI Interface选项，可选一个M_AXI_GP0接口。该接口的作用是对PL侧的IP core通过AXI-Lite总线进行配置，如果不仅需要的话直接不使能即可。三、AXI DMA IP简介ZYNQ提供了两种DMA，一种是集成在PS中的硬核DMA，另一种是PL中使用的软核AXI DMA IP。AXI DMA IP核在AXI4-Stream IP接口之间提供高带宽直接存储访问。其可选的scatter gather（SG，链式相关）功能还可以从基于处理器的系统中的中央处理单元（CPU）卸载数据搬运任务。初始化、状态和管理寄存器通过AXI-Lite从接口访问（即数据发出方为PL，PS为Slave），核心功能组成为（这张图很有助于理解DMA中断以及SDK代码，下面会解释）：原图位于AXI_DMA数据手册的第五页。AXI DMA使用了三种总线，分别是：（1）、AXI Memory Map，用于内存交互，AXI4 Memory Map Read用于从DMA读取，AXI4 Memory Map用于向DMA写入。（2）、AXI4-Lite同于对寄存器的配置。（3）、AXI4-Stream接口用于对外设的读写，S2MM（Stream to Memory Mapped，数据流向内存映射）用于对外设读取。AXI_MM2S和AXI_S2MM是AXI_Stream总线，可以发送和接收连续的数据流，无需地址。AXI DMA提供3种模式：（1）、Direct Register模式：用于在MM2S和S2MM通道上执行简单的DMA传输，小的FPGA资源少。有两个通道：一个从Device到DMA，另一个从DMA到Device。应用程序必须设置缓冲区地址和长度字段以启动相应通道中的传输。（2）、Scatter/Gather模式：允许在单个DMA事…

SoC架构、通信举例、AHB、APB接口
type: item
date: 2024-08-23T21:33:00+08:00
description: 典型的SoC包括以下部分CPU与SRAM通信CPU与I2C接口通信AHB从接口AHB主接口APB桥APB Slave框图AXI总线AXI传输对比AMBA中AXI AHP APB比较典型的SoC包括以下部分• 一个或多个处理器内核，可以是MCU、MPU、数字信号处理器或专用指 令集处理器内核;• 存储器：可以是RAM、ROM、EEPROM或闪存;• 用于提供时间脉冲信号的振荡器和锁相环电路;• 由计数器和计时器、电源电路组成的外设;• 不同标准的连线接口，如USB、火线、以太网、通用异步收发;• 用于在数字信号和模拟信号之间转换的ADC/DAC;• 电压调理电路及稳压器。在外设内部，各组件通过芯片上的互联总线相互连接。ARM公司推出的 AMBA片上总线主要包括高性能系统总线AHB、通用系统总线ASB、外围互联总线APB、可拓展接口AXI。AHB主要针对高效率、高频宽及快速系统模块；ASB可用于某些高速且不必要使用AHB 总线的场合作为系统总线；APB 主要用于低速、低功率的外围，AXI在AMBA3.0协议中增加，可以用于ARM 和FPGA的高速数据交互。基于ARM的SoCCPU与SRAM通信CPU通过AHB对SRAM进行读写地址生成：CPU生成要访问的SRAM地址。信号发送：CPU通过AHB总线发送地址信息和读写请求信号。数据传输：读操作：CPU发送读请求后，SRAM将数据放在数据线上，CPU接收数据。写操作：CPU将数据放在数据线上，发送写请求，SRAM接收并存储数据。等待确认：操作完成后，SRAM可能通过AHB的握手信号通知CPU操作已完成。CPU与I2C接口通信CPU通过APB读取I2C的数据I2C是一种串行通信协议，通常用于低速外围设备与主控制器之间的通信。APB是一种用于连接低速外设的总线。以下是CPU通过APB读取I2C数据的一般步骤：初始化I2C外设：CPU通过APB发送指令初始化I2C外设，设置通信参数如时钟速率、地址等。发送启动条件：CPU通过I2C外设发送启动条件，开始通信。地址和读写位：CPU发送目标设备的I2C地址以及读写位（读操作为1，写操作为0）。数据传输：写操作：如果读写位为0，CPU通过APB发送数据到I2C外设，然后发送停止条件结束通信。读操作：如果读写位为1，CPU接收来自I2C外设的数据。数据接收：在读取操作中，CPU通过APB从I2C外设接收数据。发送停止条件：操作完成后，CPU发送停止条件，结束I2C通信。AHB从接口AHB主接口APB桥APB桥为AHB的一个从设备，但它在APB中是唯一的主设备，而APB中其它低速和低功率消耗的外围皆为APB桥的从设备。下图是 APB 桥的信号接口：APB桥将系统总线传送转换成APB方式的传送，它具备一些这些功能： 锁存地址，在传送过程中保持地址有效。锁存读写控制信号 对锁存的地址进行译码并产生选择信号PSELx，在传送过程中只有一个选择信号可以被激活。也就是选择出唯一一个APB从设备以进行读写动作. 写操作时: 负责将AHB送来的数据送上APB总线。 读操作时: 负责将APB的数据送上AHB系统总线。 产生一时序选通信号PENABLE作为数据传递时的启动信号APB Slave框图如前面所提及，APB 总线中除了 APB bridge 为 M 外，其它的外围皆为 S。因此，APB 从设备比 AHB从设备接口较为简单且非常具弹性: 例如 a. APB 少了仲裁器及复杂的译码电路，APB 进行写操作时，从设备可以决定: ： 在 PCLK 上升沿触发， 且 PSEL 为高时锁存数据 ：或在 PENABLE 上升沿, 且 PSEL 为高时锁存数据 b. PSELx，PADDR和PWRITE信号的组合可以决定哪个寄存器会被写操作更新。 c. 在读操作的时候，数据可以 PWRITE 在＝0，PSELx 和 PENABLE＝1 的时候被送到总线上，而PADDR 用于决定哪个寄存器会被读。AXI总线AXI的三种类型 AXI(AXI4-Full):用于高性能的存储器映射需求；（占用资源较多，传输大量数据） AXI4-Lite：简化版的AXI4接口；（占用资源较少，可用于低吞吐率的存储器的通信） AXI4-Stream：用于高速的流数据通信（不使用地址，适用于视频流）AXI的工作方式AXI4和AXI4-Lite包含5个独立的通道 读地址通道 读数据通道 写地址通道 写数据通道 写响应通道 AXI4：由于读写地址通道是分离的，所以支持双向同时传输；突发长度最大为256； AXI4-Lite：和AXI4比较类似，但是不支持突发传输； AXI4-Stream：和AXI4的写数据通道比较类似，只有一个单一的数据通道，突发长度不受限制；AXI传输对比Burst可以减少地址通道的交互，…