




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Good is good, but better carries it.精益求精,善益求善。万历的设计与实现基于EDA的万年历设计与实现学校代码 10126 学号 01161030 分 类 号 TP 密级 公开 本科毕业论文(设计)万年历的设计与实现学院、系 鄂尔多斯学院电子信息工程系 专业名称 自 动 化 年 级 2011 级 学生姓名 张 文 博 指导教师 王 俊 林 2013年 6月 8 日6万年历的设计与实现摘要本设计为一个多功能的万年历,具有年、月、日、时、分、秒计数显示功能,以24小时循环计数,具有校对功能。本设计采用EDA技术,以硬件描述语言verilog HDL和VHDL为系统
2、逻辑描述手段设计文件,在Quartus II工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于KH-310开发工具的万年历。系统主芯片采用EP1C12Q240C8,由主程序和BCD模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统通过控制能够完成年、月、日和时、分、秒的分别显示,由按键输入进行数字钟的校时、切换、扫描功能。关键字:VHDL Verilog HDL EDA 万年历 目录目录51.1选题背景61.2课题相关技术的发展21.3课题研究的必要性21.4 课题研究的内容32 EDA技术42.1 EDA概述42.2 什么是EDA42.3 EDA的特
3、点53 FPGA简介73.1 FPGA概述73.2FPGA开发编程原理73.3 FPGA基本结构83.4FPGA系统设计流程104 万年历总体设计方案144.1 万年历原理144.2 实验程序144.3.实验连线354.4 实验仿真与实现365 实验结论与研究展望385.1实验结论385.2研究展望38致谢39参考文献401.1选题背景20世纪末,数字电子技术飞速发展,有力的推动了社会生产力的发展和社会信息化的提高。在其推动下,数字技术的应用已经渗透到人类生活的各个方面。从计算机到手机,从数字电话到数字电视,从家用电器到军用设备,从工业自动化到航天技术,都尽可能的采用了数字电子技术。而现代电子
4、设计技术的核心是EDA技术。 本设计采用的VHDL和Verilog HDL是两种应用最为广泛硬件描述语言。前者具有很强大的功能,覆盖面广,描述能力强,支持门级电路的描述,也支持以寄存器、存储器、总线及其运算单元等构成的寄存器传输级电路的描述,还支持以行为算法和结构的混合描述为对象的系统级电路的描述。后者可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合、仿真验证和时序分析。而采用Verilog HDL进行电路设计的最大优点就是设计与工艺无关性。本设计将从EDA中FPGA嵌入式应用开发技术与数字钟技术发展的客观实际出发,通过对该技术发展状况的了解,以及课题本身的需要,指出研究基于FPG
5、A的芯片系统与设计万年历的设计与实现的必要性。1.2课题相关技术的发展当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。它与传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低。同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。美国Altera公司的可编程逻辑器件采用全新的结构和先进的技术,加上MaxplusII(或最新的QUARTUS)开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计。EDA技术以大规
6、模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译,逻辑化简,逻辑分割,逻辑映射,编程下载等工作。最终形成集成电子系统或专用集成芯片的一门新技术。1.3课题研究的必要性如今的时代是科技是第一生产力的时期。因此,新产品、新技术层出不穷,电子技术的发展更是日新月异。在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。因此我们需要一个定时系统来提醒这些忙碌
7、的人。数字化的钟表给人们带来了极大的方便。近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能,样式新颖已经成为数字钟的发展潮流。1.4 课题研究的内容本设计主要研究基于FPGA的数字钟,要求时间以24小时为一个周期,显示年、月、日、时、分、秒,可以对年、月、日、时、分及秒进行单独校对,使其校正到标准时间。因此,研究数字钟及扩大其应用,有着非常现实的意义。2 EDA技术2.1 EDA概述EDA在通信行业(电信)里的另一个解释是企业数据架构,EDA给出了一个企业级的数据架构的总体视图,并按照电信企业的特征,进行了框架和层级的划分。 “EDA是电
8、子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的1。”2.2 什么是EDA20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计
9、可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。 EDA技术就是依靠功能强大的电子计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成设计文件,自动地完成逻辑编译、化简、分割、综合、优化、仿真,直至下载到可编程逻辑器件CPLD/FPGA或专用集成电路ASIC(Application Specific Integrated Circuit)芯片中,实现既定的电子电路设计功能。EDA技术使得电子电路设计者的工作仅限于利用硬件描述语言和EDA软
10、件平台来完成对系统硬件功能的实现,极大地提高了设计效率,缩短了设计周期,节省了设计成本。 今天,EDA技术已经成为电子设计的重要工具,无论是设计芯片还是设计系统,如果没有EDA工具的支持,都将难以完成的。EDA工具已经成为现代电路设计师的重要武器,正在发挥着越来越重要的作用。 2.3 EDA的特点(1) 高层综合和优化。为了能更好地支持自顶向下的设计方法,现代的EDA工具能够在系统进行综合和优化,这样就缩短了设计的周期,提高了设计效率。(2)采用硬件描述语言进行设计。采用硬件描述语言进行电路与系统的描述是当前EDA技术的另一个特征。与传统的原理图设计方法相比,HDL语言更适合描述规模大的数字系
11、统,它能够使设计者在比较抽象的层次上对所设计系统的结构和逻辑功能进行描述。采用HDL语言设计的突出优点是:语言的公开性和利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的复用,交流,保存和修改等。目前最常用的硬件描述语言有VHDL和Verilog HDL,它们都已经成为IEEE标准。(3)开放性和标准化。现代EDA工具普遍采用标准化和开放性框架结构,任何一个EDA系统只要建立了一个符合标准的开放式框架结构,就可以接纳其他厂商的EDA工具仪器进行设计工作。这样就可以实现各种EDA工具的优化组合,并集成在一个易于管理的统一环境下,实现资源共享。3 FPGA简介3.1
12、 FPGA概述“FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。2”3.2FPGA开发编程原理 FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个
13、部分。 现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。FPGA利用小型查找表(161RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。“FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程2。
14、”3.3 FPGA基本结构FPGA具有掩膜可编程门阵列的通用结构,它由逻辑功能块排成阵列,并由可编程的互连资源连接这些逻辑功能块来实现不同的设计。FPGA一般由3种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。这3种可编程电路是:可编程逻辑模块(CLB-Configurable Logic Block)、输入/输出模块(IOB-I/O Block)和互连资源(IRInterconnect Resource)。“可编程逻辑模块CLB是实现逻辑功能的基本单元,它们通常规则的排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在
15、芯片的四周;可编程互连资源包括各种长度的连接线段和一些可编程连接开关,它们将各个CLB之间或CLB、IOB之间以及IOB之间连接起来,构成特定功能的电路3。”(1) CLB是FPGA的主要组成部分。它主要由逻辑函数发生器、触发器、数据选择器等电路组成。CLB中3个逻辑函数发生器分别是G、F和H,相应的输出是G 、F和H。G有4个输入变量G1、G2、G3和G4;F也有4个输入变量F1、F2、F3和F4。这两个函数发生器是完全独立的,均可以实现4输入变量的任意组合逻辑函数。逻辑函数发生器H有3个输入信号;前两个是函数发生器的输出G和F,而另一个输入信号是来自信号变换电路的输出H1。这个函数发生器能
16、实现3输入变量的各种组合函数。这3个函数发生器结合起来,可实现多达9变量的逻辑函数。CLB中有许多不同规格的数据选择器(四选一、二选一等),通过对CLB内部数据选择器的编程,逻辑函数发生器G、F和H的输出可以连接到CLB输出端X或Y,并用来选择触发器的激励输入信号、时钟有效边沿、时钟使能信号以及输出信号。这些数据选择器的地址控制信号均由编程信息提供,从而实现所需的电路结构。 “CLB中的逻辑函数发生器F和G均为查找表结构,其工作原理类似于ROM。F和G的输入等效于ROM的地址码,通过查找ROM中的地址表可以得到相应的组合逻辑函数输出4。”另一方面,逻辑函数发生器F和G还可以作为器件内高速RAM
17、或小的可读写存储器使用,它由信号变换电路控制。(2) 输入/输出模块IOB。IOB提供了器件引脚和内部逻辑阵列之间的连接。它主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。每个IOB控制一个引脚,它们可被配置为输入、输出或双向I/O功能。当IOB控制的引脚被定义为输入时,通过该引脚的输入信号先送入输入缓冲器。缓冲器的输出分成两路:一路可以直接送到MUX,另一路经延时几纳秒(或者不延时)送到输入通路D触发器,再送到数据选择器。通过编程给数据选择器不同的控制信息,确定送至CLB阵列的I1和I2是来自输入缓冲器,还是来自触发器。当IOB控制的引脚被定义为输出时,CLB阵列的输出信号O
18、UT也可以有两条传输途径:一条是直接经MUX送至输出缓冲器,另一条是先存入输出通路D触发器,再送至输出缓冲器。IOB输出端配有两只MOS管,它们的栅极均可编程,使MOS管导通或截止,分别经上拉电阻接通Vcc、地线或者不接通,用以改善输出波形和负载能力。(3) 可编程互连资源IR。可编程互连资源IR可以将FPGA内部的CLB和CLB之间、CLB和IOB之间连接起来,构成各种具有复杂功能的系统。IR主要由许多金属线段构成,这些金属线段带有可编程开关,通过自动布线实现各种电路的连接。3.4FPGA系统设计流程一般说来,一个比较大的完整的项目应该采用层次化的描述方法:分为几个较大的模块,定义好各功能模
19、块之间的接口,然后各个模块再细分去具体实现,这就是TOP DOWN(自顶向下)的设计方法。目前这种高层次的设计方法已被广泛采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,使工艺转化变得轻而易举。CPLD/FPGA系统设计的工作流程如图2-2所示。图3.1FPGA系统设计流程设计准备设计输入原理图硬件描述语言 波形图设计处理优化、综合、适配、分割布局、布线设计完成器件编程功能仿真时序仿真器件测试 流程说明:1.工程师按照“自顶向下”的设计方法进行系统划分。2.输入verilog HDL代码,这
20、是设计中最为普遍的输入方式。此外,还可以采用图形输入方式(框图、状态图等),这种输入方式具有直观、容易理解的优点。3.将以上的设计输入编译成标准的verilog HDL文件。4.进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。一般情况下,这一仿真步骤可略去。5.利用综合器对verilog HDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完
21、成。6.利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。一般的设计,也可略去这一步骤。7.利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。8.在适配完成后,产生多项设计结果:(a)适配报告,包括芯片内部资源利用情况,设计的布尔方程描述情况等;(b)适配后的仿真模型;(c)器件编程文件。根据适配后的仿真模型,可以进行适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。如果仿真结果达不到设计要求,就修改verilog HDL源代码
22、或选择不同速度和品质的器件,直至满足设计要求。最后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片CPLD/FPGA中。4 万年历总体设计方案4.1 万年历原理 设计原理如图4.1所示:基准时钟置数按键控制按键显示动态显示译码计数器 图4.1 设计原理图计数器在正常情况下是对1HZ的频率计数,在调整时间状况下是对需要调整的时间模块进行计数;控制按键用来选择是正常计数还是调整时间并决定调整时、分、秒;置数按键按下时,表示相应的调整块要加一,如要对小时调整时,显示时间的LED管将闪烁且当置数按键按下时,相应的小时显示要加一。动态显示模块是对计数器的计数进行译码,送到LED显示。4.2
23、实验程序(1) Clock模块Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Clock is port( mode, set, clr, clk ,k:in std_logic; seg7, segctr :out std_logic_vector(7 downto 0) );end entity;ARCHITECTURE arch OF Clock ISsignal state: std_logic_vector(1 downto 0);signal Hour, Min, Sec
24、,Year,Mon,Day,d: std_logic_vector(5 downto 0);signal BCDH, BCDM, BCDS,BCDN,BCDY,BCDR: std_logic_vector(7 downto 0);signal segDat: std_logic_vector(3 downto 0);signal blink: std_logic_vector(2 downto 0);signal set_reg, blink_clk: std_logic; component BCD port(DataIn : in std_logic_vector(5 downto 0);
25、 BCDOut : out std_logic_vector(7 downto 0) ); end component;BEGIN process(mode) begin if (clr=1) then state=00; else if (modeevent and mode=1) then state blink blinkblink_clk, others=0); when 10 = blinkblink_clk, others=0); when 11 = blinkblink_clk, others=0); end case; end process; process(Mon, Yea
26、r,d)begin case Mon is when 000001 = d case Year is when 010000 = d d d d d d d d d d d d d d d d d d d d d d d d=011110; end case;end process;process(clk)variable blink_cnt: std_logic_vector(13 downto 0);begin if (clr=1) then blink_clk0); else if (clkevent and clk=1) then if (blink_cnt=1100001101001
27、1) then blink_cnt:=(others=0); blink_clk=not blink_clk; else blink_cnt:=blink_cnt+1; end if; end if; end if; end process;process(clk, state)variable clk_cnt: std_logic_vector(16 downto 0);begin if (clr=1) then Hour=000000; Min=000000; Sec=000000; Year=000000; Mon=000000; Day0);set_reg if (clk_cnt=11
28、000011010011111) then clk_cnt:=(others=0); if (Sec=59) then Sec0); if (Min=59) then Min0); if (Hour=23) then Hour0); if (Day=d) then Day=000001; if (Mon=12) thenMon=000001;if (Year=63) thenYear=000001; else Year=Year+1; end if; else Mon=Mon+1; end if; else Day=Day+1; end if; else Hour=Hour+1; end if
29、; else Min=Min+1; end if; else Sec if(k=1)then if (set=1) then if set_reg=0 then set_reg=1; if (Year=63) then Year=000001; else Year=Year+1; end if; end if; else set_reg=0; end if; else if (set=1) then if set_reg=0 then set_reg=1; if (Hour=23) then Hour0); else Hour=Hour+1; end if; end if; else set_
30、reg if(k=1)then if (set=1) then if set_reg=0 then set_reg=1; if (Mon=12) then Mon=000001; else Mon=Mon+1; end if; end if; else set_reg=0; end if; else if (set=1) then if set_reg=0 then set_reg=1; if (Min=59) then Min0); else Min=Min+1; end if; end if; else set_reg if(k=1)then if (set=1) then if set_
31、reg=0 then set_reg=1; if (Day=d) then Day=000001; else Day=Day+1; end if; end if; else set_reg=0; end if; else if (set=1) then if set_reg=0 then set_reg=1; if (Sec=59) then Sec0); else Sec=Sec+1; end if; end if; else set_reg0); segCtr0); else if (clkevent and clk=1) then cnt:=cnt+1; case cnt is when
32、 000 = if(k=1)then segDat=BCDN(7 downto 4) or (blink(2) &blink(2)&blink(2)& blink(2); segctr=10000000; else segDat=BCDH(7 downto 4) or (blink(2)&blink(2)&blink(2)&blink(2); segctr if(k=1)then segDat=BCDN(3 downto 0) or (blink(2)&blink(2)&blink(2)& blink(2); segctr=01000000; else segDat=BCDH(3 downto
33、 0) or (blink(2)&blink(2) & blink(2) & blink(2); segctr segDat=1010; segctr if(k=1)then segDat=BCDY(7 downto 4) or (blink(1)&blink(1)& blink(1) blink(1); segctr=00010000; else segDat=BCDM(7 downto 4) or (blink(1)&blink(1)&blink(1)&blink(1); segctr if(k=1)then segDat=BCDY(3 downto 0) or (blink(1)& bl
34、ink(1)& blink(1)& blink(1); segctr=00001000; else segDat=BCDM(3 downto 0) or (blink(1)&blink(1)& link(1)& blink(1); segctr segDat=1010; segctr if(k=1)then segDat=BCDR(7 downto 4) or (blink(0)&blink(0)&blink(0 & link(0); segctr=00000010; else segDat=BCDS(7 downto 4) or (blink(0)& blink(0)& blink(0)&b
35、link(0); segctr if(k=1)then segDat=BCDR(3 downto 0) or(blink(0)&blink(0)& blink(0)&blink(0); segctr=00000001; else segDat=BCDS(3 downto 0) or (blink(0) & blink(0) & blink(0) &blink(0); segctr seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7 seg7=00000000; end case; end process;END arch;(2) BCD
36、模块module BCD(DataIn, BCDOut); input5:0 DataIn; output7:0 BCDOut; reg7:0 BCDOut; always(DataIn)begin case (DataIn) 0: BCDOut= 8B0000_0000; 1: BCDOut= 8B0000_0001; 2: BCDOut= 8B0000_0010; 3: BCDOut= 8B0000_0011; 4: BCDOut= 8B0000_0100; 5: BCDOut= 8B0000_0101; 6: BCDOut= 8B0000_0110; 7: BCDOut= 8B0000_
37、0111; 8: BCDOut= 8B0000_1000; 9: BCDOut= 8B0000_1001; 10: BCDOut= 8B0001_0000; 11: BCDOut= 8B0001_0001; 12: BCDOut= 8B0001_0010; 13: BCDOut= 8B0001_0011; 14: BCDOut= 8B0001_0100; 15: BCDOut= 8B0001_0101; 16: BCDOut= 8B0001_0110; 17: BCDOut= 8B0001_0111; 18: BCDOut= 8B0001_1000; 19: BCDOut= 8B0001_1001; 20: BCDOut= 8B0010_0000; 21: BCDOut= 8B0010_0001; 22: BCDOut= 8B0010_0010; 23: BCDOut= 8B0010_0011; 24: BCDOut= 8B0010_0100; 25: BCDOut= 8B0010_0101; 26: BCDOut= 8B0010_0110; 27: BCDOut= 8B0010_0111; 28: BCDOut= 8B0010_1000; 29: BCDOut= 8B0010_1001; 30: B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合伙养车合同范本
- 2025年中国经纬仪市场深度评估与发展机遇预测报告(定制版)目录
- 排水防涝设施功能提升项目风险评估与应对措施
- 女装行业的主要细分市场
- 铝合金等金属结构件加工生产项目可行性研究报告申请建议书
- 医院服务合同范本
- 公共基础及公共服务提升项目目标与定位
- 2025年套圈项目可行性研究报告
- 京胡轴行业深度研究报告
- 2018-2024年中国新能源车行业市场评估分析及发展前景调研战略研究报告
- 2024-2025年第二学期学校教导处工作计划(二)
- 2025年苏州卫生职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 二零二五年度博物馆场地租赁与文物保护合作协议3篇
- 2025年春新人教版历史七年级下册全册课件
- 2024年钟山职业技术学院高职单招语文历年参考题库含答案解析
- 骆驼祥子-(一)-剧本
- 魏晋南北朝时期中外文化的交流
- 渔业行业智能化海洋牧场养殖方案
- 《工程勘察设计收费标准》(2002年修订本)
- 《债权法教学》课件
- 太傻天书(完整版)
评论
0/150
提交评论