一、实验目的
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。主机及网络详细配置参照附带的实验环境拓扑及软件配置文档。
四、实验步骤
首先完成基础要求,实现2进3出的功能配置。
项目1:2进3出端口配置
① step1.使用Quartus 打开 in2out3目录下的硬件工程项目netFPGAmini.qpf
② step2.在工程项目中,打开文件列表对UM.v文件进行编写(用户模块文件)
注:文件列表在左上角Project Navigator右侧框中,选择Files
③ 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,若是则将信息转发到端口3;再判断是否来自端口3,若是则将信息转发到端口2;如果信息来自其他端口,则不进行处理。经过如此步骤,完成2进3出端口信息的转发。
⑤ step5.点击编译,生成新的.sof文件。
⑥ step6.下载。插上设备,进行下载和硬件调试。
⑦ step7.连通。用网线将两台PC与NetMagic设备相连,设置各自的静态IP地址,再使用命令行ping命令查看是否连通。
a.用网线将两台PC与NetMagic设备相连。
b.两台PC均打开cmd,输入ipconfig命令,查找PC的设静态IP地址。
PC1:IP地址为169.254.205.152
PC2:IP地址为169.254.107.107
c.再使用命令行ping命令查看是否连通。
PC1:连通PC2,PC2地址为169.254.107.107
PC2:连通PC1,PC1地址为169.254.205.152
项目2:N进N出端口配置
(1)step1.在工程项目中的UM.v文件中,找到N进N出模块部分,进行编写,完成端口n进端口n出的硬件设计。
相关代码如下图:
新增代码如下:(把刚刚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];
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
(2)strp2.关键代码解释
对2进3出代码的if语句部分进行的修改:
a.信号从3号端口进入(b0001,二进制的1):信号被发送到1、3、4三个端口(h0000000d),只要能够连接到相应的目的主机,就能实现连接。
b.信号从3号端口进入(b0010,二进制的2):信号被发送到1、2、4三个端口(h0000000b),只要能够连接到相应的目的主机,就能实现连接。
c.信号从4号端口进入(b0011,二进制的3):信号被发送到1、2、3三个端口(h00000007),只要能够连接到相应的目的主机,就能实现连接。
d.信号从1号端口进入(b0000,二进制的0):信号被发送到2、3、4三个端口(h0000000e),只要能够连接到相应的目的主机,就能实现连接。
以此修改,来实现任意两个口之间的互联。后四位从左到右(从高到低)依次代表4、3、2、1号端口。
(3)step3.点击编译,生成新的.sof文件。
(4)step4.下载。插上设备,进行下载和硬件调试。
(5)step5.连通。用网线将两台PC与NetMagic设备相连,设置各自的静态IP地址,再使用命令行ping命令查看是否连通。
a.用网线将两台PC与NetMagic设备相连。1-4端口均可连接,本组验收过程中试过5种以上的连接组合。
b.两台PC均打开cmd,输入ipconfig命令,查找PC的设静态IP地址。
PC1:IP地址为169.254.198.176
PC2:IP地址为169.254.107.107
c.再使用命令行ping命令查看是否连通。
PC1:连通PC2,PC2地址为169.254.107.107
PC2:连通PC1,PC1地址为169.254.198.176
五、实验思考
项目1:2进3出端口配置
1.问:项目2完成后,3号口和4号口能否联通?
答:不能。该项目的if语句只对来自2号口或3号口的信息进行处理,而其他情况的不进行转发。所以3号口和4号口是无法联通的。
项目2:N进N出端口配置
在学习了老师提供的2进3出的硬件逻辑设计基础上,我们小组完成了n进n出的逻辑设计,通过改动if语句的判断规则和转发,完成了任意两个端口之间的信息互通和转发。
除此之外,我们小组在实验过程中,加深了对NetMagic使用的理解,了解了Ping的使用,初步了解了单播和广播的传播和区别。