pre_prcs_top模块由三个子模块组成:hd_rmv, len_cal和fc。
5.1.1. 功能说明hd_rmv模块:a) 把输入的八位数据转换为32位数据;
b) 检测包头为ISL,VLAN和MPLS的数据包,并将其包头去除。
len_cal模块: a) 计算数据包的长度;
b) 根据用户的配置来判断过长和过短的数据包,并做标记。
fc模块: a) 丢弃过长、过短和错误的数据包;
b) 缓存数据包。
5.1.2. 模块框图pre_prcs_top模块由三个子模块hd_rmv, len_cal和fc组成,其内部框图如下:
5.1.3. 模块接口信号定义
接口信号 |
方向 |
功能描述 |
全局信号 |
||
sys_clk |
input |
系统时钟, 25M |
sys_rst_n |
input |
系统复位信号, 低电平有效 |
与tri_mode_eth_mac_locallink模块的接口信号 |
||
rd_data_out[7:0] |
input |
MAC core输出的数据包数据 |
rd_sof_n |
input |
标记数据包开始,低电平有效 |
rd_eof_n |
input |
标记数据包结束,低电平有效 |
rd_src_rdy_n |
input |
数据源数据有效信号,低电平有效 |
rd_dst_rdy_n |
output |
可以接收信号,低电平有效 |
|
||
rx_fifo_status[3:0] |
output |
前端fifo状态 |
与flow_sts模块的接口信号 |
||
pre_sop_st |
output |
数据包头 |
pre_eop_st |
output |
数据包尾 |
pre_dvld_st |
output |
数据有效 |
pre_dat_st[31:0] |
output |
数据 |
pre_mod_st[1:0] |
output |
模式选择,eop时候的数据有效的byte数 00:4位有效 01:高三位有效 10:高两位有效 11:高一位有效 |
st_pb_pre |
input |
Push back,表示不能继续收包 |
与conf_if模块的接口信号 |
||
conf_wr_cal |
input |
ppc写使能信号 |
conf_rd_cal |
input |
ppc读使能信号 |
conf_clr_cal |
input |
ppc清零信号 |
conf_addr[3:0] |
input |
ppc读写地址信号 |
conf_wdat[15:0] |
input |
ppc读数据 |
cal_rdat_conf[15:0] |
output |
ppc写数据 |
Ø 统计数据包的各种sip或者dip或者sp或者dp的流量信息
Ø 提供powerpc读取接口用以读取流量信息
5.2.2. 模块框图5.2.3. 模块接口信号定义
说明:功能描述为空的信号表示已经在前面模块中描述过
接口信号 |
方向 |
功能描述 |
全局信号 |
||
sys_clk |
input |
系统时钟, 25M |
sys_rst_n |
input |
系统复位信号, 低电平有效 |
与pre_prcs_top模块的接口信号 |
||
pre_sop_st |
input |
|
pre_eop_st |
input |
|
pre_dat_st[31:0] |
input |
|
pre_mod_st[1:0] |
input |
|
pre_dvld_st |
input |
|
st_pb_pre |
output |
|
与key模块的接口信号 |
||
st_sop_key |
output |
|
st_eop_ key |
output |
|
st_dat_ key [31:0] |
output |
|
st_mod_ key [1:0] |
output |
|
st_dvld_ key |
output |
|
key _pb_st |
input |
|
与conf_if模块的接口信号 |
||
conf_wr_fs |
input |
|
conf_rd_fs |
input |
|
conf_clr_fs |
input |
|
conf_wdat[15:0] |
input |
|
conf_addr[7:0] |
input |
|
fs_rdat_conf[15:0] |
output |
|
5.3 关键字产生模块(key_gen) 5.3.1. 功能说明
Ø 转发数据包至flow_sts模块
Ø 从数据包中提取关键字key,并发送到cam_if模块用于匹配。
5.3.2. 模块框图5.3.3. 模块接口信号定义
说明:功能描述为空的信号表示已经在前面模块中描述过
接口信号 |
方向 |
功能描述 |
全局信号 |
||
sys_clk |
input |
系统时钟, 25M |
sys_rst_n |
input |
系统复位信号, 低电平有效 |
与flow_sts模块的接口信号 |
||
st_sop_key |
input |
|
st_eop_key |
input |
|
st_dat_key[31:0] |
input |
|
st_mod_key[1:0] |
input |
|
st_dvld_key |
input |
|
key_pb_st |
output |
|
与drop模块的接口信号 |
||
key_sop_drop |
output |
|
key_eop_drop |
output |
|
key_dat_drop[31:0] |
output |
|
key_mod_drop[1:0] |
output |
|
key_dvld_drop |
output |
|
drop_pb_key |
input |
|
与cam_if模块的接口信号 |
||
key_sok_ci |
output |
Key头(stat of key) |
key_eok_ci l |
output |
Key 尾(end of key) |
key_key_ci[31:0] |
output |
Key内容 |
key_kvld_ci |
output |
Key有效 |
5.4 CAM接口模块(cam_if) 5.4.1. 功能说明
Ø 接收配置信息,确定匹配规则
Ø 接收key_gen 产生的key,组成144位的查找关键字
Ø 将查找关键字送入cam中进行匹配
Ø 根据查找结果决定处理方式
Ø 将匹配结果返回到drop模块
5.4.2. 模块框图5.4.3. 模块接口信号定义
说明:功能描述为空的信号表示已经在前面模块中描述过
接口信号 |
方向 |
功能描述 |
全局信号 |
||
sys_clk |
input |
系统时钟, 25M |
sys_rst_n |
input |
系统复位信号, 低电平有效 |
与key_gen模块的接口信号 |
||
key_sok_ci |
input |
|
key_eok_ci |
input |
|
key_key_ci[31:0] |
input |
|
key_kvld_ci |
input |
|
与cam模块的接口信号 |
||
ci_din_cam[31:0] |
output |
Data in,写入cam的数据 |
ci_cmp_din_cam[31:0] |
output |
Compare data in需要匹配的数据 |
ci_cmp_dmsk_cam[31:0] |
output |
Compare data mask,用来屏蔽ci_cmp_din_cam[31:0]上某些不关心的位 |
ci_en_cam |
output |
片使能 |
ci_we_cam |
output |
写使能 |
ci_wr_addr_cam[7:0] |
output |
要写入数据的地址 |
cam_busy_ci |
input |
Cam忙,表示正在往cam写数据 |
cam_match_ci |
input |
匹配命中 |
cam_match_addr_ci[7:0] |
input |
匹配命中地址 |
与drop模块的接口信号 |
||
ci_vld_drop |
output |
查找结果有效,每个数据包对应一个周期 |
ci_drp_drop |
output |
丢包 |
ci_addr_drop[7:0] |
output |
匹配到的Cam地址 |
ci_dat_drop[3:0] |
output |
处理方式,留做扩展功能用 |
5.5 CAM模块(cam) 5.5.1. 功能说明
宽度为32位,深度为256,可以对32位的匹配关键字进行匹配,并返回给cam_if模块匹配的结果和匹配地址 。
5.5.2. 模块框图5.5.3. 模块接口信号定义
说明:功能描述为空的信号表示已经在前面模块中描述过
接口信号 |
方向 |
功能描述 |
全局信号 |
||
sys_clk |
input |
系统时钟, 25M |
与cam_if模块的接口信号 |
||
ci_cmp_din_cam[31:0] |
input |
|
ci_din_cam[31:0] |
input |
|
ci_en_cam |
input |
|
ci_we_cam |
input |
|
ci_wr_addr_cam[7:0] |
input |
|
cam_busy_ci |
output |
|
cam_match_ci |
output |
|
cam_match_addr_ci[7:0] |
output |
|
5.6 包处理模块(drop) 5.6.1. 功能说明
Ø 根据cam_if返回的匹配结果对数据包进行处理
Ø 将转发的数据包数据包数据由32位转换为8位发送给Tri-Mode Ethernet MAC LogiCORE
5.6.2. 模块框图5.6.3. 模块接口信号定义
说明:功能描述为空的信号表示已经在前面模块中描述过
接口信号 |
方向 |
功能描述 |
全局信号 |
||
sys_clk |
input |
系统时钟, 25M |
sys_rst_n |
input |
系统复位信号, 低电平有效 |
与key_gen模块的接口信号 |
||
key_sop_drop |
input |
|
key_eop_drop |
input |
|
key_dat_drop[31:0] |
input |
|
key_mod_drop[1:0] |
input |
|
key_dvld_drop |
input |
|
drop_pb_key |
output |
|
与cam_if模块接口信号 |
||
ci_vld_drop |
input |
|
ci_drp_drop |
input |
|
ci_addr_drop[7:0] |
input |
|
ci_dat_drop[3:0] |
input |
|
与conf_if模块的接口信号 |
||
conf_wr_drop |
input |
|
conf_rd_drop |
input |
|
conf_clr_drop |
input |
|
conf_addr[3:0] |
input |
|
conf_wdat[15:0] |
input |
|
drop_rdat_conf[15:0] |
output |
|
与tri_mode_eth_mac_locallink模块的接口信号 |
||
wr_data[7:0] |
output |
|
wr_sof_n |
output |
|
wr_eof_n |
output |
|
wr_src_rdy_n |
output |
|
wr_dst_rdy_n |
input |
|
5.7 处理器配置模块(conf_if) 5.7.1. 功能说明
从ppc单元接收配置信息,对fpga内部逻辑进行配置。包括配置len_cal、cam_if、drop模块。
5.7.2. 模块框图5.7.3. 模块接口说明
说明:功能描述为空的信号表示已经在前面模块中描述过
接口信号 |
方向 |
功能描述 |
全局信号 |
||
sys_clk |
input |
系统时钟, 25M |
sys_rst_n |
input |
系统复位信号, 低电平有效 |
与UC II模块的接口信号 |
||
ppc_ce_n_conf |
input |
|
ppc_we_n_conf |
input |
|
ppc_re_n_conf |
input |
|
ppc_clr_n_conf |
input |
|
ppc_addr_conf[7:0] |
input |
|
ppc_wdat_conf[15:0] |
input |
|
conf_rdat_ppc[15:0] |
output |
|
与len_cal模块的接口信号 |
||
conf_wr_cal |
output |
|
conf_rd_cal |
output |
|
conf_clr_cal |
output |
|
conf_addr[3:0] |
output |
|
conf_wdat[15:0] |
output |
|
cal_rdat_conf[15:0] |
input |
|
与cam_if模块的接口信号 |
||
conf_wr_ci |
output |
|
conf_rd_ci |
output |
|
conf_clr_ci |
output |
|
conf_addr[3:0] |
output |
|
conf_wdat[15:0] |
output |
|
ci_rdat_conf[15:0] |
input |
|
与drop模块的接口信号 |
||
conf_wr_drop |
output |
|
conf_rd_drop |
output |
|
conf_clr_drop |
output |
|
conf_addr[3:0] |
output |
|
conf_wdat[15:0] |
output |
|
drop_rdat_conf[15:0] |
input |
|
LEN_CAL模块
0x00 Reserved*
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
Reserved |
R |
0x0 |
Reserved |
0x01 short packet size*
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
short_pkt_size |
RW |
16’d48 |
Short packet size |
0x02 long packet size*
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
long_pkt_size |
RW |
160’d1536 |
Long packet size |
0x03 short packet number*
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
short_pkt_cnt |
R |
0x0 |
Short packet number |
0x04 long packet number*
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
long _pkt_cnt |
R |
0x0 |
Long packet number |
CAM_IF模块
0x10 Cam write address
Bits |
Name |
Type |
Default Value |
Description |
15:8 |
Reserved |
R |
0x0 |
Reserved |
7:0 |
ci_wr_addr_cam |
RW |
0x0 |
The address of the data to be write to CAM. Must be writen after 0x11-0x12 |
0x11 The data to be write to CAM
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
ci_din_cam[31:16] |
RW |
0x0 |
The data to be write to CAM Sip[31:16]/dip[31:16]/sp |
0x12 The data to be write to CAM*
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
ci_din_cam[15:0] |
RW |
0x0 |
The data to be write to CAM Sip[15:0]/ dip[15:0]/dp |
0x1A Result table control
Bits |
Name |
Type |
Default Value |
Description |
15 |
rst_wea |
RW |
0x0 |
Red and write contol: 1:write 0:read |
14:13 |
Reserved |
R |
0x0 |
Reserved |
12 |
drop |
RW |
0x0 |
Packet drop control. 0:pass 1:drop |
11 |
Sample enable |
RW |
0x0 |
Sample enable control 0:not enable 1:enable |
10:8 |
Reserved |
R |
0x0 |
|
7:0 |
rst_addra |
RW |
0x0 |
The address of the data. |
0x1B mac mask control
Bits |
Name |
Type |
Default Value |
Description |
15:4 |
Reserved |
R |
0x0 |
Reserved |
3 |
sip_mtch_en |
RW |
0x1 |
sip match enable signal |
2 |
dip_mtch_en |
RW |
0x1 |
dip match enable signal |
1 |
sp_mtch_en |
RW |
0x1 |
sp match enable signal |
0 |
dp_mtch_en |
RW |
0x1 |
dp match enable signal. One or more of the four bits can be 1 |
0x1C The sample data
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
sample data |
RW |
0x0 |
Sample enable data If the corresponding bit is 1, and the sample is enabled(bit 11 of register 1A is 1), the packet will be droped. The bit is determined by: sp[15:12]^sp[11:8]^sp[7:4]^sp[3:0] dp[15:12]^dp[11:8]^dp[7:4]^dp[3:0] |
FLOW_STS模块
0x30 sd_slect register
Bits |
Name |
Type |
Default Value |
Description |
15:4 |
Reserved |
R |
0x0 |
Reserved |
3:0 |
sd_slect |
WR |
0x0 |
Select what to be statistic: 0001:select sip, 0010:select dip, 0100:select sp, 1000:select dp Only one of the four register should be 1. If more of them is 1, then the higher bit have a higher priority. If all of them are 0, then sip is selected. |
0x31 init_start register
Bits |
Name |
Type |
Default Value |
Description |
15:1 |
Reserved |
R |
0x0 |
Reserved |
0 |
init_start |
W |
0x0 |
Initial the statistic memory Must be write after system started Write 1or 0 both mean start. |
0x32 ppc_read_addr register
Bits |
Name |
Type |
Default Value |
Description |
15 |
ppc_rd_start |
W |
0x0 |
Ppc start to read statistic register. Ppc must write this register first before read statistic Write 1or 0 both mean start. |
14:8 |
Reserved |
R |
0x0 |
Reserved |
7:0 |
ppc_addr |
W |
0x0 |
Ppc read address register |
0x33 start time register
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
time[31:16] |
RW |
0x0 |
Start time of the stream |
0x34 start time register
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
time[15:0] |
RW |
0x0 |
Start time of the stream The time unit is: 42ms |
0x35 byte count register
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
byte_cnt[26:11] |
RW |
0x0 |
byte count of the stream |
0x36 byte count and packet count register
Bits |
Name |
Type |
Default Value |
Description |
15:5 |
byte_cnt[10:0] |
RW |
0x0 |
byte count of the stream |
4:0 |
pkt_cnt[20:16] |
RW |
0x0 |
packet count of the stream |
0x37 packet count register
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
byte_cnt[15:0] |
RW |
0x0 |
Packet count of the stream |
0x38 current time register
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
curt_time[31:16] |
RW |
0x0 |
Current time of the stream |
0x39 current time register
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
curt_time[15:0] |
RW |
0x0 |
current time of the stream The time unit is: 42ms |
MAC_IF模块
0x40 MAC core configure data
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
tieemacconfigvec[15:0] |
RW |
0x0 |
MAC core configure data. For more detail, please refer to page 93 of Xilinx document: tri_mode_eth_mac_ug138.pdf |
0x41 MAC core configure data
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
tieemacconfigvec[31:16] |
RW |
0x0 |
MAC core configure data. For more detail, please refer to page 93 of Xilinx document: tri_mode_eth_mac_ug138.pdf |
0x42 MAC core configure data
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
tieemacconfigvec[47:32] |
RW |
0x0 |
MAC core configure data. For more detail, please refer to page 93 of Xilinx document: tri_mode_eth_mac_ug138.pdf |
0x43 MAC core configure data
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
tieemacconfigvec[63:48] |
RW |
0x0 |
MAC core configure data. For more detail, please refer to page 93 of Xilinx document: tri_mode_eth_mac_ug138.pdf |
0x44 MAC core configure data
Bits |
Name |
Type |
Default Value |
Description |
15:0 |
tieemacconfigvec[66:64] |
RW |
0x0 |
MAC core configure data. For more detail, please refer to page 93 of Xilinx document: tri_mode_eth_mac_ug138.pdf |