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

[09-12 18:35:36]   来源:http://www.88dzw.com  EDA/PLD   阅读:8899

文章摘要:3 栈空间管理器设计为了快速、有效地保护被切换任务的信息,并满足自动检验功能的要求,在栈空间管理器设计中设计了2个逻辑模块,分别为状态控制逻辑模块和地址产生逻辑模块。状态控制逻辑模块主要生成入栈/出栈控制信号和Used信号,地址产生逻辑模块主要生成有效的入栈/出栈地址。基于对栈空间管理器总体结构工作过程的阐述,在Xilinx公司设计的XUP Virtex II Pro 系列的芯片上设计一个模拟栈空间管理器,模拟管理8个任务,任务栈的深度为64,宽度为16 bit,中断嵌套栈的深度为128,宽度为16 bit,容量为10 KB的堆栈空间。在设计管理器中,保证管理器快速综合,使占用FPGA的资源尽

基于FPGA的栈空间管理器的研究和设计,标签:eda技术,eda技术实用教程,http://www.88dzw.com

  3 栈空间管理器设计

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

  在产生empty、full信号逻辑模块设计时,采用了对输入信号的每一位进行组合逻辑判断的方法,使该信号分两路,一路作为与门组合逻辑的输入信号产生full信号。如果输入信号的每一位都为1, 则full信号置1,其他情况置0;另一路作为或门非组合逻辑的输入信号产生empty信号。如果输入信号的每一位都为0, 则empty置1,其他情况置0。在整个逻辑模块设计中,采用组合逻辑设计,目的是缩短工作时延,提高系统工作频率。

  3.2 地址产生逻辑模块设计

  堆栈地址指针SP决定了堆栈空间单元的数据正确入栈和出栈,堆栈地址指针SP的获得在于如何驱动读/写逻辑模块和中断栈模块。为了确保被保护数据的有效性和实时性,防止出现不确定状态,须在时序同步的状态下,对数据进行操作,如图5所示。


  在地址产生逻辑设计时,先对堆栈地址寄存器组赋初值,该模拟系统管理8个任务,有9个堆栈地址寄存器,分别为8个任务堆栈地址寄存器和1个中断嵌套栈堆栈地址寄存器。

  当任务优先级Prio信号和中断使能int_en信号同时驱动多路选择器时,堆栈地址指针SP从堆栈地址寄存器组中选择存放在Pregx中的当前任务的地址,在设计的栈空间管理器中,SP指向栈空间的下一个存储单元的地址。如果入栈控制信号有效,则SP作为栈空间的寻址地址,写入数据,SP加1;如果出栈控制信号有效,则SP减1,改变后的SP值作为栈空间的寻址地址,读出数据。操作完成后,改变后的SP值写回到对应的堆栈地址寄存器组Pregx中。

上一页  [1] [2] [3]  下一页


Tag:EDA/PLDeda技术,eda技术实用教程EDA/PLD
分类导航
最新更新
热门排行