毕业设计论文基于FPGA的交通灯控制器设计.doc

上传人:sccc 文档编号:4863422 上传时间:2023-05-20 格式:DOC 页数:37 大小:1.75MB
返回 下载 相关 举报
毕业设计论文基于FPGA的交通灯控制器设计.doc_第1页
第1页 / 共37页
毕业设计论文基于FPGA的交通灯控制器设计.doc_第2页
第2页 / 共37页
毕业设计论文基于FPGA的交通灯控制器设计.doc_第3页
第3页 / 共37页
毕业设计论文基于FPGA的交通灯控制器设计.doc_第4页
第4页 / 共37页
毕业设计论文基于FPGA的交通灯控制器设计.doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《毕业设计论文基于FPGA的交通灯控制器设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于FPGA的交通灯控制器设计.doc(37页珍藏版)》请在三一办公上搜索。

1、成绩基于FPGA的交通灯控制器设计 诚信声明本人郑重声明:本人所呈交的毕业论文(设计),是在导师的指导下独立进行研究所取得的成果。毕业论文(设计)中凡引用他人已经发表或未发表的成果、数据、观点等,均已明确注明出处。除文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或在网上发表的论文。特此声明。论文作者签名: 日 期: 年 月 摘要摘 要交通灯控制器在城市交通监管中起着极其重要的作用。传统的交通灯控制器基本是通过单片机或者PLC实现。本文介绍基于FPGA技术和Quartus II开发平台实现十字路口交通灯控制器的的一种方案。利用VHDL硬件描述语言描述各模块程序,并在Quartus I

2、I环境下进行编译、仿真,生成顶层文件后下载在FPGA器件FLEX EPF10K10LC84上进行验证。验证结果表明,设计基本实现了交通灯控制器所要求的控制过程,包括倒计时时间显示功能、特殊状态控制功能和主、支干道的红、黄、绿灯交替显示功能,表明本文所述的的设计方案正确。本文结合交通灯控制器的设计过程,简单介绍了硬件描述语言VHDL的结构模型和设计流程、 VHDL设计的优点及该语言在数字系统设计中的美好前景和重要地位。关键词: 交通灯控制器;VHDL;FPGA; Quartus IIIIAbstractAbstract Traffic light controller is playing an

3、 important role in the municipal transportation supervision. The traditional traffic light controller majority realizes through the monolithic integrated circuit or PLC. This article introduced one kind of plan which is based on FPGA and Quartus II programming environment to realize the crossroad st

4、reet intersection traffic light controller. The programming language is VHDL hardware description language, which is widespread at present. The procedures of each model have been carried on the translation and simulation under the environment of Quartus II of Altera Corporation, and downloaded on FP

5、GA component FLEX EPF10K10LC84. The traffic light controller has realized the controlling process basically, including the countdown time demonstrating the function, the special state control function and main, a yang or male principle red, yellow, and green light demonstrating the function alternat

6、ely, the confirmation result indicates that the systems design proposal is accurate. This article unified the traffic light controllers design process and introduced the structural model and the design cycle of hardware description language VHDL simply. It showed us the merit of the use of the VHDL

7、and the magnificent prospect and the important position of this language in the number system design.Keywords: traffic light controller; VHDL; FPGA; Quartus II目录目录摘 要I1 引言12 VHDL、FPGA、Quartus II和实验板简介22.1 FPGA简介22.2 VHDL简介22.3 Quartus II简介32.4 实验板简介43 整体设计论述53.1 总的设计流程53.2 交通灯控制器的具体设计方案54 主要功能模块设计与仿

8、真84.1 时钟分频模块84.2 交通灯控制模块94.3 显示模块164.4 顶层文件175 交通灯控制器的硬件实现185.1 硬件实现方案185.2 实验结果196 总结22参考文献23附录251 引言1 引言所谓交通灯控制器,就是为管理交通工具和行人的动向,保障道路安全通畅而设置的一类固定不动的灯具。在今天,交通灯控制器安装在各个路口上,它已经成为疏导交通最常见和最有效的手段。实现十字路口交通灯控制器的方法有很多,可用PLC1(可编程序控制器)、标准逻辑器件、单片机2等方案来实现。若采用单片机方案来设计,其模型可由单片机主控电路、电源电路、显示电路和无线收发控制电路四个部分组成。主控电路的

9、核心元件为AT89C51。电源电路需用到+5V的直流稳压电源。显示电1路和无线收发控制电路应由数据发射模块和编码芯片两部分组成。并且硬件设计完成之后还需利用计算机软件进行软件部分设计才能实现相应的功能。虽然利用单片机设计的交通灯控制器有性能较稳定、能够实现较多功能的优点,但它同时也存在很多缺陷。特别是修改电路的功能以及调试都需要硬件电路的支持,这在很大程度上增加了功能修改及系统调试的困难。可编程序控制器PLC的优点是高可靠性和稳定性,但它也存在不少缺陷。PLC的体系结构是封闭的,因而各PLC厂家的硬件体系互不兼容, 编程语言及指令系统也有差异,这导致当用户选择某一种PLC产品之后,必须选择与其

10、相应的控制规程,且需要学习特定的编程语言,这些缺陷大大降低了PLC方案的可行性。相比之下,基于FPGA(Field Programmable Gate Array)的设计方法具有设计灵活、易于修改、设计周期短的优点。此外,随着设计语言、电子设计自动化工具和FPGA器件的不断完善和发展,基于FPGA的设计方法有点越来越明显。相信在不远的未来,由FPGA器件设计的产品将出现在世界的每一个角落。因而此次交通等控制器的设计采用基于VHDL语言和FPGA的方法来实现所要求的功能。332 VHDL、FPGA、Quartus II和实验班简介2 VHDL、FPGA、Quartus II和实验板简介2.1 F

11、PGA简介FPGA,即现场可编程门阵列,它是在GAL、PAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片

12、。FPGA可做其它全定制或半定制ASIC电路的中试样片。FPGA内部有丰富的触发器和IO引脚。FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。FPGA采用高速CHMOS工艺,功耗低,可与CMOS、TTL电平兼容。 可以说FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。2.2 VHDL简介 自从Iverson于1962年提出硬件描述语言(HDL)以来,出现了多种硬件描述语言,如美国DATA I/O公司的ABEL-HDL、 Verilog公司开发的Verilog HDL以及日本电子工业振兴协会开发的UDL/I语言。由于这些硬件描述语言与其公司的硬件产品密切相关

13、而且语法不统一,从而造成信息交流和设备维护的困难。自从1987年VHDL(Very High Integrated Circuit Hardware Description Language)即超高速硬件描述语言,被定为IEEE标准(IEEE-STD-1076)以来,VHDL已被工业界广泛认可,并取得了巨大成功,成为数字系统设计和存档的重要工具,极大的提高了数字系统的设计水平和效率3。VHDL在大规模的数字电路系统设计中发挥愈来愈重要的作用,它将逐步替代如逻辑函数和逻辑状态图等传统的描述方法,成为EDA领域的重要组成部分。有的专家认为,在新世纪,VHDL和Verilog HDL将承担起几乎全部

14、的数字系统设计任务4。VHDL语言优点突出,其特点如下所示:设计技术齐全、方法灵活、支持广泛。VHDL语言可以支持自上至下和基于库的设计方法,而且还支持同步电路、异步电路、FPGA以及其它随机电路的设计。系统硬件描述能力强。VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路。另外,高层次的行为描述可以与低层次的RTL描述和结构描述混合使用。VHDL语言能进行系统级的硬件描述,这是它的最突出优点。还可以自定义数据类型,给编程人员带来较大的自由和方便。VHDL语言编程与工艺无关。在用VHDL语言设计系统硬件时,没有嵌入与工艺有关的信息。当门级或门级以上层次的描述通过仿真

15、编译之后,再用相应的工具将设计映射成不同的工艺(如MOS、CMOS)。在工艺更新时,就无须修改原设计程序,只要改变相应的映射工具就行了。VHDL语言标准、规范,易于共享和复用。它已经作为一种IEEE的工业标准,便于复用和交流。一个完整的VHDL语言程序通常包含实体(Entity)、结构体(Architecture)、配置(Configuration)、包集合(Package)和库(Library)5个部分。前4种是可分别编译的源设计单元。实体用于描述所设计的系统的外部接口信号;结构体用于描述系统内部的结构和行为;包集合存放个设计模块都能共享的数据类型、常数和子程序等。配置用于从库中选取所需单元

16、来组成系统设计的不同版本;库存放已经编译的实体、构造体、包集合和配置。2.3 Quartus II简介Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II的设计流程如下所示:(1) 设计输入:完成期间的硬件描述,包括文本编辑器、块与符号编辑器、MegaWizard插件管理器、约束编辑器和布局编辑器等工具;(2) 综合:包括分析和综合器、辅

17、助工具和RTL查看器等工具;(3) 布局连线:将设计综合后的网表文件映射到实体器件的过程,包括Fitter工具、约束编辑器、布局图编辑器、芯片编辑器和增量布局连线工具;(4) 时序分析;(5) 仿真:Quartus II提供了功能仿真和时序仿真两种工具;2.4 实验板简介实验板采用的是Altera公司的FPGA可编程逻辑器件FLEX EPF10K10LC84(芯片相当逻辑门数达10000、I/O引脚59个、576个宏单元、片内RAM 6KBit)。该器件基于SRAM,支持JTAG编程方式,可编程无限次。板上有7段共阳LED数码管5个, LED逻辑状态指示管8只,时钟信号源有2个,分别是4M晶体

18、振荡器和100-10KHz振荡器。此外,实验板上还有扬声器1只,拨码开关一组(8个),琴键开关8个。其布局图如附录A。3 整体设计论述3 整体设计论述3.1 总的设计流程首先根据交通灯控制器的功能要求,将功能要求转化成系统流程图,然后对系统进行模块的划分、定义各个模块的具体功能。再开始对各个模块用VHDL语言编程,并在Quartus II环境下进行编译及功能仿真,最后将编程文件下载到FPGA器件FLEX EPF10K10LC84中。3.2 交通灯控制器的具体设计方案考虑到实验室所用的FPGA器件FLEX EPF10K10LC84上的数码管以及LED逻辑状态指示管数量有限,本论文设计的十字路口交

19、通灯控制器不具有左拐弯功能,仅实现主、支干道红、黄、绿灯、倒计时数的显示,初始化设置以及特殊状态控制功能。图3.1 十字路口交通灯控制器的平面图实现红黄绿灯的自动指挥是城市交通管理自动化的重要课题之一。通过分析可以知道,所设计的交通灯控制器要能够使用于一条由主干道和支干道交汇处的十字路口(假设东西方向为主干道,南北方向为支干道)。且遵循“主干道优先考虑”原则,主、支干道红、绿灯亮的时间不完全一致,在正常情况下主干道允许车辆通行的时间更长。在绿灯转换为红灯的过程中有黄灯进行,使车辆有足够的时间停下来。并且在主、支干道各有两组数码管,以便显示相应状态的倒计时。另外由VHDL语言合理设计交通灯控制器

20、的功能,以使绿、黄、红灯的转换有一个准确的转换顺序和时间间隔。依据设计要求,最终画出如图3.2所示的系统框图。 图3.2 控制系统框图SN=1SPC=1WE=1 R=1图3.3 控制系统的状态转换图在正常情况下的一个完整周期内,交通灯控制器系统一共有四种状态,分别是S0、S1、S2、S3。其运行方式为S0S1S2S3,S3结束后再回到S0状态,整个周期持续60s。R为重新设置信号,重新设置后系统转换为S0状态开始新的循环。SPC为紧急控制信号,为高电平时系统转换为S6状态,状态结束后系统重新设置,转换为S0状态。WE和SN分别为主、支干道控制信号。当主干道车辆很多时,WE为高电平,此时系统转换

21、为S4状态,S4状态结束后系统转换为S1状态。当支干道车辆相对较多时,SN为高电平,此时系统转换为S5状态,S5状态结束后系统转换为S3状态,开始新的循环。各个状态具体的运行方式如下所述:S0: 主干道绿灯亮、支干道红灯亮。此时主干道车辆允许通行,支干道车辆禁止通行。整个过程持续30s。S1: 主干道黄灯亮、支干道红灯亮。此时提醒主干道车辆准备停车,支干道车辆禁止通行。整个过程持续5s。S2:主干道红灯亮、支干道绿灯亮。此时主干道车辆禁止通行,支干道车辆允许通行。整个过程持续20s。S3:主干道红灯亮、支干道绿灯亮。此时提醒支干道车辆准备停车,主干道车辆禁止通行。整个过程持续5s。S4:主干道

22、绿灯亮、支干道红灯亮。此时主干道车辆允许通行,支干道车辆禁止通行。整个过程持续60s。S5:主干道红灯亮、支干道绿灯亮。此时主干道车辆禁止通行,支干道车辆允许通行。整个过程持续4s。S6:主、支干道均为红灯亮,车辆禁止通行,整个过程持续30s。4 主要功能模块设计与仿真4 主要功能模块设计与仿真4.1 时钟分频模块分频模块的作用是为系统提供所需的计时脉冲。FPGA器件FLEX EPF10K10LC84上时钟源频率为4MHZ,而系统的时钟计时模块需要1HZ的脉冲。因此需要对4MHZ的时钟信号进行分频,产生1S的方波,作为系统的计时脉冲。其电路符号如图4.1所示: 图4.1 时钟分频模块的电路符号

23、在模块中,clk采用系统的4MHZ时钟脉冲,clk_1hz为分频器产生的1hz的输出脉冲。其控制程序如下所示:Process (clk) Begin if clkevent and clk=1 then cnt1 = cnt1 + 1; if cnt1=2000000 then clk1=not clk1 clk_1hz=clk1; cnt1=0; end if; end if; end process;分频模块的仿真图如4.2所示:图4.2 时钟分频模块仿真图 为方便观看波形,时钟信号的周期并未严格按要求设置。从图中可以看出该模块完成了分频功能。4.2 交通灯控制模块控制模块依据外部输入输出

24、信号,来控制交通灯其他部分协调工作。交通灯控制模块共定义了S0、S1、S2、S3、S4、S5、S6 六种状态。本文第二章已对各个状态的作了具体描述,故在此不复述。该模块的控制程序如下所示:BEGIN P1: PROCESS (R, SPC, WE,SN,CLK1hz) BEGIN IF R=1 THEN STATE=S0; T1=29; T2=34; ELSIF WE=1 THEN STATE=S4; T1=59; T2=64; ELSIF SN=1 THEN STATE=S5; T1=44; T2=39; ELSIF SPC=1 THEN STATE=S6; T1=29; T2r1=0; y

25、1=0; g1=1; r2=1; y2=0; g2=0;-主干道通车; T1=T1-1; T2=T2-1; IF T1=0 THEN STATE=S1; T1=4;T2r1=0; y1=1; g1=0; r2=1; y2=0; g2=0;-主干道黄灯; T1=T1-1; T2=T2-1; IF T1=0 THEN STATE=S2; T1=24; T2r1=1; y1=0; g1=0; r2=0; y2=0; g2=1;- 支干道通车; T1=T1-1; T2=T2-1; IF T2=0 THEN STATE=S3; T1=4; T2r1=1; y1=0; g1=0; r2=0; y2=1;

26、g2=0;-支干道黄灯; T1=T1-1; T2=T2-1; IF T1=0 THEN STATE=S0; T1=29; T2r1=0; y1=0; g1=1; r2=1; y2=0; g2=0;-支干道黄灯; T1=T1-1; T2=T2-1; IF T1=0 THEN STATE=S1; T1=4;T2r1=1; y1=0; g1=0; r2=0; y2=0; g2=1;-支干道黄灯; T1=T1-1; T2=T2-1; IF T2=0 THEN STATE=S3; T1=4; T2r1=1; y1=0; g1=0; r2=1; y2=0; g2=0; T1=T1-1; T2=T2-1;

27、IF T1=0 THEN STATE=S0; T1=29; T2STATE=S0; T1=29; T2=34; END CASE; END IF; END IF; L1=T1/10; L2=T1 REM 10; L3=T2/10; L4LED1LED1LED1LED1LED1LED1LED1LED1LED1LED1 LED1S1-S2-S3-S0的循环。在SPC为高电平之后,r1、r2都变成高电平,即进入了S6状态,在S6状态之后控制器转换为S0状态。由图可以看出SPC输入高电平之后,系统遵循的是S6-S0-S1-S2-S3-S0的状态转换原则。图4.6 WE和SN存在高电平时的仿真图由图4.

28、6可以看出,WE置于高电平之后,g1、r2变成了高电平,但状态持续时间比S0状态更长,可知系统进入了S4状态。之后系统遵循S4 -S1-S2-S3-S0的状态转换原则。在SN置于高电平之后,r1和g2变成了高电平,由状态持续时间可知控制器转换为S5状态,之后系统遵循S5 -S3-S0-S1的状态转换原则.4.3 显示模块显示模块可根据控制模块的输出信号和时钟脉冲来实现倒计时数码管的显示。具体实现方式是将控制信号的输出信号(如LED1【6.0】)的七位与数码管的七段一一对应。其控制程序如下所示:PROCESS (clk,datain)begin if clkevent and clk=1 the

29、n out0=not datain(0); out1=not datain(1); out2=not datain(2); out3=not datain(3); out4=not datain(4); out5=not datain(5); out6=not datain(6);end if;end process;其电路符号如图4.7所示:图4.7 显示模块的电路符号clk为4MHZ的系统时钟脉冲。datain6.0接控制和计时模块的输出信号。FPGA器件FLEX EPF10K10LC84上的数码管为共阳极的,低电平有效。Out0、Out1、Out2、Out3、Out4、Out5、Out6

30、分别代表数码管的a、b、c、d、e、f、g端。4.4 顶层文件将以上各个模块仿真成功后,再编写顶层文件,将各个单元模块连接起来,统一调配,得到顶层文件的原理图(图4.7):图4.7 顶层文件的原理图因为在FPGA器件FLEX EPF10K10LC84下载时为低电平有效,程序将各个模块的输出变量取反后输出。部分变量是在原程序中取反,部分变量是在原理图中接了非门后输出。由图4.7可以看出,交通灯控制器分为三个模块,分别是分频模块、控制和计时模块、显示模块。其中四个译码显示模块的输出分别接实验板上的四个LED数码管,用来显示主、支干道的倒计时。除clk外,图中可见4个外部输入信号,分别是R、SPC、

31、WE和SN。交通灯控制器各模块的源程序如附录B所示。5 交通灯控制器的硬件实现5 交通灯控制器的硬件实现5.1 硬件实现方案管脚锁定详情如下所示:Number TO Location1ClkPIN_12g1PIN_513y1PIN_524r1PIN_535g2PIN_486y2PIN_497r2PIN_508RPIN_299spcPIN_3010zhis0PIN_6911zhis1PIN_7012zhis2PIN_7113zhis3PIN_7214zhis4PIN_7315zhis5PIN_7816zhis6PIN_7917zg0PIN_8018zg1PIN_8119zg2PIN_8320zg

32、3PIN_321zg4PIN_522zg6PIN_723zs0PIN_824zs1PIN_925zs2PIN_1026zs3PIN_1127zs4PIN_1628zs5PIN_1729zs6PIN_1830zhig0PIN_6031zhig1PIN_6132zhig2PIN_6233zhig3PIN_6434zhig4PIN_6535zhig5PIN_6636zhig6PIN_6737zg5PIN_638WEPIN_3539SNPIN_36注:clk锁定4MHZ时钟信号g1锁定O4;主干道绿灯y1锁定O5;主干道黄灯r1锁定O6;主干道红灯g2锁定O1;支干道绿灯y2锁定O2;支干道黄灯r2锁

33、定O1;支干道红灯R锁定K1;SPC锁定K2;WE、SN分别锁定K3/K4;zhig0、zhig1、zhig2、zhig3、zhig4、zhig5、zhig6分别锁定秒个位数码管的a、b、c、d、e、f、g端;zhis0、zhis1、zhis2、zhis3、zhis4、zhis5、zhis6分别锁定秒十位数码管的a、b、c、d、e、f、g端;zg0、zg1、zg2、zg3、zg4、zg5、zg6分别锁定分个位数码管的a、b、c、d、e、f、g端;zs0、zs1、zs2、 zs3、zs4、zs5、zs6分别锁定分十位数码管的a、b、c、d、e、f、g端;将管脚按上图所述的方法锁定后,就可以下载到

34、FPGA器件上进行调试了。5.2 实验结果将程序下载到试验板后,将R置于高电平后,可以看见LED灯的显示情况为主干道绿灯亮,支干道红灯亮。主干道数码管倒计时显示为34s,支干道数码管倒计时显示为29s。在支干道数码管倒计时显示为0s后,可以看见LED灯的显示情况变为主干道黄灯亮,支干道红灯亮。此时主、支两干道的数码管倒计时显示均为5S。在支干道数码管倒计时显示为0s后,LED灯的显示情况变为主干道红灯亮,支干道绿灯亮,主干道数码管倒计时显示为19s,支干道数码管倒计时显示为24s。在主干道数码管倒计时显示为0s后,可以看见LED灯的显示情况变为主干道红灯亮,支干道黄灯亮,此时主、支两干道的数码

35、管倒计时显示均为5S。5S钟之后,交通灯重新进入主干道绿灯亮、支干道红灯亮的状态(即S0状态)。将spc置于高电平后,可以看见LED灯的显示情况为两干道均为红灯亮,且数码管均从29开始倒数计时。30s之后,控制器重新设置,转换为S0状态。将WE置于高电平后,可以看见LED灯的显示情况为主干道绿灯亮,支干道红灯亮。主干道数码管倒计时显示为64s,支干道数码管倒计时显示为59s。在支干道数码管倒计时显示为0s后,可以看见LED灯的显示情况变为主干道黄灯亮,支干道红灯亮。此时主、支两干道的数码管倒计时显示均为5S(即转换为S1状态)。将SN置于高电平后,LED灯的显示情况变为主干道红灯亮,支干道绿灯

36、亮,主干道数码管倒计时显示为39s,支干道数码管倒计时显示为44s。在主干道数码管倒计时显示为0s后,可以看见LED灯的显示情况变为主干道红灯亮,支干道黄灯亮,此时主、支两干道的数码管倒计时显示均为5S(即转换为S3状态)。图5.1 S2状态的效果图从上述情形可以看出,硬件测试的结果达到预期目标,实现了交通灯控制器的基本控制功能。但由于所用的实验板是低电平有效,因而另外两个未使用的LED灯(O7、O8)一直是亮的,另外实验板小时个位的数码管一直显示着“8”。因为时间有限,这两个问题没能解决。6 总结6 总结之前对FPGA和VHDL的了解仅局限于课本上的些许知识,而没有深入体会,缺乏实践经验。通

37、过这次设计,我对FPGA和VHDL有了更深入的理解,熟悉了Quartus II基本的使用方法。并且现在我对VHDL语言产生了浓厚的兴趣。在选择毕设题目之后,我意识到自己对VHDL语言的掌握程度远远不够,开始查阅VHDL教程。我依据交通灯控制器的要求划分模块,之后开始的是单元模块的设计。我在做这个设计之前对Quartus II的了解甚少,编写的程序也是到处有错,只有边编译边改程序。将每个单元模块完成之后再进行仿真,仿真过程也是困难重重。有时候设置的时钟频率过高,违反了setup/hold时间;有时候设置的END TIME过高,出现了仿真时间太长的问题。诸如此类的问题很多,通过自己查找资料和反复摸索,最终解决了问题。各个模块仿真成功之后,我开始编写顶

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号