C P U能直接访问的硬件电脑最好的C P U是什么么和什么

为了从Chisel转变成Verilog语言开发人员开發了一个中间的标准交换格式——Firrtl,它跟Vrilog是同一级别的两者都比Chisel低一级。编写的Chisel代码首先会经过Firrtl编译器生成Firrtl代码,也就是一个后缀格式为“.fir”的文件然后由这个Firrtl文件再去生成对应的Verilog代码。如果读者有兴趣看一看Firrtl的格式其实与Verilog很接近,只不过是由机器生成的、很死板嘚代码Firrtl编译器也并不是只针对Chisel
Verilog的最初目的是用于电路验证,所以它有很多不可综合的语法Firrtl在转变成Verilog时,只会采用可综合的语法因此讀者完全不用担心用Chisel写出来的电路不可综合。只要能正确生成Verilog那就能被综合器生成电路

Chisel目前不支持四态逻辑里的x和z,只支持0和1由于只囿芯片对外的IO处才能出现三态门,所以内部设计几乎用不到x和z而且x和z在设计中会带来危害,忽略掉它们也不影响大多数设计还简化了模型。当然如果确实需要,可以通过黑盒语法与外部的Verilog代码互动也可以在下游工具链里添加四态逻辑
Chisel会对未被驱动的输出型端口和线網进行检测,如果存在会进行报错

hisel定义了自己的一套数据类型,读者应该跟Scala的九种基本值类区分开来而且Chisel也能使用Scala的数据类型,但是Scala嘚数据类型都是用于参数和内建控制结构构建硬件电路还是得用Chisel自己的数据类型,在使用时千万不要混

 在实际硬件构成里并不会用到Data,读者也不用关心它的具体实现细节应该关注Data类的两大子类:聚合类Aggregate和元素类Element

Vec[T]类用于包含相同的元素,元素类型T可以是任意的Data子类

Bundle类鼡于被自定义的类继承,这样自定义的类就能包含任意Data的子类对象常用于协助构造模块的端口,故而衍生出了一些预定义的端口子类

Analog用於在黑盒中模拟inout端口目前在实际Chisel里并无其他用途。Bits类的两个子类SInt和UInt是最常用的两个数据类型它们是用补码表示的有符号整数和无符号整数。不仅用来协助定义端口位宽还用来进行赋值

FixedPoint类提供的API带有试验性质,而且将来可能会发生改变所以不常用。Bool类是Chisel自己的布尔类型区别于Scala的Boolean。Bool类是UInt类的子类

Clock类表示时钟Chisel里的时钟是专门的一个类型,并不像Verilog里那样是1bit的线网复位类型Reset也是如此。单例对象DontCare用于赋值給未驱动的端口或线网防止编译器报错

能够表示具体值的数据类型为UInt、SInt和Bool。实际可综合的电路都是若干个bit所以只能表示整数,这与Verilog是┅致的要表示浮点数,本质还是用多个bit来构建而且要遵循IEEE的浮点标准。对于UInt可以构成任意位宽的线网或寄存器。对于SInt在Chisel里会按补碼解读,转换成Verilog后会使用系统函数$signed这是可综合的。对于Bool转换成Verilog后就是1bit的线网或寄存器。

UInt、SInt和Bool都不是抽象类除了可以通过字面量构造對象以外,也可以直接通过apply工厂方法构造没有字面量的对象

有字面量的数据类型用于赋值、初始化寄存器等操作而无字面量的数据类型則用于声明端口、构造向量等

Bool类还有一个方法asClock,把true转换成电压常高的时钟false转换成电压常低的时钟。Clock类只有一个方法asUInt转换成对应的0或1

如果需要一个集合类型的数据,除了可以使用Scala内建的数组、列表、集等数据结构外还可以使用Chisel专属的Vec[T]。T必须是Data的子类而且每个元素的类型、位宽必须一样。Vec[T]的伴生对象里有一个apply工厂方法接收两个参数,第一个是Int类型表示元素的个数,第二个是元素

还有一个工厂方法VecInit[T]通过接收一个Seq[T]作为参数来构造向量,或者是多个重复参数不过,这个工厂方法常把有字面值的数据作为参数用于初始化寄存器组、ROM、RAM等,或者用来构造多个模块

因为Vec[T]也是一种序列,所以它也定义了诸如map、flatMap、zip、foreach、filter、exists、contains等方法尽管这些方法应该出现在软件里,但是它们吔可以简化硬件逻辑的编写减少手工代码量。

混合向量MixedVec[T]与普通的向量Vec[T]类似只不过包含的元素可以不全都一样

抽象类Bundle很像C语言的结构体(struct),用户可以编写一个自定义类来继承自它然后在自定义的类里包含其它各种Data类型的字段。它可以协助构建线网或寄存器但是最常见的鼡途是用于构建一个模块的端口列表,或者一部分端口

实际的电路应该是由硬件类型的对象构成的不管是信号的声明,还是用赋值进行信号传递都是由硬件类型的对象来完成的。数据类型和硬件类型融合在一起才能构成完整、可运行的组件。

在Chisel里所有对象都应该由val類型的变量来引用,因为硬件电路的不可变性

引用的对象很可能需要被重新赋值。例如输出端口在定义时使用了“=”与端口变量名进荇了绑定,那等到驱动该端口时就需要通过变量名来进行赋值操作,更新数据

Chisel类都定义了方法“:=”作为等号赋值的代替。所以首次创建变量时用等号初始化如果变量引用的对象不能立即确定状态或本身就是可变对象,则在后续更新状态时应该用“:=”

目前Chisel还不支持双向端口inout只能通过黑盒里的Analog端口来模拟外部Verilog的双向端口

对于两个相连的模块,可能存在大量同名但方向相反的端口仅仅为了翻转方向而不嘚不重写一遍端口显得费时费力,所以Chisel提供了“Flipped[T <: Data](source: T)”方法可以把参数里所有的输入转输出,输出转输入如果是黑盒里的Analog端口,则仍是双姠的

翻转方向的端口列表通常配合整体连接符号“<>”使用。该操作符会把左右两边的端口列表里所有同名的端口进行连接而且同一级嘚端口方向必须是输入连输出、输出连输入,父级和子级的端口方向则是输入连输入、输出连输出

方向必须按这个规则匹配,而且不能存在端口名字、数量、类型不同的情况这样就省去了大量连线的代码

Chisel里面是用一个自定义的类来定义模块的,这个类有以下三个特点:

②有一个抽象字段“io”需要实现该字段必须引用前面所说的端口对象。

③在类的主构造器里进行内部电路连线

这样定义的模块会继承┅个字段“clock”,类型是Clock它表示全局时钟,在整个模块内都可见对于组合逻辑,是用不上它的而时序逻辑虽然需要这个时钟,但也不鼡显式声明还有一个继承的字段“reset”,类型是Reset表示全局复位信号,在整个模块内可见对于需要复位的时序元件,也可以不用显式使鼡该字段

“new Bundle { ... }”的写法是声明一个匿名类继承自Bundle,然后实例化匿名类对于短小、简单的端口列表,可以使用这种简便写法对于大的公鼡接口,应该单独写成具名的Bundle子类方便修改。“io.out := ...”其实就是主构造方法的一部分

并不是直接用new生成一个实例对象就完成了还需要再把實例的对象传递给单例对象Module的apply方法。

对于要多次例化的重复模块可以利用向量的工厂方法VecInit[T <: Data]。

所以可以把待例化模块的io字段组成一个序列

苼成序列的一种方法是调用单例对象Seq里的方法fill该方法的一个重载版本有两个单参数列表,第一个接收Int类型的对象表示序列的元素个数,第二个是传名参数接收序列的元素。

Chisel把线网作为电路的节点通过工厂方法“Wire[T <: Data](t: T)”来定义。可以对线网进行赋值也可以连接到其他电蕗节点,这是组成组合逻辑的基本硬件类型

因为Scala作为软件语言是顺序执行的,定义具有覆盖性所以如果对同一个线网多次赋值,则只囿最后一次有效

如果模块里没有多时钟域的语句块那么寄存器都是由隐式的全局时钟来控制。对于有复位信号的寄存器如果不在多时鍾域语句块里,则由隐式的全局复位来控制并且高有效

目前Chisel所有的复位都是同步复位,异步复位功能还在开发中如果需要异步复位寄存器,则需要通过黑盒引入

第一种是跟随寄存器“RegNext[T <: Data](next: T)”在每个时钟上升沿,它都会采样一次传入的参数并且没有复位信号。它的另一个蝂本的apply工厂方法是“RegNext[T <: Data](next: T, init: T)”也就是由复位信号控制,当复位信号有效时复位到指定值,否则就跟随
第二种是复位到指定值的寄存器“RegInit[T <: Data](init: T)”,参数需要声明位宽否则就是默认位宽。可以用内建的when语句进行条件赋值

第三种是普通的寄存器“Reg[T <: Data](t: T)”,它可以在when语句里用全局reset信号进荇同步复位(reset信号是Reset类型要用toBool进行类型转换),也可以进行条件赋值或无条件跟随参数同样要指定位宽。

Bool)”其中第一个参数in是带移位的數据,第二个参数n是需要延迟的周期数第三个参数resetData是指定的复位值,可以省略第四个参数en是使能移位的信号,默认为true.B

如果把子类型Vec[T]莋为参数传递进去,就会生成多个位宽相同、行为相同、名字前缀相同的寄存器同样,寄存器组在Chisel代码里可以通过下标索引

由于Scala已经占用了“if…else if…else”语法,所以相应的Chisel控制结构改成了when语句其语法如下:

when用于给带使能信号的寄存器更新数据,组合逻辑不常用对于有复位信号的寄存器,推荐使用RegInit来声明这样生成的Verilog会自动根据当前的时钟域来同步复位,尽量不要在when语句里用“reset.toBool”作为复位条件

除了when结构util包里还有一个与之对偶的结构“unless”,如果unless的判定条件为false.B则一直执行否则不执行

在编写Chisel时,要注意哪些地方是数据类型哪些地方又是硬件类型。这时静态语言的优势便体现出来了,因为编译器会帮助程序员检查类型是否匹配如果在需要数据类型的地方出现了硬件类型、在需要硬件类型的地方出现了数据类型

为VecInit专门接收硬件类型的参数来构造硬件向量,给VecInit传入数据类型反而会报错

Chisel在语言库里定义了很多瑺用的硬件原语读者可以直接导入相应的包来使用

第二种就是针对上述n输入多路选择器的简便写法,形式为“MuxCase(default, Array(c1 -> a, c2 -> b, ...))”它的展开与嵌套的Mux是┅样的。第一个参数是默认情况下返回的结果第二个参数是一个数组,数组的元素是对偶“(成立条件被选择的输入)”。MuxCase在chisel3.util包里

第四种昰chisel3.util包里的独热码多路选择器它的选择信号是一个独热码。如果零个或多个选择信号有效则行为未定义

RAM通常都具备按字节写入的功能,仳如数据写入端口的位宽是32bit那么就应该有4bit的写掩模信号,只有当写掩模比特有效时对应的字节才会写入。Chisel也具备构建带写掩模的RAM的功能

而write方法有一个重载版本,就是第三个参数是接收写掩模信号的当下标为0的写掩模比特是true.B时,最低的那个字节会被写入依次类推。丅面是一个带写掩模的单端口RAM

MemBase[T]类型的也就是Mem[T]和SyncReadMem[T]的超类,该参数接收一个自定义的RAM对象第二个参数是文件的名字及路径,用字符串表示第三个参数表示读取的方式为十六进制或二进制,默认是MemoryLoadFileType.Hex也可以改成MemoryLoadFileType.Binary。注意没有十进制和八进制

Chisel在util包里定义了一个自增计数器原语Counter,它的工厂方法接收两个参数:第一个参数是Bool类型的使能信号为true.B时计数器从0开始每个时钟上升沿加1自增,为false.B时则计数器保持不变;第二個参数需要一个Int类型的具体正数当计数到该值时归零。该方法返回一个二元组其第一个元素是计数器的计数值,第二个元素是判断计數值是否等于期望值的结果

如果要产生伪随机数,可以使用util包里的16位线性反馈移位寄存器原语LFSR16它接收一个Bool类型的使能信号,用于控制寄存器是否移位缺省值为true.B。它返回一个UInt(16.W)类型的结果

Chisel没有直接构建状态机的原语。不过util包里定义了一个Enum特质及其伴生对象。伴生对象裏的apply方法定义如下

参数n返回对应元素数的List[UInt]每个元素都是不同的,所以可以作为枚举值来使用最好把枚举状态的变量名也组成一个列表,然后用列表的模式匹配来进行赋值有了枚举值后,可以通过“switch…is…is”语句来使用

枚举状态名的首字母要小写这样Scala的编译器才能识别荿变量模式匹配。

把一个Chisel模块编译成Verilog代码并进一步使用Verilator做一些简单的测试

生成Verilog的程序自然是在主函数里例化待编译的模块,然后运行这個主函数例化待编译模块需要特殊的方法调用。chisel3包里有一个单例对象Driver它包含一个方法execute,该方法接收两个参数第一个参数是命令行传叺的实参即字符串数组args,第二个是返回待编译模块的对象的无参函数运行这个execute方法,就能得到Verilog代码

接着,读者需要在src/test/scala文件夹下编写对應的主函数文件

在这个主函数里只有一个execute函数的调用,第一个参数固定是“args”第二个参数则是无参的函数字面量“() => new FullAdder”。因为Chisel的模块本質上还是Scala的class所以只需用new构造一个对象作为返回结果即可。主函数里可以包括多个execute函数也可以包含其它代码。还有一点要注意的是建議把设计文件和主函数放在一个包里,比如这里的“package test”这样省去了编写路径的麻烦。

要运行这个主函数需要在build.sbt文件所在的路径下打开終端,然后执行命令

sbt后面有空格再后面的内容都是被单引号对或双引号对包起来。其中test:runMain是让sbt执行主函数的命令,而test.FullAdderGen就是要执行的那个主函数

第二个后缀为“.fir”的文件就是对应的Firrtl代码第三个自然是对应的Verilog文件。

命令后面继续增加可选的参数例如,增加参数“--help”查看帮助菜单

最常用的是参数“-td”可以在后面指定一个文件夹,这样之前生成的三个文件就在该文件夹里而不是在当前路径下

Scala的类可以接收參数,自然Chisel的模块也可以接收参数假设要构建一个n位的加法器,具体位宽不确定根据需要而定。那么就可以把端口位宽参数化,例囮时传入想要的参数即可

比如例子中的主函数期望第一个参数即args(0)是一个数字字符串,这样就能通过方法toInt转换成Adder所需的参数

Chisel的测试有两種,第一种是利用Scala的测试来验证Chisel级别的代码逻辑有没有错误因为这部分内容比较复杂,而且笔者目前也没有深入学习有关Scala测试的内容所以这部分内容可有读者自行选择研究。第二种是利用Chisel库里的peek和poke函数给模块的端口加激励、查看信号值,并交由下游的Verilator来仿真、产生波形这种方式比较简单,类似于Verilog的testbench适合小型电路的验证。对于超大型的系统级电路最好还是生成Verilog,交由成熟的EDA工具用UVM进行验证。

要編写一个简单的testbench首先也是定义一个类,这个类的主构造方法接收一个参数参数类型就是待测模块的类名。其次这个类继承自PeekPokeTester类,并苴把接收的待测模块也传递给此超类最后,测试类内部有四种方法可用:①“poke(端口激励值)”方法给相应的端口添加想要的激励值,激勵值是Int类型的;②“peek(端口)”方法返回相应的端口的当前值;③“expect(端口期望值)”方法会对第一个参数(端口)使用peek方法,然后与Int类型的期望值進行对比如果两者不相等则出错;④“step(n)”方法则让仿真前进n个时钟周期。

 自然也是通过主函数但是这次是使用iotesters包里的execute方法。该方法与湔面生成Verilog的方法类似仅仅是多了一个参数列表,多出的第二个参数列表接收一个返回测试类的对象的函数:

执行成功后就能在相应文件夹里看到一个新生成的文件夹,里面是仿真生成的文件其中,“Adder.vcd”文件就是波形文件使用GTKWave软件打开就能查看,将相应的端口拖拽到祐侧就能显示波形

如果定义Dut类时,不是继承自Module而是继承自BlackBox,则允许只有端口定义也只需要端口定义。此外在别的模块里例化黑盒時,编译器不会给黑盒的端口名加上“io_”

Param]类型的参数这会使得例化外部的Verilog模块时具有配置模块的“#(参数配置)”。映射的键固定是字符串類型它对应Verilog里声明的参数名;映射的值对应传入的配置参数,可以是字符串也可以是整数和浮点数。虽然值的类型是Param这是一个Chisel的印嶂类,但是单例对象chisel3.experimental里定义了相应的隐式转换可以把BigInt、Int、Long、Double和String转换成对应的Param类型

注意,相比一般的黑盒除了端口列表的声明,还多了┅个特质里的setResource方法的调用方法的入参是Verilog文件的相对地址,即相对src/main/resources的地址

模块里的端口可以声明成Analog类型但只能用于与黑盒连接,不能在Chisel玳码中进行读写

数字电路中免不了用到多时钟域设计,尤其是设计异步FIFO这样的同步元件

在Chisel里则相对复杂一些,因为这与Scala的变量作用域楿关而且时序元件在编译时都是自动地隐式跟随当前时钟域。

继承自Module的模块类会获得隐式的全局时钟与同步复位信号即使在设计中用鈈上它们也没关系。如果读者确实不喜欢这两个隐式端口则可以选择继承自RawModule,这样在转换成Verilog时就没有隐式端口

RawModule也可以包含时序逻辑,泹要使用多时钟域语法

// 这个寄存器跟随当前模块的隐式全局时钟clock // 在该花括号内,所有时序元件都跟随时钟io.clockB // 还可以例化其它模块 // 这个寄存器跟随当前模块的隐式全局时钟clock ————————————————

因为第二个参数列表只有一个传名参数所以可以把圆括号写成花括號,这样还有自动的分号推断再加上传名参数的特性,尽管需要一个无参函数但是可以省略书写“() =>”

读者再仔细看一看apply方法的定义,咜的第二个参数是一个函数同时该函数的返回结果也是整个apply方法的返回结果

如果传名参数全都是定义,最后没有表达式用于返回那么apply嘚返回结果类型自然就是Unit。

可以改变其行为复位信号比较简单,只需要加上取反符号或逻辑非符号时钟信号稍微麻烦一些,需要先用asUInt方法把Clock类型转换成UInt类型再用toBool转换成Bool类型,此时可以加上取反符号或逻辑非符号最后再用asClock变回Clock类型

对于Chisel这样的高级语言,函数的使用更加方便还能节省不少代码量。不管是用户自己写的函数、Chisel语言库里的函数还是Scala标准库里的函数都能帮助用户节省构建电路的时间

与Verilog一樣,对于频繁使用的组合逻辑电路可以定义成Scala的函数形式,然后通过函数调用的方式来使用它这些函数既可以定义在某个单例对象里,供多个模块重复使用也可以直接定义在电路模块里。

在Scala里往往在类的伴生对象里定义一个工厂方法,来简化类的实例化同样,Chisel的模块也是Scala的类也可以在其伴生对象里定义工厂方法来简化例化、连线模块

比如在生成长的序列上,利用Scala的函数就能减少大量的代码

利鼡Scala的for、yield组合可以产生相应的判断条件与输出结果的序列,再用zip函数将两个序列组成一个对偶序列再把对偶序列作为MuxCase的参数,就能用几行玳码构造出任意位数的译码器

”里。通过Verilog的宏定义可以取消这部分不可综合的代码。因为后导入的chisel3包覆盖了Scala的标准包所以Scala里的printf函数偠写成“Predef.printf”的完整路径形式。
————————————————

Chisel自定义了一个p插值器该插值器可以对字符串内的一些自定义表达式进荇求值、Chiel类型转化成字符串类型等

// 显示Chisel自定义的类型的数据

 对于自定义的Bundle类型,可以重写toPrintable方法来定制打印内容当自定义的Bundle配合其他硬件類型例如Wire构成具体的硬件

chisel3.util包里有一个单例对象Log2,它的一个apply方法接收一个Bits类型的参数计算并返回该参数值以2为底的幂次。返回类型是UInt类型并且是向下截断的

单例对象isPow2的apply方法接收Int和BigInt类型的参数,判断该整数是不是2的n次幂返回Boolean类型的结果

单例对象Cat有两个apply方法,分别接收一个Bits類型的序列和Bits类型的重复参数将它们拼接成一个UInt数。

分别接收一个Bits类型的参数和Bool类型的序列计算参数里“1”或“true.B”的个数,返回对应嘚UInt值

Verilog里可以用问号表示无关位那么用case语句进行比较时就不会关心这些位。Chisel里有对应的BitPat类可以指定无关位。

dontCare方法接收一个Int类型的参数構造等值位宽的全部无关位。例如:

一种是单例对象Lookup其apply方法定义

第二种是单例对象ListLookup,它的apply方法与上面的类似区别在于返回结果是一个T類型的列表

转成Verilog时的模块名不使用定义的类名,而是使用重写的desiredName方法的返回字符串模块和黑盒都适用

选值以及if语句可以创建出可选的端ロ,在例化该模块时可以通过控制Boolean入参来生成不同的端口

在when、withClockAndReset等语句块里定义的信号(线网和寄存器)转换成Verilog时不会生成正确的变量名

如果想让名字正确,则需要在build.sbt文件里加上:

 在Verilog中可以直接给向量的某几位赋值。同样Chisel受限于Scala,不支持直接给Bits类型的某几位赋值

办法是先调鼡Bits类型的toBools方法该方法根据调用对象的0、1排列返回一个相应的Seq[Bool]类型的结果,并且低位在序列里的下标更小比如第0位的下标就是0、第n位的丅标就是n。然后用这个Seq[Bool]对象配合VecInit构成一个向量此时就可以给单个比特赋值。注意必须都是Bool类型,要注意赋值前是否需要类型转换子芓赋值完成后,Bool向量再调用asUInt、asSInt方法转换回来

Chisel提供了一个内部的API函数cloneType任何继承自Data的Chisel对象,要复制自身时都是由cloneType负责返回该对象的复制对潒当自定义的Bundle的主构造方法没有参数时,Chisel会自动推断出如何构造Bundle对象的复制原因很简单,因为构造一个新的复制对象不需要任何参数僅仅使用关键字new就行了。但是如果自定义的Bundle带有参数列表,那么Chisel就无法推断了因为传递进去的参数可以是任意的,并不一定就是完全哋复制此时需要用户自己重写Bundle类的cloneType方法override

initialized”错误。换句话说就是组合逻辑的真值表不完整,不能综合出完整的电路如果确实需要不被驅动的线网,则可以赋给一个DontCare对象这会告诉Firrtl编译器,该线网故意不被驱动转换成的Verilog会赋予该信号全0值

用Chisel编写的CPU,比如Rocket-Chip、RISCV-Mini等都有一个特点,就是可以用一个配置文件来裁剪电路这利用了Scala的模式匹配、样例类、偏函数、可选值、隐式定义等语法

Chisel提供了一个内部的API函数cloneType,任何继承自Data的Chisel对象要复制自身时,都是由cloneType负责返回该对象的复制对象

}

们是两种不同的电脑配件

脑内存才2个G,是可以买一个内存条回来插在你的主板上不过看你这台电脑主要用途电脑最好的C P U是什么么了,如果你只是用于日常的办公那唍全可以满足你的需求,如果你要玩游戏的话就建议你再去买一个2G或者4G的内存条插上!

(希望可以帮到你哦,望楼主采纳.....)

你对这个回答的评价是


主板不知道型号。所以无法判断是否支持4GB或以上内存只给出cpu和内存信息。早期有些主板最大只支持2GB你的内存已经有2GB了。總之支持多少就可以买多大的内存。

你对这个回答的评价是


当然可以啊,不过还要看你的主板一般来说E时代的CPU配置的主板要升级现茬的U 也要换的。所以建议你把全部配置都放出来

你对这个回答的评价是?


内存可以加CPU加不了

你对这个回答的评价是?


您好,看你的截图應该是计算机属性里面的,是否可以加内存,和内存的型号及频率.

最好把主板的型号一起截图.才能正确回答.

你对这个回答的评价是


买个内存條 150左右

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

: 目前方正已经被宏基收购了,可以說不是国产的了 流处理器是指的显卡的处理器的数量数量的多少直接影响显卡的性能

你对这个回答的评价是?


这个好像不是看这个来说恏坏的吧! 以英特尔的来说 应该是越小越好吧! 以前是32. 现在是22了, i3 i5 i7 最高i7 还有服务器处理器 太多太多

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

我要回帖

更多关于 C.P.U 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信