新闻中心

EEPW首页>EDA/PCB>设计应用> 基于FPGA的栈空间管理器的研究和设计

基于FPGA的栈空间管理器的研究和设计

作者: 时间:2010-10-09 来源:网络 收藏

  中断判断逻辑由输入信号INT与标志寄存器位IntNeSTing值决定是否有效。如果有中断发生,则中断栈逻辑有效,中断栈逻辑生成读/写地址,否则读/写地址逻辑有效,生成相应的读/写地址。

本文引用地址://m.amcfsurvey.com/article/191537.htm

  在读/写控制信号有效的情况下,从堆栈地址寄存器组中读出当前任务的地址,经过读/写地址逻辑或中断栈逻辑产生堆栈地址指针,作为HOS 堆的入栈/出栈地址。执行入栈时,在同步时钟和入栈控制信号有效的情况下,中断判断逻辑判断是否存在中断或中断嵌套,如果没有,则由写地址逻辑生成入栈地址;否则由中断栈逻辑生成写地址。同理,执行出栈时,在同步时钟和出栈控制信号有效的情况下,中断判断逻辑判断是否存在中断或中断嵌套,如果没有,则读地址逻辑生成出栈地址;否则中断栈逻辑生成出栈地址。

  3设计

  为了快速、有效地保护被切换任务的信息,并满足自动检验功能的要求,在设计中设计了2个逻辑模块,分别为状态控制逻辑模块和地址产生逻辑模块。状态控制逻辑模块主要生成入栈/出栈控制信号和Used信号,地址产生逻辑模块主要生成有效的入栈/出栈地址。基于对栈空间总体结构工作过程的阐述,在Xilinx公司设计的XUP Virtex II Pro 系列的芯片上设计一个模拟栈空间管理器,模拟管理8个任务,任务栈的深度为64,宽度为16 bit,中断嵌套栈的深度为128,宽度为16 bit,容量为10 KB的堆栈空间。在设计管理器中,保证管理器快速综合,使占用的资源尽可能少,存储单元的选择是关键,该系统采用的是上一个18 KB的Block RAM资源,使用ISE 8.2i提供的双端口RAM存储模块的 IP核。如果选择其他方法,如用触发器和寄存器搭建存储单元,则综合时间长,且占用大量的 Slices资源。

  在实际嵌入式系统应用中,根据系统要求,可计算出栈空间深度和宽度,具体的深度和宽度在VHDL代码中修改即可。

  3.1 状态控制逻辑模块设计

  由于状态标志寄存器的空/满状态标志位决定栈空间入栈/出栈操作,所以如何设计空/满状态标志位是关键。为了保护的数据能正确入栈与出栈,防止存储器出现向上溢出或向下溢出,保证在满的情况下,不能进行push操作;在空的状态下,不能进行pop操作。控制信号的产生过程如图4所示。


  在状态控制逻辑模块设计时, prio_int信号驱动4个多路选择器,选择对应状态标志寄存器组中的各位段,分别有full信号值、empty信号值、fcount信号值和intNesting信号值。 empty/full信号和push/pop信号作为组合逻辑输入信号产生相应的push_en/pop_en有效控制信号,该控制信号决定栈空间是否执行入栈/出栈操作。

  在push_en/pop_en控制信号有效的情况下,驱动二进制运算逻辑加/减1,输出运算结果。输出的信号值有3个用途:(1)作为空/满标志状态产生逻辑的输入信号,该信号逻辑产生empty/full信号;(2)写回到fregx对应的fcount位中;(3)作为Used输出信号值,表示当前任务栈或中断嵌套栈的使用情况。



评论


相关推荐

技术专区

关闭