首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
81 阅读
2
virtuoso和empyrean alps模拟仿真和混仿教程
74 阅读
3
科普:Memory Compiler生成的Register file和SRAM有何区别?
73 阅读
4
后仿中$setup,$hold与$setuphold
44 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
35 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
168
篇与
的结果
2025-07-14
TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL(1)(2008-08-14 16:32:57)
一、部分资料上说它们的逻辑标准,门限都是一样的,就是供电大小不同,这两种电平的区别就是这些么?是否LVTTL电平无法直接驱动TTL电路呢?另外,"因为2.4V与5V之间还有很大空闲,对改善噪声容限并没什么好处,又会白白增大系统功耗,还会影响速度。" 中,关于改善噪声容限和系统功耗部分大家还有更深入的解释么?简单列个表把Voh Vol Vih Vil VccTTL 2.4 0.4 2.0 0.8 5CMOS 4.44 0.5 3.5 1.5 5LVTTL 2.4 0.4 2.0 0.8 3.3LVCMOS 2.4 0.5 2.0 0.8 3.3SSTL_2 1.82 0.68 1.43 1.07 2.5根据上表所示,LVTTL可以驱动TTL,至于噪声,功耗问题小弟就不理解了,希望高手赐教!TTL 和 LVTTL 的转换电平是相同的, TTL 产生于 1970 年代初, 当时逻辑电路的电源电压标准只有 5V 一种, TTL 的高电平干扰容限比低电平干扰容限大. CMOS 在晚十几年后才形成规模生产, 转换电平是电源电压的一半. 1990 年代才产生了 3.3V/2.5V 等不同的电源标准, 于是重新设计了一部分 TTL 电路成为 LVTTL. LVTTLTTL 和 LVTTL 的转换电平是相同的, TTL 产生于 1970 年代初, 当时逻辑电路的电源电压标准只有 5V 一种, TTL 的高电平干扰容限比低电平干扰容限大. CMOS 在晚十几年后才形成规模生产, 转换电平是电源电压的一半. 1990 年代才产生了 3.3V/2.5V 等不同的电源标准, 于是重新设计了一部分 TTL 电路成为 LVTTL.下面总结一下各电平标准。和新手以及有需要的人共享一下 ^_^.
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
Verilog inout 双向口使用和仿真 (2008-08-03 11:01:13)
芯片外部引脚很多都使用inout类型的,为的是节省管腿。一般信号线用做总线等双向数据传输的时候就要用到INOUT类型了。就是一个端口同时做输入和输出。 inout在具体实现上一般用三态门来实现。三态门的第三个状态就是高阻'Z'。 当inout端口不输出时,将三态门置高阻。这样信号就不会因为两端同时输出而出错了,更详细的内容可以搜索一下三态门tri-state的资料.1 使用inout类型数据,可以用如下写法:inout data_inout;input data_in;reg data_reg;//data_inout的映象寄存器reg link_data;assign data_inout=link_data?data_reg:1’bz;//link_data控制三态门//对于data_reg,可以通过组合逻辑或者时序逻辑根据data_in对其赋值.通过控制link_data的高低电平,从而设置data_inout是输出数据还是处于高阻态,如果处于高阻态,则此时当作输入端口使用.link_data可以通过相关电路来控制.2 编写测试模块时,对于inout类型的端口,需要定义成wire类型变量,而其它输入端口都定义成reg类型,这两者是有区别的.当上面例子中的data_inout用作输入时,需要赋值给data_inout,其余情况可以断开.此时可以用assign语句实现:assign data_inout=link?data_in_t:1’bz;其中的link ,data_in_t是reg类型变量,在测试模块中赋值.另外,可以设置一个输出端口观察data_inout用作输出的情况:Wire data_out;Assign data_out_t=(!link)?data_inout:1’bz;else,in RTLinout use in top module(PAD)dont use inout(tri) in sub module也就是说,在内部模块最好不要出现inout,如果确实需要,那么用两个port实现,到顶层的时候再用三态实现。理由是:在非顶层模块用双向口的话,该双向口必然有它的上层跟它相连。既然是双向口,则上层至少有一个输入口和一个输出口联到该双向口上,则发生两个内部输出单元连接到一起的情况出现,这样在综合时往往会出错。对双向口,我们可以将其理解为2个分量:一个输入分量,一个输出分量。另外还需要一个控制信号控制输出分量何时输出。此时,我们就可以很容易地对双向端口建模。例子:CODE:module dual_port (....inout_pin,....);inout inout_pin;wire inout_pin;wire input_of_inout;wire output_of_inout;wire out_en;assign input_of_inout = inout_pin;assign inout_pin = out_en ? output_of_inout : 高阻;endmodule可见,此时input_of_inout和output_of_inout就可以当作普通信号使用了。在仿真的时候,需要注意双向口的处理。如果是直接与另外一个模块的双向口连接,那么只要保证一个模块在输出的时候,另外一个模块没有输出(处于高阻态)就可以了。如果是在ModelSim中作为单独的模块仿真,那么在模块输出的时候,不能使用force命令将其设为高阻态,而是使用release命令将总线释放掉很多初学者在写testbench进行仿真和验证的时候,被inout双向口难住了。仿真器老是提示错误不能进行。下面是我个人对inout端口写testbench仿真的一些总结,并举例进行说明。在这里先要说明一下inout口在testbench中要定义为wire型变量。先假设有一源代码为:module xx(data_inout , ........);inout data_inout;........................assign data_inout=(! link)?datareg:1'bz;endmodule方法一:使用相反控制信号inout口,等于两个模块之间用inout双向口互连。这种方法要注意assign 语句只能放在initial和always块内。module test();wire data_inout;reg data_reg;reg link;initial begin..........endassign data_inout=link?data_reg:1'bz;endmodule方法二:使用force和release语句,但这种方法不能准确反映双向端口的信号变化,但这种方法可以反在块内。module test();wire data_inout;reg data_reg;reg link;xx; //延时force data_inout=1'bx; //强制作为输入端口...............xx;release data_inout; //释放输入端口endmodule很多读者反映仿真双向端口的时候遇到困难,这里介绍一下双向端口的仿真方法。一个典型的双向端口如图1所示。其中inner_port与芯片内部其他逻辑相连,outer_port为芯片外部管脚,out_en用于控制双向端口的方向,out_en为1时,端口为输出方向,out_en为0时,端口为输入方向。用Verilog语言描述如下:module bidirection_io(inner_port,out_en,outer_port);input out_en;inout[7:0] inner_port;inout[7:0] outer_port;assign outer_port=(out_en==1)?inner_port:8'hzz;assign inner_port=(out_en==0)?outer_port:8'hzz;endmodule用VHDL语言描述双向端口如下:library ieee;use IEEE.STD_LOGIC_1164.ALL;entity bidirection_io isport ( inner_port : inout std_logic_vector(7 downto 0);out_en : in std_logic;outer_port : inout std_logic_vector(7 downto 0) );end bidirection_io;architecture behavioral of bidirection_io isbeginouter_port<=inner_port when out_en='1' else (OTHERS=>'Z');inner_port<=outer_port when out_en='0' else (OTHERS=>'Z');end behavioral;仿真时需要验证双向端口能正确输出数据,以及正确读入数据,因此需要驱动out_en端口,当out_en端口为1时,testbench驱动inner_port端口,然后检查outer_port端口输出的数据是否正确;当out_en端口为0时,testbench驱动outer_port端口,然后检查inner_port端口读入的数据是否正确。由于inner_port和outer_port端口都是双向端口(在VHDL和Verilog语言中都用inout定义),因此驱动方法与单向端口有所不同。验证该双向端口的testbench结构如图2所示。这是一个self-checking testbench,可以自动检查仿真结果是否正确,并在Modelsim控制台上打印出提示信息。图中Monitor完成信号采样、结果自动比较的功能。testbench的工作过程为1)out_en=1时,双向端口处于输出状态,testbench给inner_port_tb_reg信号赋值,然后读取outer_port_tb_wire的值,如果两者一致,双向端口工作正常。2)out_en=0时,双向端口处于输如状态,testbench给outer_port_tb_reg信号赋值,然后读取inner_port_tb_wire的值,如果两者一致,双向端口工作正常。用Verilog代码编写的testbench如下,其中使用了自动结果比较,随机化激励产生等技术。`timescale 1ns/10psmodule tb();reg[7:0] inner_port_tb_reg;wire[7:0] inner_port_tb_wire;reg[7:0] outer_port_tb_reg;wire[7:0] outer_port_tb_wire;reg out_en_tb;integer i;initialbeginout_en_tb=0;inner_port_tb_reg=0;outer_port_tb_reg=0;i=0;repeat(20)begin50i=$random;out_en_tb=i[0]; //randomize out_en_tbinner_port_tb_reg=$random; //randomize dataouter_port_tb_reg=$random;endend//** drive the ports connecting to bidirction_ioassign inner_port_tb_wire=(out_en_tb==1)?inner_port_tb_reg:8'hzz;assign outer_port_tb_wire=(out_en_tb==0)?outer_port_tb_reg:8'hzz;//instatiate the bidirction_io modulebidirection_io bidirection_io_inst(.inner_port(inner_port_tb_wire),.out_en(out_en_tb),.outer_port(outer_port_tb_wire));// monitor *always@(out_en_tb,inner_port_tb_wire,outer_port_tb_wire)begin1;if(outer_port_tb_wire===inner_port_tb_wire)begin$display("\n **** time=%t ****",$time);$display("OK! out_en=%d",out_en_tb);$display("OK! outer_port_tb_wire=%d,inner_port_tb_wire=%d",outer_port_tb_wire,inner_port_tb_wire);endelsebegin$display("\n **** time=%t ****",$time);$display("ERROR! out_en=%d",out_en_tb);$display("ERROR! outer_port_tb_wire != inner_port_tb_wire" );$display("ERROR! outer_port_tb_wire=%d, inner_port_tb_wire=%d",outer_port_tb_wire,inner_port_tb_wire);endendendmodule分享:
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
安装Cadence的Linux平台的限制原理及安装方案 (2008-07-29 11:10:15)
目前常用的Cadence IC版本是IC5.0、IC5033、IC5141,从根本上来说,限制安装和运行的唯一问题就是Linux发行版本对线程的支持能力。Linux有两种线程机制:Linuxthreads和NPTL,早期是Linuxthreads,中期是两者并存,现在最新的只使用NPTL了。多数大型软件如 IC5.0、IC5.033、IC5141、LDV5.1、Oriacle 9i等大规模设计软件,采用了十分保守的方案,使用的是早期的linuxthreads机制。与线程相关的是Linux动态链接库glibc的版本。不论是什么linux发行版本,只要glibc在2.2x~2.3x的,都保留了 Linuxthreads线程机制,都可以安装并运行上述系列EDA软件;但是,当glibc发展到2.4以上后,由于glibc2.4以上版本取消了 linuxthreads线程机制,全部使用NPTL机制,因此是不可以运行 IC5.0、IC5.033、IC5141、LDV5.1、Oriacle 9i等大多数保守的软件采用linuxthreads线程机制的的软件,而且由于采用glibc2.4+的Linux发行版本的许多软件采用了该动态链接库进行了重新编译,因此不可以将glibc降级以便安装EDA工具(除非是Linux高手水平到达了可以完全采用Linux源代码进行编译一个采用 glibc2.4-版本之下的全新定制的Linux发行版本!)注意许多包含两种线程机制的Linux发行版本,当其默认线程机制是NPTL而不是linuxthreads时,将系统变量LD_ASSUME_KERNEL设置为2.4.1就可以了。安装时还有两种情况:一种情况是找不到解压缩文件,那么就下载一个ncompress版本来使用就好了(如RedHat没有该工具、Suse却有该工具,版权上的事情我们就不去考虑了),或者按照别的资料上介绍的,修改 io_fltr.c和process_file.c文件而采用其它的解压缩工具也是可行的;另一种情况是安装时需要tar和sort两个软件,采用 NTPL机制编译的tar和sort文件是不能安装Cadence的,所以,不妨将旧版本(如RH7.2)的tar和sort文件替换掉当前版本的对应文件。很懒的朋友,干脆拷贝一个在低版本上安装后的可执行文件夹到当前Linux版本,配置好环境变量后,也是可以顺利运行的。现在该提到实际发行版本了:我使用过的,RedHat7.x、RedHat8.、RHEL AS1.x、RHEL AS2.x、FC1、FC2可以很直接使用;RedHat9.x、RHEL3.x、RHEL4.x、FC3、FC4、SUSE8.x、SUSE9.x、 SUSE10.0(部分早期编译版本,后来编译版本不可用)、Ubantu(目前面世的所有版本)等都是可以使用的。FC5、FC6等采用的是 glibc2.5x、glibc2.6x,Mandrake10采用的是glibc2.4,因此是不能安装IC5.xx的。查看发行版光盘的RPMs下,以glibc开头的rpm文件(如glibc-devel-2.3.5-34.i386.rpm)就可以看到glibc的发行版本(示例是2.3.5),就可以确定该Linux版本是不是可以安装EDA工具了。 Pasingen 2007.02.09 ==============================================特别提示:最新的Cadence IC610版本采用NTPL机制,因此可以支持现在所有的最新Linux发行版本。但是数据库从ODBA模式改成OA模式,一方面以前的数据格式需要进行转换后才能使用(IC610提供转换工具),另一方面License方式也与IC5.x很不相同。
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
CPU分支指令预测技术 (2008-07-15 21:52:09)
CPU分支指令预测技术2007年07月25日 星期三 15:10分支指令预测技术1.分支指令预测 在程序中一般都包含有分支转移指令,据统计,平均每七条指令中就有一条是分支转移指令.在指令流水线结构中,对于分支转移指令相当敏感。假设在80486的指令流水线中的第一条指令已进入到译码阶段,而第二条指令已进入到提取阶段(准备进入译码器),如果发现第一条指令是分支指令(如跳转到某个地址),则指令预取队列中下一条及下下条等指令预取无效。这时(确切地说,等到第一条指令执行期间形成了分支的目标地址),需从目标地址中现取指令,并交付执行,同时应立即清除指令预取队列,再将目标地址后面的指令预取过来填到队列中。这表明,一遇到分支指令,整个指令流水线就被打乱一次,稍后才能恢复到正常。显然,这影响了机器的运行速度。为此,在Pentium处理器中使用了分支目标缓冲器(Branch Target Buffer,BTB)来预测分支指令。 BTB实际是一个能存若干(通常为256或512)条目的地址存储部件。当一条分支指令导致程序分支时,BTB就记下这条指令的目标地址,并用这条信息预测这一指令再次引起分支时的路径,预先从该处预取。下面看一下BTB在循环程序中应用。循环程序在程序设计中使用得十分普遍。在指令级目标程序中构成循环程序需要用转移指令(条件转移指令或无条件转移指令)。看下例: MOV CX.100 LOOP: …… …… DEC CX JNZ LOOP …… 在第一次执行到JNZ指令时,预测的转移地址是存在BTB中的前面一条JNZ指令的目标地址,不是LOOP,这一次预测是错误的。但执行后目标地址LOOP便存入到BTB中。等到下一次执行到JNZ指令,就按BTB中的内容来预测,转移到LOOP,这是正确的。如此,一直到cx的值变为0之前,也都是对的。当再循环一次CX的值变为0时,JNZ指令因条件不成立而不实行转移,而预测仍是LOOP,预取仍按该预测进行,这是第二次预取错误。可见,该例中100次循环,有98次预测,确切地说,有98次预测指导下的预取是正确的。同理,对于1000次循环,就会有998次的预取是正确的。即循环次数越多,BTB带来的效益就越高。 图8.1所示是Pentium处理器的分支预测机制示意图。指令预取器从位于CPU内部的L1指令Cache中预取指令(一般情况,从中可以取到,如果其中没有则访问位于主板上的L2 Cache,若再没有则访问主存储器),指令预取队列中的指令按照管道方式(即先进先出)依次进入指令译码器,当译码时发现是一条分支指令,则检查BTB中有无该种分支指令的记录,若有,则立即按照所记录的目标地址进行预取(目标地址对应的指令及其后面的指令),替代原先已进入指令预取队列中的指令。在这条指令执行完毕前夕,将该指令的实际目标地址再添入BTB中(当然,在预测正确时,目标地址不会变),以使BTB中总保持最近遇到的分支指令及其目标地址。 细心的读者可能会发现,这似乎和上面提到的没有分支预测的80486差不多。应该指出,Pentium的分支预测确实是晚了一些,但毕竟作了预测,并根据预测的结果进行了预取。说它进行了预测和预取,是因为这些是在译码后立即做的,从80386开始指令部件中设置了已译码指令队列(参看第七章的图7.1),指令从译码到执行还有一段时间。此外,对条件分支指令判断条件是否成立以及分支目标地址的形成也需要时间,而这些是在指令执行时进行的。说它预测晚了一些,是因为总是希望预测在译码之前,即在指令预取的过程中进行预测。实际上,这就是在第六代微处理器中得以实现的动态分支预测。 2.推测执行与动态分支预测 推测执行技术又称预测执行技术。它的基本思想是:在取指阶段,在局部范围内预先判断下一条待取指令最有可能的位置,即在取指部件就具有部分执行功能,以便取指的分支预测,保证取指部件所取的指令是按照指令代码的执行顺序取入,而不是完全按照程序指令在存储器中的存放顺序取入。 动态分支预测是推测执行的一种具体做法,它是相对静态分支预测而言的。静态分支预测在指令到了译码器,进行译码时,利用BTB中目标地址信息预测分支指令的目标地址(如Pentium处理器那样);而动态分支预测的预测发生在译码之前,即对指令缓冲器(与8086、80386的指令预取队列基本相同,但有区别。)中尚未进入译码器中的那部分标明每条指令的起始和结尾,并根据BTB中的信息进行预测,这样发现分支指令要早。因此,对动态分支预测,一旦预测有误,已进入到流水线中需要清除的指令比静态分支预测时要少,从而提高了CPU的运行效率。 Everest的测试项目:CPU Queen是测试CPU的分支预测能力,以及预测错误时所造成的效能影响。CPU PhotoWorxx著重於CPU的整数运算能力,利用模拟数位影像处理来进行CPU效能的评估CPU ZLib是另一项针对CPU整数运算的测试,利用Zlib这个压缩函式库,来计算CPU在处理压缩档案时的能力。FPU Julia是利用朱利亚碎形几何运算,来评估CPU的单精度(32bit)浮点运算能力。FPU Mandel则利用了"Mandelbrot″碎形几何运算,来评估CPU的倍精度(64bit)运算能力。FPU SinJulia则是利用修改过的朱利亚碎形运算,来评估CPU的延伸精度(80bit)浮点运算能力。
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
集成电路职位要求 (2008-07-15 12:57:12)
职位要求:图像Scaler处理工作,加入Scaler项目组,负责部分模块的开发视频图像处理相关专业,了解电视原理、场频变换、逐行隔行格式转换、帧场图像放大缩小等.熟悉Simulink,有写S函数经验.研究生或两年以上相关工作经验的本科生.从事硬件开发1年以上经验,熟悉硬件开发流程.精通verilog硬件描述语言,熟悉仿真、综合、验证相关工具以及有Scaler经验者优先.硬件scaler算法交流常用的SCALER的算法有最近邻域法/双线性插值/双三次插值/,大家一般用什么算法实现,效果如果一起讨论一下,如果有什么新的好的算法,不妨贴出来一起研究学习一下.技术特点:● 智能多帧去隔行算法 ● 可驱动普通CRT,CRT背投,LCD● 输入信号 ● 亮度/色度边缘改善 ITU-R601、ITU-R656 ● 黑电平扩展 YUV 4:2:2、4:1:1、4:4:4 ● 自适应降噪技术 RGB 4:4:4 ● 动态扫描速度调制 逐行DVD、高清信号(1920×1080i) ● 亮度/对比度调节● 输入制式 ● 色度/色调调节 NTSC制 ● 伽马校正 PAL制 ● 内置SDRAM控制器● 支持过采样输入 ● 四路10bitsD/A变换器● 可多种帧率输出 ● 其它● 输出信号 功耗:<400mW 模拟YUV或RGB 工作电压:3.3V (I/O), 1.8V(core) 数字RGB 工艺:0.18μm CMOS 1P6M● 多种输出行频(31K,38K,48K) 封装:208LQFP模拟集成电路设计工程师相关要求:---硕士以上学历,微电子或相关专业;---熟悉Hspice 或Cadence 仿真工具,有良好的半导体物理和晶体管理等专业知识;---有一定的模拟电路设计项目经验,如运放、ADC、DAC、PLL等更佳;---良好的英语口语及写作技能;待遇:RMB 10000-15000/月,优秀者可达到RMB20000/月职位说明:1、负责产品加密算法逻辑设计工作,完成代码编写及调试;2、协助完成产品逻辑算法、协议的逻辑开发及逻辑架构设计等。职位要求:1、熟练掌握Verilog语言,数字电路、数字信号处理等知识;2、熟悉Altera或Xilinx的FPGA器件,掌握主流FPGA结构性能特点;3、有加密算法逻辑设计经验;有硬件开发和调试经验;4、重点院校电子类专业本科及以上学历,有相关工作经验者优先。集成电路设计职位描述:职位描述:从事集成电路设计职位要求:1) 集成电路设计相关专业,本科以上学历;2) 拥有电路模拟及结果分析的基本技能,理解常用器件模拟参数的意义;3) 熟悉计算机编程语言,熟练掌握verilog,熟悉IC设计开发流程;4) 熟练使用Synopsys公司的IC设计相关EDA软件;5) 三年以上IC设计相关工作经历者优先;6) 较强的英语能力芯片验证工程师1.文化程度:大学本科以上2.专业:计算机或自动化相关专业3.经验要求:2年以上汇编语言和C语言实际应用经验4.专业技能:(1)了解MIPS体系结构(2)了解GCC编译器(3)熟悉主流芯片架构5.工作职责:负责公司芯片的验证工作集成电路设计工程师:职位描述:1.参与系统方案设计规划;2.完成模块级,芯片级设计开发;3.参与模块级,芯片级验证。任职要求:1.本职位要求本科有2年以上、硕士及以上学历有1年工作经验;2.具有较强的逻辑分析,设计能力;3.熟悉集成电路设计流程;4.具备较强的阅读理解及分析标准的能力;5.能熟练阅读英文专业文献;6.熟悉音视频应用者优先。IC设计工程师(模拟电路设计)IC Design Engineer(Analog Circuit Design)工作职责:定义模拟宏和模拟IC的具体规格;芯片设计, 仿真, 版图设计及验证;项目芯片测试工作按项目进度完成工作;职位要求:电子工程或相关专业本科以上(含本科)学历;熟悉Unix系统环境;对HSPICE和SPECTRE的电路模拟器有实际操作经验者优先;较强的独立分析和解决问题的能力;良好的沟通能力,英语四级以上。Job Responsibilities:Define specification of analog macro and analog ICPerform circuit design, simulation, layout design and verificationSample evaluation and debuggingResponsible for project progress and scheduleJob Requirements:Master/Bachelor Degree in Electronic Engineering or Computer Engineering or equivalenceFamiliar with UNIX environmentHand-on experience in HSPICE and SPECTRE circuit simulator is preferredGood analysis and problem solving skills
2025年07月14日
0 阅读
0 评论
0 点赞
1
...
9
10
11
...
34