课程设计——基于FPGA的交通红绿灯控制系统(源代码)

摘要:

        本课程设计旨在设计一个基于FPGA(现场可编程门阵列)的交通红绿灯控制系统。该系统模拟了实际道路交叉口的红绿灯工作场景,通过硬件描述语言(如Verilog或VHDL)编写源代码实现。系统包含三个主要部分:红绿灯显示模块、计时控制模块以及状态切换模块。红绿灯显示模块负责模拟红绿灯的亮灭状态;计时控制模块用于控制每个交通灯状态的持续时间;状态切换模块则根据计时信号和预设的交通规则切换红绿灯状态。通过FPGA的灵活编程能力,该系统能够实现对交通信号灯的精确控制,为智能交通系统提供硬件基础。

关键词FPGA,Verilog,数码管,led灯

1、引言

        Verilog HDL是现在世界上绝大多数数字IC工程师都在使用的一种硬件描述语言,它已经成为业界内数字电路设计的一种标准硬件描述语言。不同于原理图直接描述电路的结构和功能,它是以文本形式来描述数字电路的结构和功能的[1]Verilog HDL不但可以采用层次化的逻辑设计,而且还可以用于数字系统的仿真验证(用计算机仿真软件对数字逻辑电路的结构和行为进行分析预测,对HDL行为进行解释,一般的输出形式为波形图),逻辑综合(把硬件描述语言的数字电路逻辑模型转变成电路基本原件以及把这些基本元件进行连接生成电路模型)和时序分析等。Verilog HDL的应用场景有算法级别,寄存器传输级,逻辑级、门级和版图级等各个层级的设计和描述[2]

        FPGA(Field Programmable Gate Array,简称FPGA),翻译成中文就是现场可编程逻辑门阵列, FPGA器件属于专用集成电路中的一种半定制电路,它不像CPLD那样采用两级可编程的“与或”阵列来实现逻辑功能,而是基于查找表的原理来实现组合逻辑函数,能够有效的解决原有的器件门电路数较少的问题。FPGA 的基本结构包括可编程的I/O模块,可编程的逻辑块,数字时钟管理模块,嵌入式只读存储器,可编程连线资源,内部包含专用硬核,底层内嵌多种功能单元[3]FPGA逻辑功能编程简单,就好像向RAM中写数据一样。由于FPGA具有大量的布线资源,编程更加灵活,集成度更高,适合大规模,高性能的数字系统设计以及投资较低的特点,在数字电路设计领域得到了广泛的应用。

2、交通灯控制系统设计实现的软硬件

2.1、硬件

1)芯片:交通灯控制系统设计使用的 FPGA 芯片型号为 EP2C5T144C8,是属于ALTERA公司 CYCLONE 系列的产品。这款芯片主要的参数为,四千六百零八个逻辑单元LE,两个PLL13个嵌入式乘法器,RAM存储空间为276480bit,有一百五十八个I/O口,推荐的工作电压是一点一五伏特。

2JTAG接口:JIAG(联合测试工作组)接口可以把Quartus软件编译好的Verilog代码(.JIC文件)烧录进FPGA芯片中,因为FPGA是基于随机存储器的一种结构,它的内部没有固化的flash模块,无法存储数据,因此,通过JTAG下载的程序,关掉电源以后就会丢失,所以每次打开电源是都要重新下载才可以。目前,大多数高级部件都支持JTAG协议。

350MHz有源晶振:晶振在数字电路设计中的基本作用是提供一个时序控制的时钟信号。

图1图LED状态指示灯电路 

4LED状态指示灯电路 :由8个发光二极管L0~L7组成的状态指示灯显示电路,做输出实验 时可同时观察8个输出信号的电平变化。每只发光管的阳极接到3.3V电源,阴极分别串联一个电阻与FPGA芯片的IO脚相连。所接FPGA引脚输出为低电平时,该发光二极管被点亮。

图2 LED数码管电路

5LED数码管电路:数码管是一种非常直观而简单的输出显示形式,所以很多电子产品都选择用数码管作 为其显示部件。板载4 位共阳数码管,当位码信号为0 时,对应的数码管即操作;当段码信号为0 时,对应的段码点亮,位码由于电流较大,采用了三极管驱动。

6)按键低电平有效。

7JTAG下载线,USB电源连接线

图3 硬件实物图

2.2、软件

1Quartus II 13.0:本设计所使用的FPGA开发工具是Altera公司所推出的CPLD/FPGA开发软件Quartus II 13.0。这款软件的功能非常强大,支持原理图、VHDLVerilog HDL等多种设计输入形式[5]Quartus软件还具备综合和仿真的功能,可以完成完整的可编程逻辑器件的设计流程。由于其强大的功能和简洁的界面,Quartus II软件现在已经成为FPGA工程师开发项目工程的主流选择之一

2iverilogIcarus Verilog(简称iverilog )号称“全球第四大”数字芯片仿真器,也是一个完全开源的仿真器。iverilog以编译器的形式工作, 将以verilog编写的源代码编译为某种目标格式. 如果要进行仿真的话, 它可以生成一个叫做vvp的中间格式. 通过“iverilog + gtkwave”的方式,可以很方便地实现商用仿真器的功能。

3Notepad++Notepad++是一款简洁、高效的文本编辑器,支持多种常见的语言,具有很多强大的功能,比如自动保存,编辑只读文件,列编辑,格式编码,查找替换等等,可以为工程师开发工程节省大量的时间和精力。

3、交通灯控制系统主要功能和设计框图

3.1、主要功能

两组交通灯的红绿黄三种灯交替点亮,同时数码管显示各个灯的点亮时间。

3.2、系统总体设计思路

本设计采用自底向上的设计方法[7],有计时块、LED控制块、数码管显示块、时钟分频块四个always块。

3.3、具体模块分析

  1. 计时块(Timer Block)
    • 功能:负责产生计时信号,用于控制LED和其他模块的操作速度或周期。
    • 实现:使用一个计数器来追踪经过的时钟周期数。当达到预设的阈值时,可以产生一个中断或标志信号。
    • 接口:输入通常是时钟信号和可能的重置信号;输出是计时完成的标志或中断信号。
  2. LED控制块(LED Control Block)
    • 功能:根据当前状态或外部输入控制LED的亮灭模式。
    • 实现:使用状态机(如有限状态机FSM)来管理LED的不同模式或动画。状态机可以根据计时器的信号、用户输入或其他条件进行切换。
    • 接口:输入可能包括来自计时器的信号、用户输入或其他控制信号;输出是控制LED亮灭的信号。
  3. 数码管显示块(Digit Display Block)
    • 功能:显示时间、计数值或其他相关信息在数码管上。
    • 实现:根据输入的数字信号,将其转换为适合数码管显示的编码(如BCD或七段编码)。
    • 接口:输入是数字信号(可能来自计时器或其他数据源);输出是控制数码管段位的信号。
  4. 时钟分频块(Clock Divider Block)
    • 功能:将输入的时钟信号分频,产生不同频率的时钟信号,用于驱动不同速度的模块。
    • 实现:使用计数器来追踪输入的时钟周期数,并在达到某个预设值后产生一个新的时钟周期。
    • 接口:输入是高频的时钟信号;输出是不同频率的分频时钟信号。

4、代码实现

本设计采用自底向上的设计,是一种简单易实行的设计思路,尤其是对简单的系统控制设计方便快捷。首先确定需要的各个功能,通过不同的always块进行实现,最后通过对整体代码的编译即可实现功能。对于该红绿灯系统只需实现对LED灯与数码管的控制,利用多always块实现使程序易于更改,避免了多模块编程的繁琐。

以下是对给定代码的分段描述和解释:

模块定义

module led(clk,Led,rst,wei,shu);

定义了一个名为led的模块,该模块有五个端口:clk(时钟输入)、Led(LED控制输出)、rst(复位输入)、wei(数码管位选控制输出)和shu(数码管段选控制输出)。

输入输出定义

input wire clk,rst;
reg en=1;
output reg[7:0] Led=8'b01111101;
output reg[3:0] wei=4'b1100;
output reg[7:0] shu;

定义了输入clkrst,以及输出Ledweishu。其中Ledwei有初始值。

内部变量定义

reg [3:0]shuzi;
reg [1:0]cnt_state;
reg [15:0] cnt1;
reg [25:0] cnt=26'b0;
reg [15:0]  tim=24'b0;
reg cc=0,clk1=0;
reg [3:0]data_ew_0,data_ew_1;

定义了内部变量,如shuzi(用于存储数码管显示的数字)、cnt_state(用于状态切换)等。

数码管不同位显示内容

//数码管不同位显示内容
always @*
begindata_ew_0=tim%10;data_ew_1=tim/10;end

根据tim的值,计算数码管两位数的个位和十位,并存储在data_ew_0data_ew_1中。

对50MHz晶振分频

 //对50MHz晶振分频
always@(posedge clk)
beginif(cnt == 25000000)begin cnt <= 0; clk1 <= ~clk1;	endelse  begin cnt <= cnt+1'b1;end
end

对输入的clk(假设为50MHz)进行分频,产生新的时钟信号clk1

数码管点亮时间控制

//数码管点亮时间控制
always@(posedge clk)
beginif(cnt1 < 250)begin cc<=1;cnt1 <= cnt1+1'b1 ;	endelse if(cnt1<500) begin cnt1 <= cnt1+1'b1;cc<=0;endelse cnt1 <= 0;
end

控制数码管的点亮时间,通过cc信号来控制。

LED闪烁控制

always @(posedge clk1)
begin 
if(!rst)           begin tim<=0; Led<=8'b111111111; endif(tim==3)       begin Led<=8'b01111110;tim<=tim+1;	endelse if(tim==6)   begin Led<=8'b10111011;tim<=tim+1;	endelse if(tim==9)   begin Led<=8'b11011011;tim<=tim+1;	endelse if(tim==12)  begin Led<=8'b01111101;tim<=0;	endelse            tim<=tim+1;
end

根据tim的值和复位信号rst,控制LED的闪烁。

切换数码管点亮的2个状态

//切换数码管点亮的2个状态
always @ (posedge clk)
beginif (!rst)cnt_state <= 2'b00;else  if (cc)cnt_state <= 2'b00;elsecnt_state <= 2'b01;
end 

根据复位信号rstcc信号,切换数码管显示的状态(个位或十位)。

数码管显示内容控制

//数码管显示内容控制
always @ (posedge clk)beginif(!rst) beginwei  <= 4'b0000;shuzi  <= 4'b0000;end else if(en) begin       case (cnt_state) 2'b00 : begin     wei <= 4'b0100;             shuzi <= data_ew_1;end       2'b01 : begin     wei <= 4'b1000;              shuzi <= data_ew_0;end default : begin     wei <= 4'b1100;                     shuzi <= 4'b0;endendcaseendelse  beginwei <= 4'b0000;shuzi <= 4'b0000;    end
end 

根据当前状态cnt_state和复位信号rst,控制数码管显示的位和段。

数码管段选显示

always@(posedge clk)
beginif(!rst)shu <= 8'hff;else begin   //数码管段选显示case(shuzi)4'd0		:	shu=8'h03;	4'd1		:	shu=8'h9f;4'd2		:	shu=8'h25;4'd3		:	shu=8'h0d;4'd4		:	shu=8'h99;4'd5		:	shu=8'h49;4'd6		:	shu=8'h41;4'd7		:	shu=8'h1f;4'd8		:	shu=8'h01;4'd9		:	shu=8'h19;Default  :   shu=8'hff;endcaseend
end
endmodule

根据shuzi的值,控制数码管的段选显示。

代码总结(附源码)

该模块实现了一个基于FPGA的红绿灯和数码管显示系统。其中,数码管用于显示时间(可能是一个倒计时),而LED灯则根据时间进行闪烁。此外,还包括了对时钟的分频和数码管显示的精确控制。

module led(clk,Led,rst,wei,shu);
input wire clk,rst;
reg en=1;
output reg[7:0] Led=8'b01111101;
output reg[3:0] wei=4'b1100;
output reg[7:0] shu;
reg [3:0]shuzi;
reg [1:0]cnt_state;
reg [15:0] cnt1;
reg [25:0] cnt=26'b0;
reg [15:0]  tim=24'b0;
reg cc=0,clk1=0;
reg [3:0]data_ew_0,data_ew_1;
//数码管不同位显示内容
always @*
begindata_ew_0=tim%10;data_ew_1=tim/10;end//对50MHz晶振分频
always@(posedge clk)
beginif(cnt == 25000000)begin cnt <= 0; clk1 <= ~clk1;	endelse  begin cnt <= cnt+1'b1;end
end
//数码管点亮时间控制
always@(posedge clk)
beginif(cnt1 < 250)begin cc<=1;cnt1 <= cnt1+1'b1 ;	endelse if(cnt1<500) begin cnt1 <= cnt1+1'b1;cc<=0;endelse cnt1 <= 0;
endalways @(posedge clk1)
begin 
if(!rst)           begin tim<=0; Led<=8'b111111111; endif(tim==3)       begin Led<=8'b01111110;tim<=tim+1;	endelse if(tim==6)   begin Led<=8'b10111011;tim<=tim+1;	endelse if(tim==9)   begin Led<=8'b11011011;tim<=tim+1;	endelse if(tim==12)  begin Led<=8'b01111101;tim<=0;	endelse            tim<=tim+1;
end
//切换数码管点亮的2个状态
always @ (posedge clk)
beginif (!rst)cnt_state <= 2'b00;else  if (cc)cnt_state <= 2'b00;elsecnt_state <= 2'b01;
end //数码管显示内容控制
always @ (posedge clk)beginif(!rst) beginwei  <= 4'b0000;shuzi  <= 4'b0000;end else if(en) begin       case (cnt_state) 2'b00 : begin     wei <= 4'b0100;             shuzi <= data_ew_1;end       2'b01 : begin     wei <= 4'b1000;              shuzi <= data_ew_0;end default : begin     wei <= 4'b1100;                     shuzi <= 4'b0;endendcaseendelse  beginwei <= 4'b0000;shuzi <= 4'b0000;    end
end always@(posedge clk)
beginif(!rst)shu <= 8'hff;else begin   //数码管段选显示case(shuzi)4'd0		:	shu=8'h03;	4'd1		:	shu=8'h9f;4'd2		:	shu=8'h25;4'd3		:	shu=8'h0d;4'd4		:	shu=8'h99;4'd5		:	shu=8'h49;4'd6		:	shu=8'h41;4'd7		:	shu=8'h1f;4'd8		:	shu=8'h01;4'd9		:	shu=8'h19;Default  :   shu=8'hff;endcaseend
end
endmodule

5、仿真

在本次课程设计中,我们利用Iverilog软件对基于FPGA的红绿灯系统进行了功能仿真。通过Iverilog的仿真环境,我们能够模拟红绿灯系统的实际运行情况,验证其逻辑功能的正确性。

在仿真过程中,我们首先编写了红绿灯系统的Verilog源代码,包括红绿灯显示模块、计时控制模块以及状态切换模块的实现。随后,我们将这些代码加载到Iverilog仿真器中,并设置相应的输入信号和仿真时间。

通过运行仿真,我们能够观察到红绿灯系统在不同状态下的运行情况,包括红灯、黄灯、绿灯的亮灭以及它们之间的切换。仿真结果能够直观地展示系统的逻辑功能和时序关系,帮助我们快速定位和解决潜在的问题。

通过本次功能仿真,我们验证了红绿灯系统设计的正确性,为后续的FPGA硬件实现提供了有力的支持。

仿真波形

6、结论

交通灯控制系统设计采用 Verilog 硬件描述语言,按自底向上的设计方法,将设计的数字系统作为一个整体,通过对四个不同的always块设计 , 分别包括,计时块,时钟分频块,数码管段选块, 数码管位选块,led灯控制块。用iverilog对整体进行仿真得到波形,待到仿真通过后,将程序通过JTAG下载器下载到EP4CE6F17C8芯片中,并在FPGA开发板上验证其功能。经过FPGA开发板的验证实现,本设计完全符合所预期的设计需求。

参考文献

  1. 周景润.基于Quartus的FPGA数字系统设计[M].北京:电子工业出版社,2007:212-306.
  2. Mark Zwolinski.Verilog HDL数字系统设计[M].北京:电子工业出版社,2007.
  3. 黄智伟等.FPGA系统设计与实践[M].北京:电子工业出版社,2005.
  4. 蔡明生.电子设计[M].北京:高等教育出版社,2004.
  5. 周梦然.CPLD/FPGA的开发与应用[M].北京:中国矿业大学出版社,2007.
  6. 刘小俊.基于FPGA技术的IP核设计[J].武汉理工大学学报,2005:43-47.
  7. 冯维川.基于FPGA的多功能空调控制器设计[J].电子技术,2007:67-69.
  8. 阎石.数字电子技术基础:第五版[M]. 北京:高等教育出版社,2006.
  9. 金明.数字统设计与verilog HDL[M].电子工业出版社,2021.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我又学会了使用Range实现网络文件下载的断点续传

文章目录 前言1、Range请求头1.1、概述1.2、使用限制1.3、范围请求1.4、预防资源变更 2、断点续传下载实现2.1、流程设计2.2、代码实现2.3、运行结果 3、RandomAccessFile4、思维拓展参考资料 前言 在某次摸鱼的过程中&#xff0c;老大突然后面冒出来说要做一个拉取文件到本地…

复位电路。

复位电路一般用到 电容电阻。 有的 是低电平复位&#xff0c;有的是高电平复位。 这里的电容的作用&#xff0c;上电自动复位。 参考&#xff1a; 此时 电容还能起到 抗干扰的作用。吸收 噪声。 电阻的作用&#xff0c;不是很理解&#xff0c;感觉是 在 上拉没有形成之前&am…

ninja构建笔记

在ninja构建系统中&#xff0c;“rule”和“build”这两个词通常关联但扮演着不同的角色。下面我会详细解释它们的区别&#xff1a; ### Rule (规则) 在构建系统中&#xff0c;“rule”通常指的是构建系统用来指导如何构建文件或者目标的指令集。它定义了一组转换输入到输出的…

数据库-单表查询-基本查询

查询数据表中指定字段的内容&#xff1a; SELECT 字段名 FROM 表名; 同时查询多个字段下的内容: SELECT 字段名1, 字段名2 FROM 表名; 查询数据表中的所有内容: SELECT * FROM 表名; 带IN关键字的查询: SELECT 字段名 FROM 表名 WHERE 字段名 IN (n1,n2,n3,...); IN关键字…

lora 继续训练

lora 继续训练 一般正常lora训练完模型后我们只保存其lora参数&#xff0c;然后与base模型进行合并。记录一下训练完保存lora后&#xff0c;继续再对lora训练的步骤。 base_model AutoModelForCausalLM.from_pretrained(base_model_id) base_model.enable_input_require_gra…

Multi-Head RAG:多头注意力的激活层作为嵌入进行文档检索

现有的RAG解决方案可能因为最相关的文档的嵌入可能在嵌入空间中相距很远&#xff0c;这样会导致检索过程变得复杂并且无效。为了解决这个问题&#xff0c;论文引入了多头RAG (MRAG)&#xff0c;这是一种利用Transformer的多头注意层的激活而不是解码器层作为获取多方面文档的新…

@Transactional实现原理及失效的三种情况

Transactional实现原理 Transactional是spring中定义的事务注解&#xff0c;在方法或类上加该注解开启事务。主要是通过反射获取当前对象的注解信息&#xff0c;利用AOP&#xff08;代理模式&#xff09;对编程式事务进行封装实现 // // Source code recreated from a .class f…

Win11版本21H2怎么升级为23H2?升级详细步骤在此!

在Win11电脑操作中&#xff0c;用户目前使用的版本是21H2&#xff0c;现在想体验23H2版本的先进功能&#xff0c;但不知道要怎么操作才能将系统版本升级为23H2&#xff1f;接下来小编给大家介绍详细的升级方法步骤&#xff0c;助力大家轻松完成系统版本升级操作。 方法一&#…

PostgreSQL源码分析——CHECKPOINT

checkpoint源码分析 因为检查点checkpoint相关的代码不是一篇文章就能分析完的&#xff0c;所以&#xff0c;相关的代码与逻辑可能会不连续&#xff0c;需要后续结合上下文理解。这里只列出了其中一部分。 其核心代码在&#xff1a;src/backend/postmaster/checkpointer.c以及…

05眼动识别软件详情2波形优化-滤波

对应视频链接点击直达 01项目点击下载&#xff0c;可直接运行&#xff08;含数据库&#xff09; 05眼动识别软件详情2 对应视频链接点击直达期望的数据展示数据波形对比如何实现几种常用滤波介绍维纳滤波巴特沃斯滤波器中值滤波排序滤波 推荐 结语其他以下是废话 原始数据的波…

CentOS 7.9上创建的JBOD阵列恢复(二)

系列文章目录 CentOS 7.9上创建JBOD&#xff08;一&#xff09; CentOS 7.9检测硬盘坏区、实物定位&#xff08;三&#xff09; 文章目录 系列文章目录前言一、用命令查看是否认到盘二、直接组JBOD三、挂载到新目录四、查看原数据总结 前言 在CentOS 7.9上创建了一个软阵列JB…

代码随想录算法训练营第四十二天| 1049. 最后一块石头的重量 II、 494. 目标和

LeetCode 1049. 最后一块石头的重量 II 题目链接&#xff1a;https://leetcode.cn/problems/last-stone-weight-ii/description/ 文章链接&#xff1a;https://programmercarl.com/1049.%E6%9C%80%E5%90%8E%E4%B8%80%E5%9D%97%E7%9F%B3%E5%A4%B4%E7%9A%84%E9%87%8D%E9%87%8FII…

SQL触发器基本结构

1. 修改分隔符的符号 delimiter $$ $$或者//都可以 2.创建触发器的名称 create trigger 函数名称 3. 什么样的操作会触发&#xff0c;操作的那个表 after&#xff1a;....之后触发 befor&#xff1a;....之前触发 insert&#xff1a;插入被触发 update&#xff1a;修改被触发 …

Kibana 一步步可视化实战构建步骤全集

今早读者朋友圈提及&#xff1a;《一本书讲透Elasticsearch》适合入门级体系化阅读&#xff0c;书中的3个项目实战&#xff0c;很适合实操&#xff0c;但是在建立Kibana可视化的过程中&#xff0c;书中没有明确构建步骤&#xff0c;在实操中会有缺憾。 我解释一下&#xff1a; …

CPU与GPU的原理不同

CPU&#xff08;中央处理器&#xff09;和GPU&#xff08;图形处理器&#xff09;在设计原理上有很大的不同。CPU是通用的计算核心&#xff0c;擅长处理复杂的控制流和数据结构&#xff0c;而GPU则是为了并行处理大量相似的计算任务而设计的。二者是计算机系统中两种不同类型的…

AI实战 | 使用元器打造浪漫仪式小管家

浪漫仪式小管家 以前我们曾经打造过学习助手和待办助手,但这一次,我们决定创造一个与众不同的智能体,而浪漫将成为我们的主题。我们选择浪漫作为主题,是因为我们感到在之前的打造过程中缺乏了一些仪式感,无法给对方带来真正的惊喜。因此,这一次我们计划慢慢调试,将它发…

vim 显示行号

在 Vim 中&#xff0c;你可以通过几种不同的方式来显示行号。以下是两种常用的方法&#xff1a; 临时显示行号&#xff1a; 当你打开 Vim 并想要临时查看文件的行号时&#xff0c;你可以使用 :set number 命令。这个命令会在当前 Vim 会话中显示行号。如果你想要关闭行号显示&a…

Python xml.dom.minidom 读取XML元素

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 什么是 XML&#xff1f; XML&#xff08;可扩展标记语言&#xff09;是一种用于描述数据结构和交换数据的标记语言。它被广泛用于 Web 应用程序中&#xff0c;用于存储和传输数据。XML 具有自描述性&#xff0c;因此…

GitHub|GitLab它们的区别是什么?

GitLab 和 GitHub 都是基于 Git 版本控制系统提供服务的平台&#xff0c;但它们是两个不同的产品&#xff0c;各自有着不同的特点和目标用户群。下面是对它们的基本解释和一些关键差异&#xff1a; GitHub 概述&#xff1a;GitHub 是全球最大的开源代码托管平台&#xff0c;由…

yocto根文件系统如何配置静态IP地址

在Yocto根文件系统中配置静态IP地址&#xff0c;你可以参考以下步骤。请注意&#xff0c;这些步骤可能会因Yocto版本和具体硬件平台的不同而略有差异。 1. 获取网络配置信息 首先&#xff0c;你需要从网络运维方获取分配的IP地址、子网掩码、默认网关和DNS信息。 2. 确定配置文…