收藏 分享(赏)

第3章-计算机算法及其verilog-hdl实现.pptx

上传人:无敌 文档编号:55874 上传时间:2018-03-08 格式:PPTX 页数:127 大小:2.08MB
下载 相关 举报
第3章-计算机算法及其verilog-hdl实现.pptx_第1页
第1页 / 共127页
第3章-计算机算法及其verilog-hdl实现.pptx_第2页
第2页 / 共127页
第3章-计算机算法及其verilog-hdl实现.pptx_第3页
第3页 / 共127页
第3章-计算机算法及其verilog-hdl实现.pptx_第4页
第4页 / 共127页
第3章-计算机算法及其verilog-hdl实现.pptx_第5页
第5页 / 共127页
点击查看更多>>
资源描述

1、第3章计算机算法及其 Verilog HDL实现 主 主讲 讲 : : 成 成洁 洁主要内容 二进制整数 无符号二进制整数 补码表示的带符号二进制整数 加减法算法及Verilog HDL实现 加法器和减法器设计 先行进位加法器设计 乘法算法及Verilog HDL实现 无符号数乘法器设计 带符号数乘法器设计 无符号数Wallace树型乘法器设计(略) 带符号数Wallace树型乘法器设计(略) 除法算法及Verilog HDL实现(略) 恢复余数器除法设计 不恢复余数器除法设计 带符号数不恢复余数除法器设计 Goldschmidt除数算法(略) Newton-Raphson除法算法(略) 开方

2、算法及Verilog HDL实现(略) 逻辑运算(增加) 算术逻辑运算单元(ALU) 举例(增加)本讲简要说明 目的与要求:理解算术运算的基本概念,掌握计 算机中的有符号数与无符号数表示和加、减、乘 法运算方法,了解乘法运算部件 授课重点:计算机中的有符号数与无符号数表示 ,加、减、乘法的运算方法 授课难点:数据表示和加、减、乘法运算 阅读章节: 第3章第1、2、3节 作业安排: P111 1、 5题,补充题Steps of Software Development swap(int v, int k) int temp; temp = vk; vk = vk+1; vk+1 = temp;

3、swap: 00000000101000010000000000011000 00000000100011100001100000100001 10001100011000100000000000000000 10001100111100100000000000000100 10101100111100100000000000000000 10101100011000100000000000000100 00000011111000000000000000001000 muli add lw lw sw sw jr $5, 4 $4, $2 0($2) 4($2) 0($2) 4($2) $2

4、, $2, $15, $16, $16, $15, $31 高级语言程序 汇编语言程序 汇编器 机器码程序 链接 可执行的机器码程序 机器码程序库 编译器Program CPU Can Execute 机器码程序 Instruction and Data 机器码程序的内容 指令和数据 在计算机内部,指令和数据均用 表示 指令和数据的表示方法 二进制数3.1 二进制整数 计算机中所有的信息,包括指令和数据,都是用 二进制数表示的。 假设有一个32位的二进制数 0011 0011 1101 1110 0000 0001 0000 0000 它到底表示是什么? 指令? 数据:整数,浮点数? 图形图像

5、? 音乐? IP地址? ? 缺点:读写起来太长,不方便。常用的几种数制的对应关系 十进制 十进制 二进制 二进制 八进制 八进制 十六 十六 进制 进制 十进制 十进制 二进制 二进制 八进制 八进制 十六 十六 进制 进制 0 0 0000 0000 0 0 0 0 8 8 1000 1000 10 10 8 8 1 1 0001 0001 1 1 1 1 9 9 1001 1001 11 11 9 9 2 2 0010 0010 2 2 2 2 10 10 1010 1010 12 12 A A 3 3 0011 0011 3 3 3 3 11 11 1011 1011 13 13 B B

6、 4 4 0100 0100 4 4 4 4 12 12 1100 1100 14 14 C C 5 5 0101 0101 5 5 5 5 13 13 1101 1101 15 15 D D 6 6 0110 0110 6 6 6 6 14 14 1110 1110 16 16 E E 7 7 0111 0111 7 7 7 7 15 15 1111 1111 17 17 F F 16 16 10000 10000 20 20 10 10 数制转换32位的二进制数 0011 0011 1101 1110 0000 0001 0000 0000 等值的十六进制数为:3 3 D E 0 1 0

7、0问:有一个 问:有一个 4 4 位二进制整数 位二进制整数表示的是什么? 表示的是什么? 答:不知道 答:不知道 (“ (“ 不知道 不知道 ” ” 是正确答案 是正确答案 ) ) 根据整数的表现方法不同有不同的意义 根据整数的表现方法不同有不同的意义 整数的表现方法 整数的表现方法 无符号数(绝对值) 无符号数(绝对值) 有符号数(正整数和负整数) 有符号数(正整数和负整数) 原码 原码 补码 补码 . . . . . . . . . . . . . . . . . . (10012 = 910). . . . . . . . . . . . . . . (10012 = 110) . .

8、 . . . . . . . . . . . . (10012 = 710) 10012an1an2.a1a0 = an1 2 n1 + an2 2 n2 + . + a1 2 1+ a0 2 0 = 0 10 = 1 10 = 2 10 = 4,294,967,293 10 = 4,294,967,294 10 = 4,294,967,295 10 N位无符号数的最小值是0,最大值是2 n 1 c 32位无符号数: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000

9、 0000 0000 0000 0000 0000 0010 1111 1111 1111 1111 1111 1111 1111 1101 1111 1111 1111 1111 1111 1111 1111 1110 1111 1111 1111 1111 1111 1111 1111 1111 3.1.1 无符号二进制整数 无符号数( Unsigned ):所有的二进制数据位 数均用来表示数值本身,没有正负之分。 有符号数( Signed):又称机器数,包括符号位和数值位 ,一般最高位为符号位。 例如:N1=+0.1011 N2=-0.1101 如用“0”表示“+”,“1”表示“-” ,

10、则机器数可以表示为:N1 0.1011 N2 1.1101 真值:指机器数所真正表示的数值,在数值前加“+”、“-”符 号来表示。 机器数的编码方法:原码、反码、补码、移码。 符号 数值部分 有符号数及其编码 有符号数及其编码 补码表示法 补码表示法 X X 补 补 = = X 2 X 2 n n X 0 X 0 对于整数: 对于整数: 对于小数: 对于小数: 2 2 n+1 n+1 +X 0 +X 0 X- X- 2 2 n n(mod2 (mod2 n+1 n+1 ) ) X X 补 补 = = X 1 X X 1 X 0 0 2+X 0 2+X 0 X- X- 1 (mod 2) 1 (

11、mod 2) 最高位表示数的符号,其他位表示数值位。 最高位表示数的符号,其他位表示数值位。 符号位: 符号位:0 0正数, 正数,1 1负数。 负数。 数值位:正数与绝对值相同,负数为绝对值取反,末位加 数值位:正数与绝对值相同,负数为绝对值取反,末位加1 1 。 。 3.1.2 3.1.2 补码表示的带符号二进制整数 补码表示的带符号二进制整数例1:X=1011,Y1011,则: X 补 ;Y 补 ; 例2:X=0.1101,Y- 0.1101,则: X 补 ;Y 补 ; 例3: X=1011, Y- 0.1101,求X和Y的8位补码 机器数。 X 补 ;Y 补 ; 例4:0 补 ? 0,

12、1011 0,1011 1,0101 1,0101 0.1101 0.1101 1.0011 1.0011 0,0001011 0,0001011 1. 0011000 1. 0011000补码表示法 补码表示法1:X=1010,Y1010,则: X 补 ;Y 补 ; 2:X=0.1001,Y- 0.1001,则: X 补 ;Y 补 ; 3: X=110110, Y- 0.110101,求X和Y的8位补 码机器数。 X 补 ;Y 补 ; 0,1010 0,1010 1,0110 1,0110 0.1001 0.1001 1.0111 1.0111 0,0110110 0,0110110 1.

13、1. 0010110 0010110补码表示 补码表示 法练习 法练习0 的补码表示形式是唯一的。 +0 补 0.00 -0 补 0.00 (3)表示范围:对于n1位(包含1位符号位) 补码机器数X:整数:2 n X 2 n 1小数:1X 12 n 计算机中的整型数据均用补码来表示。补码表示法 补码表示法 定点机器数的表示方法 定点机器数的表示方法 移码表示法 移码表示法 X X 移 移 =2 =2 n n +X 2 +X 2 n n X X-2 -2 n n 移码的形式化定义 移码的形式化定义 最高位表示数的符号,其他位表示数值位。 最高位表示数的符号,其他位表示数值位。 符号位: 符号位:

14、1 1正数, 正数,0 0负数。 负数。 数值位:正数与绝对值相同,负数为绝对值取反,末位加 数值位:正数与绝对值相同,负数为绝对值取反,末位加1 1 。 。 优点:比较大小移码非常方便。 性质: l 1、移码符号与原码、补码符号相反 l 2、一个数的移码等于该数补码反符号。 0 2 n2 n+1 -1 x 移码 -2 n0 2 n -1 真值例1:X=1011,Y1011,则: X 移 ;Y 移 ; 例2:X=0.1101,Y- 0.1101,则: X 移 ;Y 移 ; 例3: X=1011, Y- 0.1101,求X和Y的8位移码 机器数。 X 移 ;Y 移 ; 例4:0 移 ? 1,10

15、11 1,1011 0,0101 0,0101 1.1101 1.1101 0.0011 0.0011 1,0001011 1,0001011 0. 0011000 0. 0011000移码表示法 移码表示法0 的移码表示形式是唯一的. +0 移 1.00 -0 移 1.00 (3)表示范围:对于n1位(包含1位符号位)移码机器 数X整数:2 n X 2 n 1小数:1X 12 n 移码通常作为浮点数的阶码。移码表示法 移码表示法对照表:7位二进制数的真值、原码、补码、移码: 真值 原码 补码 移码 +1111111 01111111 01111111 11111111 +1111110 01

16、111110 01111110 11111110 +0000000 00000000 00000000 10000000 -0000000 10000000 00000000 10000000 -0000001 10000001 11111111 01111111 -1111111 11111111 10000001 00000001 -10000000 不能表示 10000000 00000000引入补码的目的: 使符号位参加运算, 简化减法运算规则,将减法转换为加法,即 简化运算器的设计。做法:以时钟为例,假设现在8点,倒拨4小时 是4点,正拨8小时也是4点,这里模是12,即8488(mo

17、d 12)补码表示法 补码表示法补码表示 0 1 2 3 4 5 6 7 8 9 A B C D E F 0000 +1 0001 0010 0011 0100 0101 0110 0111 1 1000 1001 1010 1011 1100 1101 1111 1110 0 +1 +2 +3 +4 +5 +6 +7 8 7 6 5 4 3 2 1 0000 +1 0001 0010 0011 0100 0101 0110 0111 1 1000 1001 1010 1011 1100 1101 1111 1110 0 (4位无符号数 ) 15 8 (4位补码表示的带符号二进制整数 ) +7

18、 补码表示的 带符号数 c 无符号数补码表示 0 1 2 3 4 5 6 7 8 9 A B C D E F 0000 +1 0001 0010 0011 0100 0101 0110 0111 1 1000 1001 1010 1011 1100 1101 1111 1110 0 +1 +2 +3 +4 +5 +6 +7 8 7 6 5 4 3 2 1 0000 +1 0001 0010 0011 0100 0101 0110 0111 1 1000 1001 1010 1011 1100 1101 1111 1110 由图看出,无符号数的加减和带符号数的加减相同 ,最高位为1时,两种表示方

19、法有不同的意义。 c 无符号数 补码表示的 带符号数3.2 加减法算法及Verilog HDL实现 影响运算器硬件设计的因素: 从数值数据类型区分。定点数、浮点数、BCD码数据。 从编码方案区分。原码、补码、反码、移码。 从数据运算的算法看,重点是解决运算的 高速度与硬软件实现的简便与经济性的矛 盾与协调。运算器有: 定点运算器-用硬件直接完成定点 数算术逻辑运算。如果用定点运算器完成浮点数的 算术运算,则要由子程序实现,速度 慢。 浮点运算器-主要用硬件完成浮点 数算术运算。3.2.1 补码数加法器和减法器设计 补码定点加减法运规则:X+Y 补 =X 补 +Y 补(mod 2)X-Y 补 =

20、X 补 +-Y 补(mod 2) 例1 X=0.1011, Y=-0.1110,求X+Y 补 . 解 X 补 =0.1011, Y 补 =1.0010X 补00.1011+Y 补11.0010 X 补 +Y 补11.1101 所以 X+Y 补 =1.1101 注:这里的小数 点可以理解为符号 与数值的分隔符例2 X=0.1011 Y=-0.0010,用补码加减法 规则求X-Y。 解 X 补 =0.1011, -Y=0.0010-Y 补 =0.0010X 补 00.1011+-Y 补00.0010X 补 +-Y 补00.1101 所以 X-Y 补 =0.1101X-Y=0.1101练习1:已知X

21、=+1011,Y=-0100,用补码计算X+Y和 X-Y。解:X 补=0,1011;Y 补=1,1100; -Y 补=0,0100 0,1011 0,1011 1,1100 1,1100 0,0111 0,0111 X X Y Y 补 补= = 0, 0111 0, 0111 0,1011 0,1011 0,0100 0,0100 0,1111 0,1111 X X Y Y 补 补= = 0, 1111 0, 1111 补码加减运算 补码加减运算 练习 练习 注:这里的逗号 可以理解为符号与 数值的分隔符例3. 已知:机器数字长为8位(含1位符号位),X=+15, Y=-24,求X+Y 补 解

22、:因为 X=+15=+0001111,Y=-24=-0011000, 所以 X 补 0,0001111,Y 补 1,1101000 则 X+Y 补 =X 补 +Y 补 0,0001111+1,11010001,1110111 即X+Y 补 =X 补 +Y 补 =1,1110111 补码加减运算 补码加减运算 运算方法 运算方法 注:这里的小数 点可以理解为符号 与数值的分隔符运算器电路的实现 补码加减法可用统一的方式处理。 用补码实现加减法对运算器有什么要求? 公式:X+Y 补 =X 补 +Y 补X-Y 补 =X 补 +-Y 补(mod 2) l 由Y 补 求-Y 补 是把Y 补 的每一位取反

23、, 再在最低位加1来实现。开始 被加(减)数,补码X 加(减)数,补码Y 加法吗? (X)+(Y) X (mod 2或mod 2 n+1 ) 溢出吗? 结束 置溢出标志 T F 减数求补 T F 准备 相加 判溢出补码加减运算 补码加减运算控制流程实现补码加减运算的逻辑电路 执行减法 执行 加法 X+Y 补 X 补 Y 补 :X F, Y F, F X X-Y 补 X 补 -Y 补 :X F, Y F, 1 F , F XA、B、C只是其中的一位。 每个框中的1代表Q,0 代表 /Q。 用同一套加法器电路,可以完成 X+Y 补 和X-Y 补 的运算。 实现X+Y 补 和X-Y 补 的差别: 加

24、Y用的是YF控制信号有效(1), 1F控制信号无效(0)。 减Y用的是/YF和1F两个控制信号都 有效(1)。需要增加判别运算结果溢出的功能 加法溢出的条件 符号相同的两个数相加。 减法溢出的条件 符号不同的两个数相减。 例如 X 补 =01011,Y 补 =01000,则 X+Y 补 =01011+01000=10011(溢出) 例如 X 补 =01011,Y 补 =10111-Y 补 =01001则X-Y 补 =01011+01001=10100 (溢出) 补充结论: (1)两个符号相同的补码数相加,如果和的 符号与加数符号相反,或者符号相反的两 个补码数相减,差的符号与减数符号相同 ,都

25、表示运算结果溢出。 (2)利用进位判断。即两个补码数实现加减 法运算时,若最高数值位向符号位的进位 值与符号位产生的进位输出值不相同,则 表示产生了溢出。表示为:表 双符号位溢出判断 (3)用双符号位判断溢出如下表。 结果符号位 溢出情况 00 无溢出 01 正溢出 10 负溢出 11 无溢出 所谓正溢出,即超出机器所能表示的最大正数。 所谓负溢出,即超出机器所能表示的最小负数。例如 X 补 =00.1011,Y 补 =00.1000则 X+Y 补 =00.1011+00.1000=01.0011 例如 X 补 =11.0101,Y 补 =00.1001,-Y 补 =11.0111 则 X-Y

26、 补 =11.0101+11.0111=10.1100 注意:运算时采用双符号方案,但在寄存器 和主存中都只要保存一位符号位。练习:用补码计算X+Y和X-Y (1)X=+1000,Y=+1001 (2)X=-1000,Y=1001 解: S f1S f2 =01,正溢出 S f1S f2 =11,无溢出 S f1S f2 =00,无溢出 S f1S f2 =10,负溢出 溢出判断练习 溢出判断练习课堂小结 定点数的减法通过补码加法来实现; 加减运算要进行溢出判断,主要采用双符号位判 断法,当双符号位同时为0或同时为1就没有溢出 ,否则“01”为正溢出,“10”为负溢出; 理解加减运算的逻辑实现

27、方法。3.2.1 加法器 Review1位全加器 A B C i S C O 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 0 0 1 0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 1 1 1 1 1 S = A+ B+ C i C o = AC i +BC i +AB= (A+ B)C i +AB FA 全加器符号:全加器设计 module fa_behavioral(a,b,ci,s,co); input a,b;input ci;output s;output co;assign co,s=a+b+ci; endmodule全加器测试模块设计 incl

28、ude “fa_behavioral.v“ module fa_behavioral_tb;reg a,b;wire s;wire co;reg ci;integer i;initial begini=7;a=1b0;b=1b0;ci=1b0;#0 $display(“timetatbtcitstco“);while(i0) begin #1 a=a; #2 b=b; #4 ci=ci;i=i-1;endend fa_behavioral m(.a(a),.b(b),.ci(ci),.s(s),.co(co); initial begin$dumpfile(“test.vcd“);$dumpv

29、ars;$monitor(“%gt %b %b %b %b %b“,$time,a,b,ci,s,co);/disply#60 $finish;end endmodulen位二进制加法器的实现 串行加法器:如果n位二进制相加,分 成n步实现,即每步只求一位和的加法 器 速度慢,控制信号持续时间长 并行加法器:如果n位二进制同时相加 ,即用n位全加器一步实现n位相加的加 法器 低位运算所产生的进位将会影响高位的运 算结果,存在进位信号的传递问题 运算速度与进位传递速度有关1 串行进位加法器 Sum延迟为6;进位Carryout延迟 为2 (假定一个与门/或门延迟为1,异 或门的延迟则为3) FA

30、 FA FA n位串行(行波)加法器: 串行加法器的缺点: 进位按串行方式传递,速度慢! 问题:n位串行加法器从C0 到Cn的延迟时间为多少? 最后一位和数的延迟时间为 多少? 2n+1级门延迟! 2n级门延迟!并行进位加法器的进位传递 进位链:由于进位是由低位向高位逐级 传递,进位的逻辑结构形似链条,故常 称进位传递逻辑为进位链Carry Link 并行进位加法器的结构 全加器 进位链 2. 并行进位加法器Unsigned adder code /adder.v module adder(a,b,cin,cout,sum);parameter bit_width=8;outputbit_wi

31、dth-1:0 sum;output cout;input bit_width-1:0 a,b;input cin;assign cout,sum=a+b+cin; endmodule 一、用 一、用 Verilog VerilogHDLHDL 语言设计加法器 语言设计加法器 下面给出8位加法器的Verilog HDL描述。 补充Unsigned adder testbench code timescale 1ns/1ns include “adder.v“ module adder_tb;parameter bit_width=8;wire bit_width-1:0 sum;wire co

32、ut;reg bit_width-1:0 a,b;reg cin;/carryinteger i,k; initial begin#0 $display(“timetatbtcintcouttsum“);#0 k=bit_width*2;cin=0;for(i=0;i=k*k;i=i+1)begin #i a=i;b=k*i; endend修改描述加法器长度, 可以仿真不同长度的加 法器。adder m(.a(a),.b(b),.cin(cin),.cout(cout),.sum(sum); initial begin$dumpfile(“test.vcd“); $dumpvars; /这两行

33、主要是给gtkwave这个工具使用的.$monitor(“%1dt%bt%bt%bt %bt%b“,$time,a,b,cin,cout,sum);/屏幕显示 #2500 $finish;end endmodule二、简单的二进制减法器的实现 设计一个n位的二进制减法器。 把adder.v中的代码略加修改,即可得 到减法器的Verilog HDL代码。 其符号如下图所示。代码如下一页。 补充Subtractor code /substractor.v module substractor(a,b,cin,cout,sum);parameter bit_width=8;outputbit_wid

34、th-1:0 sum;output cout;input bit_width-1:0 a,b;input cin;/carryassign cout,sum=a-b-cin; endmodule 用 用 Verilog VerilogHDLHDL 语言设计减法器 语言设计减法器 下面给出8位减法器的Verilog HDL描述。Substractor testbench code timescale 1ns/1ns include “substractor.v“ module substractor_tb;parameter bit_width=8;wire bit_width-1:0 sum;

35、wire cout;reg bit_width-1:0 a,b;reg cin;/carryinteger i,k; initial begin#0 $display(“timetatbtcintcouttsum“);#0 k=bit_width*2;cin=0;for(i=0;i=k*k;i=i+1)begin #i a=k*i;b=i; endend修改描述减 法器长度,可以 仿真不同长度的 减法器。substractor m(.a(a),.b(b),.cin(cin),.cout(cout),.sum(sum);initial begin$dumpfile(“test.vcd“); $d

36、umpvars; /这两行主要是给gtkwave这个工具使用的.$monitor(“%1dt%bt%bt%bt%bt%b“,$time,a,b,cin,co ut,sum);/屏幕显示 #2500 $finish;end endmodule三、定点二进制数的补码加减法器设计 把补码加减法运算器作为一个功能部 件,取名为add_sub,其符号如下图。 Add_Sub controlsum overflowa b control operation 0 a+b (x+y ) 1 a+/b+1(x+/y+1) 说 明: (1)a,b 均为补码 (2) 运算结 果sum 也是补码 (3)Overflo

37、w 溢出标 志add_sub code /add_sub.v module add_sub(a,b,control,cout,overflow,sum);parameter bit_width=4;outputbit_width-1:0 sum; output cout,overflow;input bit_width-1:0 a,b; input control;/carryreg overflow,cout; reg bit_width-1:0 sum;reg bit_width:0 a2,b2,sum2; always(a or b or control)begina2bit_width

38、=abit_width-1; /将a符号位扩展成2位并赋值给a2a2bit_width-1:0=abit_width-1:0;b2bit_width=bbit_width-1; /将b符号位扩展成2位并赋值给b2b2bit_width-1:0=bbit_width-1:0;if (control=0) cout,sum2=a2+b2;else cout,sum2=a2+(b2)+control; if(sum2bit_widthsum2bit_width-1)=1) overflow=1; else overflow=0; /用双符号位判溢出sumbit_width-1:0=sum2bit_w

39、idth-1:0; end endmoduleAdd_sub testbench code timescale 1ns/1nsinclude “add_sub.v“ module add_sub_tb;parameter bit_width=4;wire bit_width-1:0 sum;wire cout,overflow;reg bit_width-1:0 a,b;reg control;/carry,control=0integer i,k;initial begin#0 $display(“timetatbtcontroltcouttoverflowtsum“);#0 k=bit_w

40、idth*2;control=0;for(i=0;i=k*k;i=i+1) begin #i a=i;b=i*k; end /adderfor(i=0;i=k*k;i=i+1) begin #i a=i*k;b=i; control=1; end /subtractorendAdd_sub testbench code add_sub m(.a(a),.b(b),.control(control),.cout(cout),.overflow(overflow),.sum(sum);initial begin$dumpfile(“test.vcd“); $dumpvars; /这两行主要是给gt

41、kwave这个工具使用的.$monitor(“%1dt%bt%bt%bt%bt%bt%b“,$time,a,b,control,cout,overfl ow,sum);/屏幕显示 #2500 $finish;end endmodule3.2.2 先行进位加法器设计 略3.3 乘法算法及Verilog HDL实现 3.3.1 无符号数乘法器设计 与十进制乘法计算一样,二进制的乘法可 以用加法和移位操作来完成,例如: X=1101 Y=10111101 (13) 101011 (11) 101101 位积M11101 位积M20000 位积M31101 位积M410001111 (143) 10 n 相邻位积 做加法观察:将M 1 右移一 位对齐M 2 再加, l用n+1位加法器 l需要右移运算

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 计算机应用/办公自动化

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报