其他分享
首页 > 其他分享> > 路由与交换机实验一

路由与交换机实验一

作者:互联网

路由与交换机(2进3出,N进N出)

实验一

一、 实验目的

1、熟悉NetMagic08的硬件编程方式;
2、基于 NetMagic08 搭建实验环境,包括 NetMagic08 的安装、Quartus 与 NetMagic08的对接
3、使用 Quartus设计硬件逻辑
4、了解FPGA编程基础

二、 实验内容

1、基础要求:
在UM_my/UM.v中使用Verilog语言编写一个模块让NetMagic08实现2口进3口出的基本功能。
2.扩展要求:
在实现了实验内容1后,改写程序实现从NetMagic08 的2端口进入的包转发至所有端口;所有端口进入的包都转发到2号端口。

三、 实验环境

在这里插入图片描述

  1. 1台管理节点主机;1台主机A;(分别连接到2口和3口);
  2. 2根网线;
  3. NetMagic08开发平台;
  4. 软件Quartus 16。主机及网络详细配置参照附带的实验环境拓扑及软件配置文档。

四、 项目1实验步骤

我们首先完成基础要求,实现2进3出的功能配置。
step1.使用Quartus 打开 in2out3目录下的硬件工程项目netFPGAmini-2-3.qsf。
在这里插入图片描述

step2.在工程项目中,打开文件列表对UM.v文件进行编写(用户模块文件)
在这里插入图片描述

Step3. 在UM.v文件中增加一个新的处理逻辑,在一个always@(posedge clk or negedge reset)逻辑中完成端口2进端口3出的硬件设计。
相关代码如下图:
在这里插入图片描述

always@(posedge clk or negedge reset)
      if(!reset)
	      begin
	      	um2cdp_rule <=30'b0; 
	      	um2cdp_rule_wrreq <= 1'b0;
	      	input_port_reg <= 4'b0;		
	      end
      else
	      begin 
	      	if((cdp2um_data_valid==1'b1)&&(cdp2um_data[138:136]==3'b101)) //报文头到达
	      		input_port_reg <= cdp2um_data[131:128]; //锁存输入端口号
	      	//定义转发规则:决定输出端口号、全文转发、摘要转发或丢弃报文。
	      	//如果查表算法较复杂,需要一边接收报文一边查表,以在报文尾到达时产生规
	      	//则信息。路由表可以放在UM的内部RAM中,也可以放在外部DDR2中。 
	      	//这里只实现了最简单的端口交换行为,因此未进行IP层的查表。
	      	else if((cdp2um_data_valid==1'b1)&&(cdp2um_data[138:136]==3'b110)&&(cdp2um_rule_usedw<5'd30)) //报文尾到达
	      		begin		//端口号交换
	      			if(input_port_reg==4'b0001) //来自外部端口2(逻辑端口1)
	      				begin 
	      					um2cdp_rule <=30'h00000004; //送往外部端口3(逻辑端口2) //最高位固定为0,告诉CDP output_ctrl报文来自UM
	      					um2cdp_rule_wrreq <=1'b1; //写规则
	      				end
	      			else if(input_port_reg==4'b0010) //来自外部端口3(逻辑端口2)	
	      				begin
	      					um2cdp_rule <=30'h00000002; //送往外部端口2(逻辑端口1) 
	      					um2cdp_rule_wrreq <=1'b1;	
	      				end
	      			else 
	      				um2cdp_rule_wrreq <=1'b0; //来自其它端口,不写规则
	      		end	
	      	else
	      		um2cdp_rule_wrreq <= 1'b0;	
	      end

Step4.关键代码解释:
在这里插入图片描述

主要的就是内部的if判断语句首先判断输入信息是否是来自端口2的,如果是来自端口2则将信息转发到端口3;同理判断输入信息是否来自端口3,若果是来自端口3则将信息转发到端口2;最后,对于其他情况,我们不转发。
Step5.
在这里插入图片描述

点击编译命令,对代码进行编译,软件会完成硬件电路的设计和优化,生成和工程名同名的sof文件。
点击图中的蓝色箭头即可进行编译。编译时间可能会较长。

Step6.将sof文件下载到NetMagic08中进行硬件调试
在这里插入图片描述
在这里插入图片描述

下载完毕后,我们使用网线将两台PC与NetMagic设备相连接,在设置了各自的静态IP地址后,使用命令行名ping命令,查看是否连通。
我们将两台计算机的一台IP设置为:169.254.0.121;另一台设置为:169.254.141.235

从169.254.141.235顺利ping通169.254.0.121(此时169.254.141.235连接2口,169.254.0.121连接3口)
在这里插入图片描述
在这里插入图片描述

再从169.254.141.235ping169.254.0.121,发现顺利ping通。
断开网口,发现请求超时
至此项目实现2进3出的代码顺利调试成功。
N进N出端口配置
在完成了项目1中的2进3出的代码后,我们追求更进一步的配置功能。实现N进N出,即实现N号端口连通到其他所有3个端口(当然也可以是其他某几个端口)

五、 项目2实验步骤

修改代码如下:
在这里插入图片描述

always@(posedge clk or negedge reset)
	if(!reset)
		begin
			um2cdp_rule<=30'b0;
			um2cdp_rule_wrreq<=1'b0;
			input_port_reg<=4'b0;
		end	
	else
		begin
			if((cdp2um_data_valid==1'b1)&&(cdp2um_data[138:136]==3'b101)) 
				input_port_reg<=cdp2um_data[131:128];
			else if((cdp2um_data_valid==1'b1)&&(cdp2um_data[138:136]==3'b110)&&(cdp2um_rule_usedw<5'd30))
				begin
					if(input_port_reg==4'b0001)
						begin
							um2cdp_rule<=30'h0000000d;
							um2cdp_rule_wrreq<=1'b1;
						end
					else if(input_port_reg==4'b0010) //来自外部端口3 (逻辑端口2)
						begin
							um2cdp_rule <=30'h0000000b; //送往外部端口2 (逻辑端口1)
							um2cdp_rule_wrreq <=1'b1;
						end
					else if(input_port_reg==4'b0011) //来自外部端口4 (逻辑端口3)
						begin
							um2cdp_rule <=30'h00000007; 
							um2cdp_rule_wrreq <=1'b1;
						end
					else if(input_port_reg==4'b0000) //来自外部端口1 (逻辑端口0)
						begin
							um2cdp_rule <=30'h0000000e; 
							um2cdp_rule_wrreq <=1'b1;
						end
					else
						um2cdp_rule_wrreq <=1'b0; //来自其它端口,不写规则
				end
			else
				um2cdp_rule_wrreq <= 1'b0;
		end

可以看到,主要是对端口号if判断分支进行了修改。
首先,从2号端口进来的数据(b0001,二进制的1)将会被发送到1、3、4三个端口(h0000000d,最后一位相当于二进制的1101),这样,只要能够连接到相应的目的主机,就能实现连接。
同理,从3号端口进来的数据(b0010,二进制的2)将会被发送到1、2、4三个端口(h0000000b,最后一位相当于二进制的1011),这样,只要能够连接到相应的目的主机,就能实现连接。
同理,从4号端口进来的数据(b0011,二进制的3)将会被发送到1、2、3三个端口(h00000007,最后一位相当于二进制的0111),这样,只要能够连接到相应的目的主机,就能实现连接。
同理,从1号端口进来的数据(b0000,二进制的0)将会被发送到2、3、4三个端口(h0000000e,最后一位相当于二进制的1110),这样,只要能够连接到相应的目的主机,就能实现连接。
相当于我这里实现的是一个广播,任何两个口之间都可以实现互联(项目2验收要求)。后四位从左到右(从高到低)依次代表4、3、2、1号端口。
将网线分别插入2,3号端口:

实验成功,证明此时2号和3号端口能成功连通。
现在我们将线连接在1号端口和4号端口:
再在两台PC机上使用ping命令进行连通:
在这里插入图片描述

中间有丢包是以为中途拔掉了网线,然后又插上了。
至此实验已经可以证明成功。
成功实现n进n出的进阶实验。

六、 实验思考

项目2完成后3号口和4号口能否联通?
答案是能。因为代码内部的if判断语句判断的是输入信息是否是来自端口N的,如果是则将信息转发到其他端口,也就是说只要是两个不同端口就可以进行联通。

标签:NetMagic08,端口,二进制,交换机,实验,169.254,连接,路由
来源: https://blog.csdn.net/banxia_hnu_zjw/article/details/115170634