当前位置: 首页 > article >正文

FPGA 外置Flash的读写,用户数据存储

FPGA 外置Flash的读写用户数据存储前言一该功能验证平台及参考文章1Xilinx xc7k325tffg676-22vivado 2017.43验证的flash芯片MT25QL2564参考文章MT25QL256_datasheet5工程网盘链接https://pan.baidu.com/s/1HCBXLYvVRce5k5N_ro-3CA 提取码cyfo二、实现的功能1read Device ID2设置4-byte模式3flash的数据读写三部分代码总结前言大多数FPGA内部不具有掉电存储程序的功能所以都是外置flash存储器来存储程序上电后加载flash中的程序到FPGA中在运行。外置flash不仅可以作为存储程序使用也可以存储任何你想存储的用户数据这样可以更有效的利用flash的存储空间本文不讲其寄存器及原理这个网上很多。一该功能验证平台及参考文章1Xilinx xc7k325tffg676-22vivado 2017.43验证的flash芯片MT25QL2564参考文章MT25QL256_datasheet5工程网盘链接https://pan.baidu.com/s/1HCBXLYvVRce5k5N_ro-3CA 提取码cyfo二、实现的功能1read Device ID2设置4-byte模式3flash的数据读写三部分代码flash_spitimescale1ns/1ps//////////////////////////////////////////////////////////////////////////////////// Company:// Engineer: QSJ//// Create Date: 2021/03/26 9:02:44// Design Name:// Module Name: flash_spi// Project Name:// Target Devices:// Tool Versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments:////////////////////////////////////////////////////////////////////////////////////moduleflash_spi(input wire sys_clk,input wire i_rst_n,// ---------- spi port ---------output wire o_spi_clk,output wire o_spi_cs,output wire o_spi_mosi,input wire i_spi_miso,// --------- data port -----------input wire[7:0]iv_write_data,output reg o_wr_1_byte_ok,input wire[15:0]iv_write_num,input wire[15:0]iv_read_num,input wire[3:0]iv_cmd_type,output reg o_flash_done,input wire[7:0]iv_flash_cmd,input wire[31:0]iv_flash_addr,output reg[7:0]ov_read_data,output wire o_read_data_vld);wire spi_clk;reg spi_cs;reg spi_mosi;wire spi_miso;assign o_spi_clkspi_clk;assign o_spi_csspi_cs;assign o_spi_mosispi_mosi;assign spi_misoi_spi_miso;reg read_data_vld;reg[7:0]read_data;reg[2:0]spi_state;reg spi_clk_en1b0;reg data_come;assign o_read_data_vldread_data_vld;assign spi_clkspi_clk_en?sys_clk:0;parameter IDLE3b000;parameter CMD_SEND3b001;parameter ADDRESS_SEND3b010;parameter READ_WAIT3b011;parameter WRITE_DATA3b101;parameter FINISH_DONE3b110;reg[7:0]cmd_reg;reg[31:0]address_reg;reg[7:0]wr_bit_cnt;reg[15:0]write_cnt;reg[7:0]rd_bit_cnt;reg[15:0]read_cnt;reg[15:0]read_num_inner;reg read_finish;always (negedge sys_clk)beginif(!i_rst_n)begin spi_cs1b1;spi_stateIDLE;cmd_reg0;address_reg0;spi_clk_en1b0;wr_bit_cnt0;write_cnt0;read_num_inner0;o_flash_done1b0;data_come1b0;o_wr_1_byte_ok1b0;endelsebegincase(spi_state)IDLE:begin spi_clk_en1b0;spi_cs1b1;spi_mosi1b1;cmd_regiv_flash_cmd;address_regiv_flash_addr;o_flash_done1b0;if(iv_cmd_type[3]1b1)begin spi_stateCMD_SEND;wr_bit_cnt7;write_cnt0;read_num_inner0;end end CMD_SEND:begin spi_clk_en1b1;spi_cs1b0;if(wr_bit_cnt0)begin spi_mosicmd_reg[wr_bit_cnt];wr_bit_cntwr_bit_cnt-1b1;endelsebegin spi_mosicmd_reg[0];if((iv_cmd_type[2:0]3b001) | (iv_cmd_type[2:0]3b100))begin spi_stateFINISH_DONE;endelseif(iv_cmd_type[2:0]3b011)begin spi_stateREAD_WAIT;wr_bit_cnt7;read_num_inner1;endelseif(iv_cmd_type[2:0]3b000)begin spi_stateREAD_WAIT;wr_bit_cnt7;read_num_inner17;endelsebegin spi_stateADDRESS_SEND;wr_bit_cnt31;end end end ADDRESS_SEND:beginif(wr_bit_cnt0)begin spi_mosiaddress_reg[wr_bit_cnt];wr_bit_cntwr_bit_cnt-1;endelsebegin spi_mosiaddress_reg[0];if(iv_cmd_type[2:0]3b010)begin spi_stateFINISH_DONE;endelseif(iv_cmd_type[2:0]3b101)begin spi_stateWRITE_DATA;wr_bit_cnt7;endelsebegin spi_stateREAD_WAIT;read_num_inneriv_read_num;end end end READ_WAIT:beginif(read_finish)begin spi_stateFINISH_DONE;data_come1b0;endelsedata_come1b1;end WRITE_DATA:beginif(write_cntiv_write_num)beginif(wr_bit_cnt0)begin spi_mosiiv_write_data[wr_bit_cnt];wr_bit_cntwr_bit_cnt-1b1;o_wr_1_byte_ok1b0;endelsebegin spi_mosiiv_write_data[0];wr_bit_cnt7;o_wr_1_byte_ok1b1;write_cntwrite_cnt1b1;end endelsebegin spi_stateFINISH_DONE;spi_clk_en1b0;o_wr_1_byte_ok1b0;write_cnt0;end end FINISH_DONE:begin spi_cs1b1;spi_mosi1b1;spi_clk_en1b0;o_flash_done1b1;spi_stateIDLE;enddefault:spi_stateIDLE;endcase end end always (posedge sys_clk)beginif(!i_rst_n)begin read_cnt0;rd_bit_cnt0;read_finish1b0;read_data_vld1b0;read_data0;ov_read_data0;endelseif(data_come)beginif(read_cntread_num_inner)beginif(rd_bit_cnt7)begin read_data_vld1b0;read_data{read_data[6:0],spi_miso};rd_bit_cntrd_bit_cnt1b1;endelsebegin read_data_vld1b1;ov_read_data{read_data[6:0],spi_miso};rd_bit_cnt0;read_cntread_cnt1b1;end endelsebegin read_cnt0;read_finish1b1;read_data_vld1b0;end endelsebegin read_cnt0;rd_bit_cnt0;read_finish1b0;read_data_vld1b0;read_data0;end end endmoduleflash_cmdtimescale1ns/1ps//////////////////////////////////////////////////////////////////////////////////// Company:// Engineer: QSJ//// Create Date: 2021/03/26 9:04:02// Design Name:// Module Name: flash_cmd// Project Name:// Target Devices:// Tool Versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments:////////////////////////////////////////////////////////////////////////////////////moduleflash_cmd(input sys_clk,input i_rst_n,input i_wr_flash_start,input i_rd_flash_start,input i_rd_device_id_start,input i_subsector_erase_start,input wire[7:0]iv_write_data,output wire o_wr_1_byte_ok,input wire[15:0]iv_write_num,input wire[15:0]iv_read_num,input wire[31:0]iv_base_addr,output o_spi_clk,output o_spi_cs,output o_spi_mosi,input i_spi_miso,output[7:0]ov_rd_data,output o_rd_data_vld);reg[7:0]flash_cmd_def;reg[3:0]cmd_type;wire flash_done;wire[7:0]read_data;wire read_data_vld;reg[4:0]curr_stated15;always (posedge sys_clk)beginif(!i_rst_n)begin curr_stated15;flash_cmd_def8d0;cmd_type4b0000;endelsebegincase(curr_state)d0://idleif(i_wr_flash_start)curr_stated8;elseif(i_rd_flash_start)curr_stated13;elseif(i_rd_device_id_start)curr_stated1;elseif(i_subsector_erase_start)curr_stated3;elsecurr_stated0;// -------------- read device ID ------------------d1://Read Status Register:05Hif(flash_done)beginif(read_data[0]1b0)begin flash_cmd_def8h00;curr_stated2;cmd_type4b0000;endelsebegin flash_cmd_def8h05;cmd_type4b1011;end endelsebegin flash_cmd_def8h05;cmd_type4b1011;end d2:// Read Device ID:9FHif(flash_done)begin flash_cmd_def8h00;if(read_data8hFF)// if the device id is errorcurr_stated1;elsecurr_stated0;cmd_type4b0000;endelsebegin flash_cmd_def8h9f;curr_statecurr_state;cmd_type4b1000;end// -------------- Erase ------------------d3://Read Status Register:05Hif(flash_done)beginif(read_data[0]1b0)begin flash_cmd_def8h00;curr_stated4;cmd_type4b0000;endelsebegin flash_cmd_def8h05;cmd_type4b1011;end endelsebegin flash_cmd_def8h05;cmd_type4b1011;end d4://Write Enable:06Hif(flash_done)begin flash_cmd_def8h00;curr_stated5;cmd_type4b0000;endelsebegin flash_cmd_def8h06;curr_statecurr_state;cmd_type4b1001;end d5://4-byte address mode Sector Erase:DCH Subsector Erase:21Hif(flash_done)begin flash_cmd_def8h00;curr_stated6;cmd_type4b0000;endelsebegin flash_cmd_def8h21;curr_statecurr_state;cmd_type4b1010;end d6://Read Status Register:05Hif(flash_done)beginif(read_data[0]1b0)begin flash_cmd_def8h00;curr_stated7;cmd_type4b0000;endelsebegin flash_cmd_def8h05;cmd_type4b1011;end endelsebegin flash_cmd_def8h05;cmd_type4b1011;end d7://Write disable: 04Hif(flash_done)begin flash_cmd_def8h00;curr_stated0;cmd_type4b0000;endelsebegin flash_cmd_def8h04;cmd_type4b1100;end// -------------- write Data ------------------d8://Read Status Register:05Hif(flash_done)beginif(read_data[0]1b0)begin flash_cmd_def8h00;curr_stated9;cmd_type4b0000;endelsebegin flash_cmd_def8h05;cmd_type4b1011;end endelsebegin flash_cmd_def8h05;cmd_type4b1011;end d9://Write Enable:06Hif(flash_done)begin flash_cmd_def8h00;curr_stated10;cmd_type4b0000;endelsebegin flash_cmd_def8h06;cmd_type4b1001;end d10://4-byte address page program: write data to flashif(flash_done)begin flash_cmd_def8h00;curr_stated11;cmd_type4b0000;endelsebegin flash_cmd_def8h12;cmd_type4b1101;end d11://Read Status Register:05Hif(flash_done)beginif(read_data[0]1b0)begin flash_cmd_def8h00;curr_stated12;cmd_type4b0000;endelsebegin flash_cmd_def8h05;cmd_type4b1011;end endelsebegin flash_cmd_def8h05;cmd_type4b1011;end d12://Write disable: 04Hif(flash_done)begin flash_cmd_def8h00;curr_stated0;cmd_type4b0000;endelsebegin flash_cmd_def8h04;cmd_type4b1100;end// -------------- read Data ------------------d13://Read Status Register:05Hif(flash_done)beginif(read_data[0]1b0)begin flash_cmd_def8h00;curr_stated14;cmd_type4b0000;endelsebegin flash_cmd_def8h05;cmd_type4b1011;end endelsebegin flash_cmd_def8h05;cmd_type4b1011;end d14://4-byte address read flash dataif(flash_done)begin flash_cmd_def8h00;curr_stated0;cmd_type4b0000;endelsebegin flash_cmd_def8h13;cmd_type4b1110;end// -------------- enter 4-byte mode ------------------d15://Read Status Register:05Hif(flash_done)beginif(read_data[0]1b0)begin flash_cmd_def8h00;curr_stated16;cmd_type4b0000;endelsebegin flash_cmd_def8h05;cmd_type4b1011;end endelsebegin flash_cmd_def8h05;cmd_type4b1011;end d16://Write Enable:06Hif(flash_done)begin flash_cmd_def8h00;curr_stated17;cmd_type4b0000;endelsebegin flash_cmd_def8h06;cmd_type4b1001;end d17://Enter 4-byte address mode:B7Hif(flash_done)begin flash_cmd_def8h00;curr_stated18;cmd_type4b0000;endelsebegin flash_cmd_def8hB7;cmd_type4b1001;end d18://Read Status Register:05Hif(flash_done)beginif(read_data[0]1b0)begin flash_cmd_def8h00;curr_stated19;cmd_type4b0000;endelsebegin flash_cmd_def8h05;cmd_type4b1011;end endelsebegin flash_cmd_def8h05;cmd_type4b1011;end d19://Write disable: 04Hif(flash_done)begin flash_cmd_def8h00;curr_stated1;cmd_type4b0000;endelsebegin flash_cmd_def8h04;cmd_type4b1100;end endcase end end reg[31:0]base_addr;always (posedge sys_clk)beginif(!i_rst_n)begin base_addrd0;endelsebeginif(curr_state0)beginif(i_wr_flash_start|i_rd_flash_start|i_subsector_erase_start)base_addriv_base_addr;elsebase_addrd0;endelsebase_addrbase_addr;end end flash_spiU_flash_spi(.sys_clk(sys_clk),.i_rst_n(i_rst_n),.o_spi_clk(o_spi_clk),.o_spi_cs(o_spi_cs),.o_spi_mosi(o_spi_mosi),.i_spi_miso(i_spi_miso),.iv_write_data(iv_write_data),.o_wr_1_byte_ok(o_wr_1_byte_ok),.iv_write_num(iv_write_num),.iv_read_num(iv_read_num),.iv_cmd_type(cmd_type),.o_flash_done(flash_done),.iv_flash_cmd(flash_cmd_def),.iv_flash_addr(base_addr),.ov_read_data(read_data),.o_read_data_vld(read_data_vld));assign ov_rd_dataread_data;assign o_rd_data_vld(curr_stated14)?read_data_vld:0;endmodule总结以上就是全部内容仅做个人记录若需要对flash进行更多操作可阅读flash对应的datasheet。有完整的VIVADO FPGA测试工程。工程未经过全面的调试有问题请指正

相关文章:

FPGA 外置Flash的读写,用户数据存储

FPGA 外置Flash的读写,用户数据存储前言一,该功能验证平台及参考文章1,Xilinx xc7k325tffg676-22,vivado 2017.43,验证的flash芯片:MT25QL2564,参考文章:MT25QL256_datasheet5&#…...

MCP23017 vs 74系列芯片:51单片机IO扩展方案对比与实战

MCP23017与74系列芯片:51单片机IO扩展方案深度解析与实战指南 当51单片机的GPIO资源捉襟见肘时,工程师们往往面临两种主流扩展方案的选择:传统的74系列逻辑芯片与现代化的MCP23017端口扩展器。这两种技术路线各具特色,适用于不同的…...

从IF控制到精准定位:Hall自学习如何重塑无感电机控制

1. 为什么我们需要Hall自学习技术 想象一下你正在组装一台电动滑板车。当你把电机装好准备测试时,发现转速总是不稳定,有时候还会突然卡顿。这种情况很可能就是由于电机内部的Hall传感器安装存在物理偏差导致的。传统电机控制模型假设三个Hall传感器之间…...

NumPy 中 transpose 详解

transpose 用于 NumPy 中高维度数组的轴变换,在二维情况下就是通常说的转置。该方法很不好理解,本文详细介绍该方法。 该方法有两个实现,分别是numpy.ndarray.transpose和numpy.transpose,两者分别是类成员方法和独立的方法&…...

FDTD仿真中PDMS光学参数txt文件的获取、验证与应用指南

1. PDMS光学参数在FDTD仿真中的重要性 做光学仿真的人都知道,材料参数准不准直接决定了仿真结果靠不靠谱。我刚开始用FDTD Solutions仿真PDMS微流控器件时,就吃过参数不准的亏——仿真结果和实验数据差了一大截,折腾了好几天才发现是折射率数…...

PPTist在线演示工具:5分钟快速制作专业幻灯片的完整指南

PPTist在线演示工具:5分钟快速制作专业幻灯片的完整指南 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing …...

【数据库】Redis的线程与IO

百万笔记知识库, 所有基础的笔记都在这里面啦,点击左边蓝字即可获取!助力每一位未来架构师! 欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘 文章目录线程模型通信流程文件事件处理器…...

《手把手教你评估二手车》林绪东 读书笔记

目录笔记一.事故车鉴定1.车漆2.缝隙及整车3.车身骨架笔记 一.事故车鉴定 事故车定义:存在结构性损伤的车辆,以及泡水、火烧车等。 不可通过拆卸螺丝更换的部件,多为结构件。 1.车漆 目的:1.车漆→车伤;2.车漆扣费 检…...

终极指南:如何免费解锁Cursor Pro全部功能,实现无限AI编程助手体验

终极指南:如何免费解锁Cursor Pro全部功能,实现无限AI编程助手体验 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能:…...

SAP PP实战:MRP Area怎么用?手把手教你按产线、委外供应商拆分物料计划

SAP PP实战:MRP Area精细化物料计划管理指南 引言 在制造业生产计划管理中,物料需求计划(MRP)的精确性直接影响着生产效率与成本控制。传统以工厂为单位的MRP运行模式往往难以应对复杂生产环境下的精细化需求——当多条产线并行运…...

Gold-YOLO:从论文到实践,深入剖析其高效目标检测的聚合-分发机制

1. 为什么需要Gold-YOLO的聚合-分发机制 目标检测领域有个经典难题:如何让模型同时看清远处的小目标和近处的大目标?这个问题困扰了研究者多年。传统解决方案FPN(特征金字塔网络)和PANet虽然在一定程度上缓解了多尺度检测的困难&a…...

上门做饭系统的数据可视化大屏:基于Echarts的实时业务监控与源码剖析

一、系统架构总览与业务背景1.1 上门做饭系统业务场景分析上门做饭系统是一种创新的O2O生活服务平台,连接专业厨师与有烹饪需求的用户。系统核心业务包括:用户端App(下单、支付、评价)、厨师端App(接单、路线规划、服务…...

【AI】《Autonomous Vehicles Learning Notes》

文章目录 1、自动驾驶简介 2、感知 传感器 多模态传感器融合 高精尖地图 BEV Occupancy Corner Cases 智能座舱芯片 3、End-to-end 4、Interesting Application 无头汽车 红绿灯检测 【附录】专业名词缩写 未完待续。。。 1、自动驾驶简介 来自:浅谈自动驾驶技术与挑战 L0:主…...

租了台RTX 4070服务器,终于跑通了NVIDIA Isaac Sim 4.2.0(附完整安装避坑指南)

云端RTX 4070实战:零基础部署NVIDIA Isaac Sim 4.2.0全流程实录 去年在机器人竞赛现场,当我那台搭载GTX 1660的笔记本在加载仿真环境时频频崩溃,才真正意识到高性能计算资源对AI机器人开发的决定性影响。这次经历促使我开始探索云端GPU解决方…...

UE4SS技术架构深度解析:从注入原理到虚幻引擎逆向工程完整解决方案

UE4SS技术架构深度解析:从注入原理到虚幻引擎逆向工程完整解决方案 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/r…...

UART接收机设计:如何通过过采样策略提升波特率容错性

1. UART通信的波特率容差挑战 第一次用STM32做UART通信时,我遇到过这样的问题:明明发送端和接收端都设置了相同的115200波特率,但收到的数据总是出现乱码。后来用逻辑分析仪抓波形才发现,原来是两边的时钟源存在0.5%的偏差。这个经…...

实战教程:星图平台私有化部署Qwen3-VL:30B,实现本地AI多模态能力

实战教程:星图平台私有化部署Qwen3-VL:30B,实现本地AI多模态能力 1. 项目概述与准备工作 1.1 为什么选择Qwen3-VL:30B? Qwen3-VL:30B是目前最强大的开源多模态大模型之一,具备300亿参数规模,能够同时处理文本和图像…...

强化学习玩转目标检测:从决策建模到工业实战

1. 强化学习如何重新定义目标检测 传统的目标检测方法就像拿着放大镜在沙滩上找贝壳——你需要反复调整放大镜的位置和倍数,直到看清贝壳的轮廓。而强化学习则像训练一只聪明的海鸥,让它学会自己找到贝壳的最佳观察角度。这种范式转变让目标检测从"…...

FPGA图像采集卡设计笔记:为你的GigE Vision IP相机加个10G网口的升级攻略

FPGA图像采集卡10G网口升级实战:突破千兆带宽瓶颈的设计精要 当Basler相机的CMOS传感器分辨率从500万像素跃升至2000万,千兆以太网的传输带宽瞬间成为系统瓶颈。我曾亲眼见过一位工程师在调试4K60fps图像流时,千兆网口的数据指示灯疯狂闪烁&a…...

AMD Ryzen处理器SMU调试工具:3步解锁隐藏性能潜力

AMD Ryzen处理器SMU调试工具:3步解锁隐藏性能潜力 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

Python OCR实战:pytesseract高级配置与场景化应用指南

1. 为什么需要pytesseract高级配置? 第一次用pytesseract做OCR识别时,我直接调用了最简单的image_to_string()方法。结果遇到模糊图片时识别率惨不忍睹,处理表格文本时更是错漏百出。后来才发现,Tesseract引擎提供了20种参数配置组…...

Elasticsearch连接中断:深入解析Connection reset by peer问题及优化策略

1. 当Elasticsearch突然"失联"时发生了什么? "Connection reset by peer"这个错误就像你正在和朋友打电话,对方突然毫无预兆地挂断。对于Elasticsearch来说,这意味着客户端还保持着连接状态,但服务端已经单方…...

电路板短路排查实战:从基础检测到精准定位

1. 电路板短路排查的入门指南 刚入行那会儿,我最怕遇到电路板短路的问题。一块价值上万的板子,可能因为一粒锡珠就报废了。记得第一次独立排查短路,我拿着万用表在板子上戳了整整两天,最后发现是电源插座背面两根引脚搭在了一起。…...

Pinpoint 3.0.3 监控探针深度优化:如何调整采样率与错误状态码捕获策略

Pinpoint 3.0.3 监控探针深度优化:采样率与错误状态码捕获策略实战指南 当系统监控数据量呈指数级增长时,如何平衡监控精度与资源消耗成为技术团队面临的现实挑战。某电商平台在促销期间曾因全量采集监控数据导致分析系统过载,而另一家金融企…...

Python零基础到精通教程,字典(dict)与集合(set)

字典和集合是 Python 中最常用、最高效的两种数据结构,都基于哈希表实现,查询速度极快。本教程包含核心用法、代码示例、实战使用场景,新手也能直接学会。一、字典(dict)详解1. 什么是字典?字典是键值对&am…...

BetterNCM Installer:网易云音乐插件管理从未如此简单

BetterNCM Installer:网易云音乐插件管理从未如此简单 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾因网易云音乐功能有限而烦恼?是否羡慕其他音乐播…...

终极Dayflow性能优化指南:从存储限制到高效运行的完整配置方案

终极Dayflow性能优化指南:从存储限制到高效运行的完整配置方案 【免费下载链接】Dayflow The automatic work journal. Privately turns your screen into a timeline of what you actually accomplished. Open-source and local-first. 项目地址: https://gitcod…...

Spring Boot项目里,用oshi-core 6.3.0做个服务器健康监控面板(附完整代码)

Spring Boot集成oshi-core 6.3.0构建企业级服务器监控面板实战 在微服务架构盛行的今天,系统监控已成为保障服务稳定性的关键环节。对于Java开发者而言,如何在Spring Boot项目中快速搭建一套轻量级、低侵入的服务器健康监控系统,是提升运维效…...

FPGA实现CIC滤波器时,如何搞定大位宽累加器溢出?一个5000倍抽取的实战案例

FPGA实现CIC滤波器时大位宽累加器溢出问题的工程实践 在数字信号处理领域,CIC(Cascaded Integrator-Comb)滤波器因其无需乘法运算的独特优势,成为高抽取率场景的首选方案。然而,当面对5000倍这样的超高抽取率时&#x…...

MongooseIM XMPP服务器入门:企业级即时通讯平台的完整搭建指南

MongooseIM XMPP服务器入门:企业级即时通讯平台的完整搭建指南 MongooseIM是一款由Erlang Solutions开发的企业级XMPP服务器,以其卓越的健壮性、可扩展性和高效性能著称,特别适合大型企业级即时通讯部署。本文将为您提供从零开始搭建Mongoos…...