版权归原作者所有,如有侵权,请联系我们

[科普中国]-地址生成

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

地址生成链路本地地址的产生

每当接口启动时节点就形成一个链路本地地址。一个接口可以在下列任何一个事件之后被启动:

(1)接口在系统启动时刻被初始化;

(2)接口在暂时的接口故障或被系统管理暂时禁用之后重新启动;

(3)接口第一次被连在链路上; .

(4)接口被系统管理通过管理手段禁用之后被启动。

链路本地地址是将众所周知的(适当长度的)链路本地前缀FE80::0加在接口标识符前边形成的。若接口标识符的长度为N比特,则接口标识符取代链路本地前缀最右边的N个“0”比特。若接口标识符长度超过118比特,则自动配置失败,需要进行手工配置。注意接口标识符一般为64比特长,并且基于EUI.64标识符。

链路本地地址具有无限首选并有效的生存期,永远不会过期失效。

全局和站点本地地址的产生全局和站点本地地址是通过将接口标识符附加到一个适当长度的前缀之后构成的。前缀是从路由器宣告中包含的前缀信息选项中得到的。全局和站点本地地址的产生以及其他参数的配置应可在本地完成。然而,下文描述的处理必须是缺省启用的。

(1)路由器宣告处理

路由器宣告包含了两个标识,即“M”比特和“0”比特。“M”比特为“管理地址配置”标记,指明主机是否使用无状态自动配置以外的管理(有状态)协议来获得地址。“0”比特为“其他有状态配置”标记,标识指明主机是否应该使用被管理的(有状态)协议来获得除地址外的其他信息。

主机接收到一个合法的路由器宣告后,将宣告信息的M比特值拷贝到ManagedFlag中,如果ManagedFlag的值由FALSE变为TRUE,而且该主机尚未运行有状态地址自动配置协议,则应该调用有状态地址自动配置协议,请求得到地址信息和其他信息。如果ManagedFlag的值由TRUE变为FALSE,主机应继续运行有状态地址自动配置,也就是说,ManagedFlag值的改变对主机的运行没有任何影响。如果该标识位的值没有改变,则主机不做任何动作。尤其需要说明的是。如果一台主机在先前宣告中已经启用了有状态协议,则不需要重新调用有状态地址配置协议。

路由宣告的0标志位以类似的方式处理。主叫将0标志位的值拷贝到OtherConfigFlag中,如果OtherConfigFlag的值由FALSE变为TRUE,主机就应该调用有状态自动配置协议来请求得到信息(如果ManagedFlag的值为FALSE,则不包括地址信息);如果OtherConfigFlag的值由TRUE变为FALSE,则主机继续运行有状态地址自动配寅协议,也就是说,0标志位对OtherConfigFlag值的改变没有影响。如果该标志位的值没有变化,则不采取任何动作。尤其需要说明的是,如果一台主机在先前宣告中已经启用了有状态协议,则不需要重新调用有状态地址配置。

路由器宣告也包含零个或多个前缀信息选择项,这些选择项的内容包括无状态地址自动配置生成站点本地地址和全局地址所使用的信息。前缀信息选项域中的“自治地址配置”标记指明该前缀信息是否可用于地址的自动配置。如果可以,选项域中还要包括一个子网前缀,同时指明用该前缀生成的地址的生存期。

对于路由宣告中的每个前缀信息选项进行如下处理:

①如果没有设置“自治地址配置”标记,则忽略前缀信息选项。

②如果前缀是链路本地前缀,则忽略前缀信息选项。

③如果推荐生存期大于有效生存期,则忽略前缀信息选项,在这种情况下,节点可能会记录一个系统管理差错。

④如果宣告的前缀与地址列表中的前缀不符,并且其有效生存期不是0。则在列表中由这个宣告的前缀和链路接口标识符按下列格式创建一个地址。

如果前缀长度与接口标示符长度的和不等于128比特,则必须忽略前缀信息选项。此时应记录一个系统管理差错。系统管理器应负责确保路由宣告中包含的前缀长度与该链路类型的接口标示符的长度匹配。注意,接口标示符的典型长度是64比特,它是基于“地址结构”中描述的EUI一64标示符的。

如果成功的创建了一个地址,主机将其加入分配给该接口的地址列表中,并在前缀信息选项中初始化其指定的和有效生存期的值。

⑤如果宣告的前缀与该接口相关的地址列表中的自动配置地址(即通过有状态或无状态地址自动配置获得的地址)前缀向匹配,则根据收到的宣告中的有效生存期和前面自动配置的地址的生存期(下文中称作存储的生存期)采取动作:

如果收到的生存期大于2小时,或者大于存储的生存期,则更新相应地址存储的生存期。

如果存储的生存期小于或等于2小时,并且收到的生存期小于或等于存储的生存期,除非获得该前缀信息选项的路由宣告是已被授权的,否则忽略该前缀。

如果路由宣告一已授权,则存储的生存期应设置成接收到的选项中的生存期。

如果不是上述两种情况,则重新设置相关地址中存储的生存期为2小时。

上述规则防止了带有非常小有效生存期前缀的伪造宣告的业务攻击。如果没有上述规则,仅一个包含具有很短生存期的前缀信息选项的未授权宣告可能会导致所有节点的地址过早失效。上述规则确保合法的宣告(它们是定期发送的)在真正生效前将生存期短的宣告删掉。

(2)地址生存期过期

当指定的生存期过期后,一个指定的地址将失效。在当前的通信中,一个失效的地址应该继续当做一个源地址,但如果有一个可用的替换(没有失效的)地址并且其范围足够时,失效地址不能用于新的通信。既然失效地址仍然是接口的一个合法地址。IP层和更高层(如TCP和UDP)必须继续接受目标是该失效地址的数据包。在实际操作中可能会避免新的通信使用已失效的地址,但是系统管理必须有能力删除该设备,并在系统中默认该设备已删除。

当有效的生存期过期后,一个地址和它相关的接口就变为无效。失效的地址不能当成通信中的源地址,也不能当做接收接口的目标地址。1

地址生成模块地址生成模块负责生成后继指令的地址。模块工作时会首先根据offset字段的值生成一个16位的偏移地址,然后根据指令译码模块和分支处理模块给出的控制信号进行判断:如果执行分支跳转,则当前PC值与16位偏移地址相加;如果跳转不执行或不是分支转移类指令,则当前PC值加2(指令宽度16位,存储器按字节编址);如果当前指令为子程序调用或子程序返回指令,则后继指令地址取决于ALU的运算结果。地址生成模块计算产生的结果发送至程序存储器的地址端口,作为下一条指令的地址。实现地址生成模块的Verilog HDL代码如右图程序P10-4所示。2

地址生成单元地址生成单元的功能是提供操作数的地址来进行DSP操作。由于很多指令(如乘法指令)在执行时需要多个的操作数,所以地址生成单元要工作得足够快从而在指令执行时间要求的约束内提供地址。

此外,在DSP实现中,地址生成单元可能需要执行一些自身的计算,从而到达操作数地址。这是因为需要一些不同类型的间接寻址方式以及特殊寻址方式,如循环寻址方式和位倒序寻址方式。

为了执行指定寻址方式所需的计算,需要在DSP实现中提供一个具有其独立算术单元的地址生成单元。这样就消除了主ALU的地址计算负担,从而使得它能够更加有效地运行。

地址的产生通常包括下面的某种操作:

(1)从立即操作数、寄存器或内存单元获取新值。

(2)对当前地址递增或递减。

(3)当前地址加上或减去一个偏移量。

(4)当前地址加上或减去一个偏移量,将新地址与循环寻址方式下的限制相比较,并根据循环寻址方式算法产生一个新地址。

通过位倒序寻址方式算法从当前地址产生新地址。

执行上述操作的必要硬件包括:ALU;存储当前值、偏移量以及新值的寄存器;存储环形缓冲器限制的寄存器;实现循环寻址方式的逻辑;实现位倒序寻址方式的逻辑。右图给出了一个典型的寻址单元示意图。3

地址生成器根据控制器的要求,地址生成器需要从0向上计数到16(滤波器阶数)。乘法一累加器块使用地址生成器来访问系数储存器和样点储存器。

地址信号是unsigned类型,计数范围在样点储存器和系数储存器范围内。它的位宽由类属参数counter-bits控制:

signal address:unsigned(counter­­­­_bits-1 downto 0);

地址生成器是一个简单的计数寄存器,当禁用时,计数寄存器的值保持,当启用时,向上计数。它有一个同步复位,将地址设置为零:

process

begin

wait until ris ing_edge(clock);

if address-clear = ‘1’ then

address ‘0’ );

elsif address_counting = ‘1’ then

address

end if;

end process;

这个计数器由两个控制信号控制,这两个信号由控制器生成。对于地址计数器,当到达范围的最大值时,不需要停止计数;完成乘法累加计算后,控制器禁用address_counting,计数停止。