杂记:逆向一块FPGA核心板

news2024/9/23 23:28:57

  最近太热了,实在无心看书。阵列书丢一边看不进去,还买了几本统计信号的甚至都没开始看(笑),躺在床上玩玩手机摆烂,看到某黄色APP上有老板卖拆机的板子,价格美丽,美中不足的是没有资料。大致跟老板确认了一下板子成色、来源就拍下来了,昨天正好到手里,今天寻思看看有没有可以折腾的可能。由于缺少相关资料,别说原理图了,连个管脚约束都没有,老老实实跑个逆向吧。

  其实买的时候很担心这个芯片是带锁的,但是我几乎没用听过有谁给Cyclone iv的芯片写fuse,这里小赌一把,焊了个牛角座浅试一把发现可以正常使用,赌博成功。由于我没有大功率的低压电源,这里从另一个FPGA板子上取电,测试发现FPGA功耗非常高,猜测应该把Transceiver全部用起来了,估计资源也起来了大半。


板载资源介绍

  板子正面的主要器件已经框出来了。

在这里插入图片描述

  红色框的是FPGA芯片,intel家里的,型号是EP4CGX110DF27I7。这个芯片资源可以,有109k个LE,5Mbit的memory bits,带8个锁相环。这个芯片带了8对收发器可以完成一些高速设计,不过我暂时应该用不到。其实这几年A家的芯片用的比较多,资料相当完善,但是I家的似乎没有那么丰富。

  橙色框的是美光的DDR SDRAM,这是一个第二代SDRAM,2.5V电源供电。而绿色框的芯片是LP2998,一个比较常见的VTT芯片,这个VTT芯片也可以为DDR3提供VTT电源。

在这里插入图片描述

  一般来说VTT芯片需要比较快速的瞬态响应以满足数据传输中电荷的Charge/Discharge,关于DDR的端接技术和相关设计可能以后会写点博文吧。目前我用的比较多的型号是TPS51200,这个VTT芯片在很多设计中都能看到。

在这里插入图片描述

  这张图是板上的46V32M16的内部框图,这是一个512Mbit的芯片,有4个bank,每个bank是8192x512的,对应行地址线是13条,列地址线10条(COL0是实现双边沿的),这个非常关键,后面使用DDR控制器的时候需要设置。这个板子上一共只有1个DDR非常遗憾,如果多点就好了。这个板子做做简单的图像处理,跑跑RISCV还是不成问题的。话说micron的手册写的真非常好,图也好看…在Cyclone iv FPGA中,只有位于TOP和BOTTOM BANK的DQ可以跑到150兆,用右侧的BANK只能跑到133兆,好在这个板子的DDR挂在BOTTOM。

  黄色框是一个LDO,这个LDO为FPGA内部模拟部分(PLL)供电,他的PSRR比较高可以提供比较干净的供电。蓝色框是一个128Bit的NOR FLASH,等效于EPCQ128,用于固化设计。草绿色的芯片是一个看门狗加上一个EEPROM,这个芯片可以提供上电复位和电源监控功能。


逆向

  观察板子发现,这个板子一共有4个连接器,每个连接器都是50x2P的,也就是拉了400个脚出来,全部测一遍工作量实在有些大。不过观察板子设计不难发现,设计者引出的全部都是差分对,如果我们一次能测得4个差分对,那么每跑一次就能得到8个pin。这里我采用的方法是让每个差分对的n输出一个特定频率的信号,利用频率分辨测得的4个管脚,这里手头刚还有一个之前做的选频表,这个东西本质是利用LTC1043制作的锁相放大器,刚好派上用场了。

在这里插入图片描述

  不得不说这个板子设计的还是比较到位的,一共8层,应该用的是S-G-S-V-G-V-S-G-S层叠,没用用特殊工艺(盲孔,盘中孔之类的)。FPGA的去耦相当到位用的0402,小体积的电容有更小的ESL,谐振点更高,能提供更好的去耦效果。这里去耦电容的大小一般设置有2种方法,第一种是经验法,为20~50倍的Cpd,这Cpd是器件的等效电容(含负载),第二种是PDN目标阻抗匹配法,需要使用电源完整性仿真工具做优化。bulk电容考虑到几乎要将全部管脚都扇出,所以放置距离较远。右侧是DDR,VTT的bulk太豪华了,有点过度设计,去耦同样也比较到位,

  这里有一个问题是如何确定时钟脚,观察晶振的位置在芯片上侧,凑巧的是在TOP SIDE只有唯一的两个时钟脚,于是成功迈出第一步。这里GXB_RX是瞎猜的,因为没用手段去测试它,只能大致确定差分对的位置,不过我应该用不到。经过3H的奋战,到凌晨基本已经走完了大半。

在这里插入图片描述


测试

  为了验证DDR的正确性,这里跑一个喜闻乐见的NIOS。

在这里插入图片描述

  这里最关键的是DDR Controller的配置。

在这里插入图片描述

  时钟给了150兆。

在这里插入图片描述

  这里没有46V32M16的模板,倒是有个16M16的,依葫芦画瓢改改列地址。

module NIOS_DDR1(
	input 				clk					,
	output		[1:0]	pio					,
	inout sdram_ck, sdram_ck_n, 
	output sdram_cs, sdram_cke, sdram_ras, sdram_cas, sdram_we,
	output [12:0] sdram_addr,
	inout [15:0] sdram_dq,
	inout [1:0] sdram_dqs,
	output [1:0] sdram_dm,
	output [1:0] sdram_ba
);
	
	
	wire nrst;
	nios u0 (
	.reset_reset_n              (		nrst					),
	.clk_clk                    (		clk						),
	.pio_export                 (		pio						),
	.sdram_sysclk_clk           (								),
	.sdram_ex_local_refresh_ack (								),
	.sdram_ex_local_init_done   (								),
	.sdram_ex_reset_phy_clk_n   (								),
	.adram_mem_mem_clk          (		sdram_ck				),   
	.adram_mem_mem_clk_n        (		sdram_ck_n				), 
	.adram_mem_mem_cs_n         (		sdram_cs				),  
	.adram_mem_mem_cke          (		sdram_cke				),   
	.adram_mem_mem_addr         (		sdram_addr				),  
	.adram_mem_mem_ba           (		sdram_ba				),    
	.adram_mem_mem_ras_n        (		sdram_ras				), 
	.adram_mem_mem_cas_n        (		sdram_cas				), 
	.adram_mem_mem_we_n         (		sdram_we				),  
	.adram_mem_mem_dq           (		sdram_dq				),    
	.adram_mem_mem_dqs          (		sdram_dqs				),   
	.adram_mem_mem_dm           (		sdram_dm				)     
	);
	
	
	assign nrst = (cnt == 4'b1110) ? 1'b0 : 1'b1;
	reg [3:0] cnt = 4'd0;
	always @(posedge clk) begin
		if(cnt != 4'b1111)
			cnt <= cnt + 1'b1;
		else
			cnt <= cnt + 1'b0;
	end
	
endmodule

  简单例化一下,然后写了一个小灯程序。

#include <io.h>
#include <unistd.h>
#include <system.h>
int main()
{
	IOWR(PIO_0_BASE,1,0x0003);
	while(1)
	{
		IOWR(PIO_0_BASE,0, 0x0003);
		usleep(500000);  
		IOWR(PIO_0_BASE,0,0x0000);
		usleep(500000);
	}
	return 0;
}

  行云流水,一把跑通,香槟庆祝。目前没用想到特别有价值的应用,可能以后会画一个底板,或者给有缘人吧。

  板子后面有个彩蛋,一看英语课就在睡觉!Supply?Suplly!

在这里插入图片描述

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

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

相关文章

JavaFX布局详解与代码实例

JavaFX布局详解与代码实例 一、JavaFX布局的原理1.1 JavaFX布局容器1.2 布局约束 二、常用JavaFX布局2.1 VBox和HBox布局2.2 GridPane布局2.3 BorderPane布局 三、JavaFX布局代码实例四、总结与展望 正文&#xff1a; 引言&#xff1a; JavaFX是一种功能强大的用户界面&#xf…

SFP6012-ASEMI代理MHCHXM(海矽美)二极管SFP6012

编辑&#xff1a;ll SFP6012-ASEMI代理MHCHXM&#xff08;海矽美&#xff09;二极管SFP6012 型号&#xff1a;SFP6012 品牌&#xff1a;MHCHXM&#xff08;海矽美&#xff09; 封装&#xff1a;TO-247AB 恢复时间&#xff1a;≤75ns 正向电流&#xff1a;30A 反向耐压&a…

Excel表格转换

原始数据 1部 2部 3部 4部 5部 6部 7部 8部 9部 郈思 王瑾 郈思 许嘉 郈思 施眉 郈思 王瑾 郈思 许嘉 郈思 许嘉 吕倩倩 孙帮菊 夏侯瑾 孙帮菊 吕倩倩 孙痴梦 孙帮菊 姜佳 王瑾 孙痴梦 王瑾 许嘉 施眉 施眉 杨婕 施眉 施眉 孙帮菊 杨孝洁 施眉 吕倩倩 孙痴梦 郈思 夏侯瑾 李文…

NR 吞吐量测试

前言 参考文档&#xff1a; 5G NR TBS (Transport Block size) Calculator | 5G-Tools.com 5G NR Transport Block Size (TBS) Calculation - Techplayon 5G MCS _ 搜索结果_哔哩哔哩_Bilibili 4/5G无线资源和数据调度流程:CQI上报、基站AMC调度、调度信息DCI下发、CQI到MCS的对…

网络控制地址转换管理技术

网络控制&地址转换&管理技术 一、网络控制技术ACL1.1、ACL应用场景1.2、ACL分类1.3、ACL规则1.4、基本ACL配置1.5、高级ACL配置1.6、总结 二、网络地址转换NAT2.1、NAT应用场景2.2、静态NAT2.3、静态NAT配置2.4、动态NAT2.5、动态NAT配置12.6、动态NAT配置22.7、NAPT2.…

【C语言督学训练营 第十六天】考研中常考的排序大题(上)---- 冒泡排序、插入排序、快速排序

文章目录 前言经典的冒泡插入排序快速排序 前言 今天要介绍的部分是排序算法&#xff0c;在很久很久之前学习过十大排序&#xff0c;当时自我感觉非常良好&#xff0c;知道今天才知道我认为的大错特错。有些排序算法会考代码题&#xff0c;有些只会考小题只需要理解思想即可&a…

火山引擎DataLeap数据质量解决方案和最佳实践(二):解决方案

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 DataLeap流批数据质量解决方案 产品功能架构 火山引擎DataLeap流批数据质量解决方案有 4 个大的功能&#xff1a; 离线数据质量监控&#xff1a;解决批和微批监控…

Spring Boot 中的 CD 工具

Spring Boot 中的 CD 工具 在现代软件开发中&#xff0c;持续交付&#xff08;Continuous Delivery&#xff0c;简称 CD&#xff09;已经成为了一个非常重要的开发模式。CD 工具可以帮助我们自动化构建、测试、部署和发布软件&#xff0c;提高软件交付的速度和质量。在 Spring…

接口增量改动,研发经常忘通知测试,如何解决?

不知道大家有没有同感&#xff0c;做接口测试麻烦的不是测试本身&#xff0c;而是接口它会变&#xff0c;更麻烦的不是接口变了&#xff0c;而是它变了而你不知道。等到你测完&#xff0c;开发才悠悠跟你说 ——“那个接口我改了点东西&#xff0c;你再看一眼哈”。 我那是看一…

el-menu嵌套路由高亮

1、配置路由 2、一级导航页面配置 计算属性定义方法 3、二级导航页面

mysql知识点总结

MySQL的binlog有有几种录入格式?分别有什么区别? 有三种格式,statement,row和mixed. statement模式下,记录单元为语句.即每一个sql造成的影响会记录.由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制. row级别…

环境变量编程

问题 main 函数 (默认进程入口) int main(int argc, char* argv[], char* env[]) argc - 命令行参数个数argv[] - 命令行参数数组env[] - 环境变量数组 (最后一个元素为 NULL) 什么是环境变量&#xff1f; 环境变量是进程运行过程中可能用到的 "键值对" (NAME VA…

使用Bert,ERNIE,进行中文文本分类

GitHub - 649453932/Bert-Chinese-Text-Classification-Pytorch: 使用Bert&#xff0c;ERNIE&#xff0c;进行中文文本分类使用Bert&#xff0c;ERNIE&#xff0c;进行中文文本分类. Contribute to 649453932/Bert-Chinese-Text-Classification-Pytorch development by creatin…

centos通过源文件的方式安装node-red

centos通过源文件的方式安装node-red 一、下载源文件1.1 查看系统信息1.2 下载 二、安装配置2.1 安装nodejs2.2 安装node-red 三、pm2管理node-red进程3.1 pm23.2 node-red设置开机自启动 四、更多 [回到目录] 一、下载源文件 1.1 查看系统信息 查看你的Linux系统是32位还是6…

三、1如何运用设计原则之SOLID原则写出高质量代码?

你好我是程序员雪球。接下来我们学习一些经典的设计原则。其中包括SOLID&#xff0c;KISS&#xff0c;YAGNI&#xff0c;DRY&#xff0c;LOD等。其实这些设计原则从字面意思理解并不难。但是“看懂”和“会用”是两回事&#xff0c;而“用好”就难上加难了。 先来了解SOLID原则…

EMC学习笔记(十三)背板的EMC设计

背板的EMC设计 1.背板槽位的排列1.1 单板信号的互联要求1.2 单板板位结构1.2.1 板位结构影响1.2.2 板间互联电平、驱动器件的选择 2.背板的EMC设计2.1 接插件的信号排布与EMC设计2.1.1 接插件的选型2.1.2 接插件模型与针信号排布 2.2 阻抗匹配2.3 电源、地分配 1.背板槽位的排列…

深度学习的技术原理

目录 人工智能 深度学习的应用场景 神经网络 卷积神经网络&#xff08;CNN&#xff09; 一个神经网络运行的可视化展示 人工智能 信息技术是人类历史上的第三次工业革命&#xff0c; 计算机、 互联网、智能家居等技术的普及极大地方便了人们的日常生活。 通过编程的方式&…

xshell安装jdk1.8环境

xshell安装jdk1.8环境 大家好&#xff0c;今天我们来学习一下xshell安装jdk1.8环境&#xff0c;好好看&#xff0c;好好学&#xff0c;超详细的 第一步 进入xshell官网下载 第二步 打开xshell新建一个会话&#xff0c;如下图&#xff1a; 第三步 输入你的名称、主机ip、端口号(…

Nginx负载均衡与动静分离

一、Nginx负载均衡&#xff1a; 1.概述&#xff1a; Nginx是一款http服务器软件&#xff0c;支持高达50000个并发连接数的响应。 &#xff08;1&#xff09;拥有强大的处理静态资源的能力。 &#xff08;2&#xff09;运行稳定。 &#xff08;3&#xff09;CPU&#xff0c…

nginx+tomcat负载均衡和动静分离

目录 1.部署nginx 2.部署两台tomcat 3.配置nginx 1.部署nginx vim /vim/lib/systemd/system/nginx.service 2.部署两台tomcat 进入第一台装第一个tomcat vim /etc/profile vim /usr/local/tomcat/webapps/test/index.jsp 重启 进入第二台安装第二台tomcat vim /usr/local/tom…