自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (16)
  • 问答 (1)
  • 收藏
  • 关注

原创 基于FPGA的数据采集、编码、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RTC+Uart+AD7606数模转换+电流放大采集等硬件设计及程序验证)

包含硬件PCB设计和FPGA的Verilog代码的编写,下图为主要功能框图。FPGA作为并行处理单元,实现了电流和电压的采集、千兆以太网通讯、SD卡本地存储和串口通讯等。已经打PCB实际验证和Verilog代码在硬件上的实际测试,测试部分包含:千兆网通讯收发测试、AD采集的数据验证、SD卡存储验证、RTC实时时钟读取和RTC的RAM突发读取等。PCB设计采用的是AD软件,Verilog程序通过quartus II软件编写。现由硬件和软件两个方面简单介绍。一、硬件设计下图分别为硬件的正面和反面,纯手工焊

2021-02-06 13:32:56 7045 17

原创 基于RTL8211E的千兆以太网收发verilog程序(已经硬件验证,初学=语法注释较多)

软件平台quartus 13.1硬件芯片 Atera,Cyclone IV EP4CE30F23C8千兆PHY芯片:RTL8211E话不多数,直接附上部分源码,有需要的点击链接下载:

2020-11-08 20:44:04 2986 7

原创 FPGA仿锆石代码风格组合电路时序电路严格分开之(一)8通道16位AD采集

硬件介绍:FPGA采用的是黑金的AX530,AD采集模块采用的是AN706(八通道十六位)。实现功能:AD采集到8通道十六位的电压数据,然后经过串口发送到串口助手显示各个通道的实时电压数据。程序源码介绍:顶层模块包含AD采集模块(AD_RX_module),AD数据转换模块(AD_Volt),AD数据到串口数据转换模块(AD_to_Uart),串口发送模块(Uart_tx_Module)。以下将分模块介绍:1、顶层程序AD_8C_16B:没有什么要说的,就是把底层模块中出现的输入输出脚连接起来。

2020-07-24 09:41:00 1074

原创 FLASH中sector、block、page的区别和联系

在某些情况下,块的大小可能根据擦除方式的不同而有所变化,比如,一个块可以是32KB,也可以是64KB。每个页在物理上都有自己的地址范围,通过页地址和页内偏移地址,可以唯一地标识存储器中的每个字节或位。综上所述,sector、block和page在FLASH中分别代表了不同级别的数据单元和逻辑分区,它们在大小和功能上都有所不同,以适应不同的数据存储和操作需求。在FLASH存储介质中,sector(扇区)、block(块)和page(页)是三个重要的概念,它们代表了不同级别的逻辑分区或数据单元。

2024-04-23 16:08:22 64

原创 Cache的替换策略LRU和一致性协议

当一个新的数据项需要被加入到缓存中时,如果缓存已满,LRU算法会找到链表中最久未使用的节点(即链表头部的节点),将其从链表中移除,并将新的数据项添加到链表的尾部。在这些场景中,LRU算法能够有效地利用有限的缓存空间,提高缓存命中率,从而减少访问主存的次数,提升系统性能。在多级存储体系结构中,由于缓存和主存之间的数据复制和更新操作可能导致数据不一致的问题,因此需要一致性协议来确保数据的一致性。如果缓存中的数据与主存中的数据不一致(即缓存脏),则可能需要从主存中重新加载数据到缓存中。

2024-04-12 18:02:04 265

原创 基于FPGA的数据采集、编码、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RTC+Uart+AD7606数模转换+电流放大采集等硬件设计与程序验证)

顶层和底层为信号走线层;串口数据为什么也用网络助手显示呢,因为我板子上的串口上可以插上一个网络模块,这样串口数据也可以通过无线发送到电脑了,当然硬件上也有有线的串口端子,也进行了验证,不再截图赘述。为了方便我理清思路也进行了主要的时序图的绘制,如下图所示,画时序图的软件可以在这里下载https://download.csdn.net/download/qq_39521541/14951291,破解版很好用。各模块的原理图如下,这是初版 的原理图,实际的硬件在此基础上进行了修改,但是变化不大,就不再截图了。

2024-04-08 18:24:26 1124

原创 典型的HyperFLASH读取终端配置寄存器的命令流概述

如果你的HyperFLASH设备有多个配置寄存器,并且你需要通过地址来选择特定的寄存器,那么这一步就是必要的。这个命令可能是一个特定的命令码,后跟一些参数(如果有的话),这些参数可能包括地址、数据长度或其他控制信息。你需要确保你的接口能够正确接收这些数据,并可能需要进行一些错误检查(如CRC校验)来确保数据的完整性。在某些情况下,你可能需要发送一个关闭或结束命令来告诉设备你已经完成了当前的操作序列。在发送读取命令和地址(如果需要)之后,你需要等待HyperFLASH设备的响应。

2024-04-08 18:16:36 153

原创 HyperBus协议--HyperFLASH中Program Suspend 功能的理解

功能概述:• Program Suspend 功能允许主机在闪存编程或擦除过程中,通过发送特定的命令序列来暂停当前的操作。• 这对于需要处理实时事件或执行其他高优先级任务的系统来说非常有用,因为它允许在不完全中断闪存操作的情况下,暂时将焦点转移到其他任务上。工作原理:• 当主机决定暂停闪存操作时,它会向 HyperFLASH 设备发送一个 Program Suspend 命令。• HyperFLASH 设备接收到该命令后,会立即停止当前的编程或擦除操作,并进入一个低功耗的暂停状态。• 在暂停状

2024-04-08 09:29:02 133

原创 HyperBus协议不会明确告诉你的事

6、HyperFLASH读的时候,initial delay和Read Initial Access time要求不一致,前者大于后者?Tacc是HyperFLASH将数据从存储区移动到data IO的时间。1、HyperRAM mem space通常需要initial delay,HyperFlash和HyperRAM reg space通常不需要 initial delay。2、HyperRAM的地址低4位是0到f,在DQ传输时地址是0到7,因为DQ一个地址包含2个Bytes。

2024-04-03 09:30:04 179

原创 HyperBus中的两种突发传输方式,即Linear Burst(线性突发)和Wrapped Burst(回绕突发)

在实际应用中,需要根据硬件平台、系统架构以及应用需求来选择合适的突发传输方式,以实现高效的数据传输和性能优化。在这种模式下,数据传输同样从指定的起始地址开始,但当达到某个预设的边界或限制时,地址会回绕到指定的起始地址或某个固定的起始点,并继续传输。Linear Burst模式下,数据传输从指定的起始地址开始,并连续进行,直到达到指定的突发长度或遇到边界限制。HyperBus中的两种突发传输方式,即Linear Burst(线性突发)和Wrapped Burst(回绕突发),是两种用于连续数据传输的机制。

2024-03-25 17:07:36 214

原创 system Verilog:clocking中定义信号为input和output的区别

例如,即使a在clocking块中被定义为output,它仍然可能在测试平台的其他部分被定义为从DUT读取的输入。在波形上,会看到a信号的变化与DUT中的实际变化同步,并在clk的上升沿(posedge)处被采样。在波形上,会看到a信号的变化是由测试平台驱动的,并且这些变化将在clk的上升沿处同步到DUT。最后,为了完全理解a在波形上的行为,还需要查看其在测试平台和DUT中的完整描述,以及它们如何交互。对于output的情况,a的波形将由测试平台控制,并且这些变化将同步到DUT的输入。

2024-03-20 11:05:30 272

原创 $setuphold<setup>(posedge CK:105446753233 ps,posedge D:105446753066 ps,17.1:171PS,-12.6:-126PS);含义解释

(posedge CK:105446753233 ps, posedge D:105446753066 ps): 这部分指定了触发检查的事件和它们的时间。当 D 的上升沿发生在 105446753066 ps,并且随后 CK 的上升沿发生在 105446753233 ps 时,本指令将检查这两个信号之间的 setup 和 hold 时间。$setuphold: 这是指令的名称,用于执行 setup 和 hold 时间检查。D 相对于 CK 的上升沿的 setup 时间是否大于或等于 17.1 ns。

2024-03-11 16:08:25 319

原创 IC中SVN常用命令记录

2、使用svn merge命令回滚到指定版本。例如,svn merge -r 2106:2105,将回滚到版本号2105。1、svn查看文件修改记录命令:svn log <文件路径>3、使用svn diff命令查看回滚后的文件差异。

2024-02-27 16:41:08 64

原创 异步处理部分容易出现X态的原因

2、DFF、gating cell等由于setup/hold不满足,或者rst信号的recovery/removal不满足,或者异步逻辑同步的第一拍DFF,产生X态。3、仿真环境或者平台原因,模型或者整chip顶层PIN脚的信号没有驱动,是高阻Z态,进入数字逻辑内部变成X态。4、仿真pattern自身原因,比如程序使用了未初始化(写)的存储区,读出X态的数据并使用,导致X态传播。1、信号的电平宽度比这个cell的门延时还短,信号经过这个cell后的输出是X态。

2024-02-01 17:00:53 94

原创 Perl语言中的/^\d+$/怎么理解?

KaTeX parse error: Undefined control sequence: \d at position 6: 表示行尾。/ 这个正则表达式就是匹配一整行是否全是数字。用来匹配位置:^表示行首,\̲d̲表示数字,即0-9。

2024-01-08 19:50:50 361

原创 当arlen为0或arsize为0的传输意思

/ 读传输burst size为1个字节。// 读取到的数据为0xABCD。// 读传输长度为1个数据。// 读传输响应为正常。// 读传输响应为正常。// AXI读传输响应示例。// AXI读传输响应示例。

2023-12-29 16:32:23 401

原创 本质立即断言 a’(1’b1)和AReady’(Ready)

在System Verilog中,a’(1’b1)和AReady’(Ready)是基于模拟事件的语法。它们用于测试表达式的求值,并且在过程块中立即被求值。这些语法的本质是立即断言,用于验证特定条件是否满足。AReady’(Ready):这个语法用于测试信号AReady是否与信号Ready的值相等。如果相等,断言就会通过。a’(1’b1):这个语法用于测试信号a是否在当前时间步骤上升到高电平。这些语法可以在System Verilog的过程块中使用,用于动态模拟和验证设计的正确性。

2023-12-27 10:51:15 379

原创 数字IC验证随笔(更新ing)

1.无论digital input\output,还是analog input\output信号都要从pad进出。3.Pinmux及数字对gpio的配置,最终都是体现在模拟处的PAD位置。2.PAD虽然不是芯片物理上的IO,但可以理解为仿真中芯片的IO。

2023-11-10 14:16:27 58

原创 IC验证中CLK验证思路

数字IC验证中的时钟验证思路

2023-11-09 10:21:14 176

原创 candence IC验证工具Xrun+IMC+SimVision(更新ing)

Xrun、IMC、SimVision

2023-11-09 10:11:06 391 1

原创 IC验证中自研模块bug很容易产生的点

记录一些IC验证中非常容易出现的bug点,check list

2023-11-09 10:06:02 46

原创 Quartus II如何选中一列,然后删除复制等。

Vivado选中一列可以用ctrl+shift+鼠标。Quartus II选中一列可以用ctrl+alt或者直接alt+鼠标,可以用于删除选中增添一列。

2021-07-19 20:48:39 1253

原创 FPGA突发模式读写DS1302并发送到串口显示

FPGA:EP4CE30E22C8N实时时钟:DS1302实现功能:按键1按下一次,以突发模式写入一次初始化日期和时间。按键2按下一次,突发读取一次DS1302中的日期和时间,并通过串口发送到上位机串口助手显示。Verilog代码主要分为4个模块,RTL图如下和模块例化如下,主要包含DS1302模块,按键控制模块,串口通讯模块和DS1302数据向串口模块间的数据准备。//----------------------------------------------------------------

2020-12-24 15:32:35 1149 2

原创 基于4G网络的图像传输、处理、显示和监控系统(LabVIEW上位机)

是几年前做比赛的时候做的一个监控系统,当时做这个图像传输的确花费了很多时间,开发软件是LabVIEW,现在分享出源码希望可以帮助到需要的人。主要功能包括:简单的图像处理、显示,TCP/IP协议通讯,各种监控指标,图像的放大缩小存储等。接下来简单分模块介绍一下,首先上一个前面板界面(这个界面经过了一个学弟的简单修改了,原来的找不到了,但是风格和空间基本没变)。TCP/IP协议部分如下,这部分非常简单,但是一定要注意数据的协议,侦听比较简单,读取数据时注意数据量和模式选择。之后是图像数据的处理和显示

2020-12-04 12:04:27 3050 2

原创 用FPGA实现正负数开方、平方、乘法、除法、取余等数学运算并signaltap硬件仿真成功

用FPGA实现正负数开方、平方、乘法、除法、取余等数学运算并signaltap硬件仿真成功主要通过软件可以综合的数学运算和IP核实现一、先定义了参数,有正有负。matlab计算结果是35,Signaltap计算结果也是35二、数学公式如下:计算方案:参数设置:S_x_110000 = 0.099110000=991S_y_110000 = -0.107610000=-1076S_z_1 10000= -0.223110000=-2231S_x_2 10000= 0.115010000=11

2020-11-09 16:17:45 3008

原创 FPGA行为级描述代码(严格区分组合逻辑和时序逻辑) 持续更新中

写在前面:近两个月开始接触FPGA,硬件采用的是黑金的AX530,但是其代码风格我觉得并不是很好,而且注释也比较乱。所以,虽然我用的硬件是黑金的,但是程序我更偏向于锆石的代码风格,也就是行为级描述的时候比较严格的通过组合电路和时序电路共同实现数据的赋值和判断等操作。这样的好处呢,代码比较清楚易懂,逻辑感觉更加清晰一些。我写这个博客的意义在于延续一下我认为比较好的代码风格,因为锆石貌似已经不再更新一些资料了,有一些硬件的操作,锆石的资料里并没有,所以我会按照其风格在本博客中更新一些锆石没有的硬件的一些操作的

2020-07-24 09:42:00 468

原创 LabVIEW文件存储路径自适应系统时间

功能描述,根据程序所在位置拆分路径,然后按照当前的系统时间,命名所要存储的数据,保证了上位机等通讯接收到的数据反复命名的困扰,已经写成了子VI,直接调用这个程序,只需要引入需要存储的数据,就会自动保存txt文件到exe程序所在的位置了。源码下载链接:https://download.csdn.net/download/qq_39521541/12628483...

2020-07-20 18:49:29 835

原创 用Verilog实现BCD编码

众所周知,FPGA在计算乘法除法的时候比较慢,所以当需要把一个数,例如52020这个数按照个十百千万发送出去的时候,在单片机或者其他软硬件中,可以直接取余得到每一位数据,然后存储起来发送到上位机或者别的地方。但是FPGA每一取余操作,所以需要通过BCD编码通过移位的方式实现个十百千万的取出,然后发送。而BCD译码通常通过左移加三法,我在做8个通道的16位AD采集的时候,需要把采集到的8个字节一次的发送到上位机,所以就编写了一个verilog代码来实现左移加三法,主要采用了组合逻辑中的for循环16次实现BC

2020-07-18 20:15:39 1975

原创 自己写的LabVIEW的串口助手

可以实现串口协议的修改,命令的发送和接收,同时可以清空接收数据显示区和保存接收到的数据位txt文件,文件路径自适应为当前的系统时间,路径为当前的程序路径。同时可以显示GPS信息(如果传输了GPS数据的话)。包含子陀螺仪的数据、编码器的数据、和编码器算出来的XY左边,这是曾经做的一个工程,用于定位和显示。程序采用模块化编码,包括数据包的拆包转换子vi,字节到16位或者32位数据转换子vi,存储路径自适应子vi等。可以根据自己的需要修改解包子VI就可以图形化显示正确的数据了。非常方便用于工程测试和比赛的.

2020-07-17 11:05:59 1547

原创 正点原子中的usart和mpu6050联系的探究

正点原子中的usart和mpu6050联系的探究我发现mpu6050例程中,必须要有usart.h否则函数编译虽然不报错,但是程序执行不了。为什么我这么说嗯,我对我做的尝试做如下的说明。我是针对正点原子的MPU6050战舰版例程进行的测试。1、remove左边SYSTEM文件夹下的usart文件,见图1,当然也移除了usmart文件夹(此实验中没有实际用处)2、屏蔽掉LCD中用到串口1的地方(主要就是打印LCD型号的地方),见图2.1和2.23、屏蔽掉所有用到usart.h的子文件,如图3中上面的四

2020-06-02 11:43:00 621

FPGA控制摄像头,不要积分,科普了解

科普了解FPGA和摄像头外设

2023-11-30

ADDA入门了解,感兴趣的可以继续下载更多资料

ADDA入门了解,感兴趣的可以继续下载更多资料

2023-11-30

锆石FPGA入门,学习Verilog可以

Verilog入门,FPGA入门,不要积分,科普

2023-11-30

锆石FPGA失传的资料,很好的学习材料,上传备份一下

FPGA、锆石、USB3.0、SD卡、以太网等,不要积分科普

2023-11-30

千兆以太网通讯、数据采集、存储显示等_PCB源文件-AD软件.rar

FPGA四层板设计,已焊接并编程验证:包含千兆以太网(RTL8211EG);Micro SD卡存储;AD7606并行8路采集;DS1302;串口通讯等。欢迎交流讨论

2021-02-06

AD7606采集-Micro SD存储-千兆网通讯-4G源码.rar

FPGA程序,主芯片EP4CE10E22C8,实现了8路AD数据的采集、实时时间读取、SD卡本地存储,然后分别同时通过千兆以太网(RTL8211E,1000M)和串口发送到上位机显示,数据发送和存储以实时时间为分隔。欢迎交流讨论

2021-02-06

TimeGen时序图软件.rar

写代码画时序图用

2021-01-28

17_2.RCT_Burst_Time.rar

FPGA通过突发模式读写DS1302日期和时间,并通过串口发送到串口助手显示。(组合电路时序电路严格分开)。

2020-12-24

基于4G(TCP/ip)的图像传输及数据监控(LabVIEW源码).rar

分享若干年前的一个比赛项目上位机源码,本LabVIEW上位机通过4G(tcp/ip)通讯,实现了对下位机采集到的数据的接收与控制,主要包含以下功能:图像的传输及处理显示和存储、温度等数据的处理显示、图像的放大缩小、蜂鸣器及闪烁预警等

2020-12-04

21.RAM_SD.rar--RAM产生数据,进入SD卡存储,SPI模式按片存储

在RAM中循环产生0~Z的数据,产生数据都是速度由变量rate控制,RAM写满时写入SD卡存储起来,一次写入一个block。程序主要采用了有有限状态机和verilog行为级描述,组合电路与时序电路严格分开,注释较为清楚。

2020-11-09

26_2.ENET_Send_Receive.rar千兆以太网收发程序

用严格的组合逻辑和时序逻辑和状态机实现了千兆以太网和电脑的收发通讯,接受到的数据显示到数码管上。verilog硬件描述语言再quartus 13.1上编写,硬件采用的是黑金的AX530,程序自己写的,比黑金的程序逻辑清晰,注释全面

2020-11-07

25_3.AD_UART_SD++.rarAD7606->FIFO-uart/SD

AD7606产生的8路数据依次进入两个FIFO中,一个FIFO的数据用于进入RAM然后按照扇区写入SD卡,另一个FIFO的数据通过串口发送到上位机,用于数据显示

2020-11-07

23_1.FIFO_RAM_SD++.rar FIFO/RAM/SD间的数据交互

循环产生数据,依次写入fifo,当到达一定数据量后,数据从FIFO读出写入RAM,RAM满了后,依次写入SD卡的扇区,一个SD扇区写满后,写入下一个SD扇区

2020-11-07

FPGA\Verilog实现开方、平方、取余等数学算法

FPGA\Verilog实现开方、平方、取余等数学算法,已经在硬件中实际验证过,计算没有问题,验证硬件是黑金的AX530

2020-11-07

FPGA实现八通道16进制AD采集和串口显示

通过Verilog语法实现了对8通道16位AD数据的持续不断的采集,并持续不断的发送到串口助手显示。

2020-07-23

15、串口通讯+XY带转角+速度.rar

编写的与STM32等单片机通讯的上位机人机交互程序,可以把通过设置波特率,串口号、校验位、停止位等协议,实现对单片机采集到的数据拆包显示上界面上。显示的数据包含GPS坐标、mpu6050数据、双编码器数据、XY坐标等。除此之外还包括接收到数据的实时显示和清空,数据保存为txt文件等操作。

2020-07-17

LabVIEW程序:实现单字节到16位数据或者32位数据的子VI

LabVIEW子VI程序,可以直接调用,通过控制16位还是32位的bool值,实现数据转换成16位还是32位数据

2020-07-17

用verilog语言在FPGA通讯工程中实现BCD译码

用verilog的for循环实现了0-99999之间数据的BCD译码,方便FPGA中AD采集和串口通讯间等数据传输,一个时钟大概就可以实现一次译码。已经在8路16位的AD采集的FPGA程序中测试运行,可以实现采集数据后,发送到上位机通过ascl码显示8路数据。可以当成模块直接在自己的程序中调用译码即可

2020-07-17

自适应存储位置的txt文件存储.vi

根据程序所在位置拆分路径,然后按照系统时间命名要存储为TXT文件,解决了上位机每次读取数据都需要改变存储文件名字的问题。

2020-07-17

逐步删除串口1程序测试6050.rar

我发现mpu6050例程中,必须要有usart.h否则函数编译虽然不报错,但是程序执行不了。为什么我这么说嗯,我对我做的尝试做如下的说明。我是针对正点原子的MPU6050战舰版例程进行的测试。 1、remove左边SYSTEM文件夹下的usart文件,见图1,当然也移除了usmart文件夹(此实验中没有实际用处) 2、屏蔽掉LCD中用到串口1的地方(主要就是打印LCD型号的地方),见图2.1和2.2 3、屏蔽掉所有用到usart.h的子文件,如图3中上面的四个头文件,他们都包含了usart.h,都注释掉,这里特别说明需要额外注释掉主程序test.c中的一些向上位机传递数据的一些函数。 4、以上三步完成后,编译程序,程序无错误和警告。下载到战舰开发板中,发现液晶屏不亮,无法显示陀螺仪数据。 5、为了验证问题所在,采用流水灯指示程序的运行状态,不断向上调节LED的位置,直到LED调整到LED初始化下面的时候,编译下载程序开发板上的LED都不亮。至此可以说明有些LED初始化上面某地方有问题,但LED初始化上面仅仅有#include和一些变量的初始化。变量初始化不可能引起问题。 6、进行ST-LINK的硬件调试,发现问题可能由6050导致。 7、于是我用其他的不含6050的程序(例如跑马灯例程),移除usart文件和注释所有含有usart.h的地方,下载运行程序,程序正常运行跑马灯正常运行。 8、经过以上7步的测试可以认为,问题在于mpu6050和usart.h存在潜在的联系,虽然不用调用usart.h。但是是什么联系呢 9、于是我重新加入了第一步中移除的SYSTEM文件夹下的usart,但是其他的地方不变,就是其他所有用到usart.h头文件的地方依旧注释掉,编译没有错误,下载,流水灯亮,液晶屏显示mpu6050数据。所以验证了第8步的猜想,存在着潜在的不为人知的联系。 10、为了知道是什么联系,我不断的删除usart.c和usart.h中的的内容,最终发现,只有当usart.c中保留如下图5,所示的20几行看不懂的程序的时候,mpu6050一切可以运行正常。 经过这里我所有的尝试基本上完成了,接下来抛出我的几个问题 1、第十步中的那20行程序到底是干什么用的呢? 2、为什么那20几行程序仅仅影响了当程序中含有mpu6050时的程序呢? 3、既然mpu6050的三个相关的文件中包含了usart.h的头文件,那为啥注释掉后没有报错呢? 4、mpu6050到底和usart.h中的那20行程序存在什么关系呢? 再想起什么问题,会在下面补充,我把尝试的代码也附在下面,方便大家尝试验证。 最后希望大家能一起讨论一起进步,第一次在论坛写这么多文字,也希望大家多多支持吧。

2020-06-02

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除