新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 一种基于FPGA的栈空间管理器的研究和设计

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

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

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

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


  
  在地址产生逻辑设计时,先对堆栈地址寄存器组赋初值,该模拟系统管理8个任务,有9个堆栈地址寄存器,分别为8个任务堆栈地址寄存器和1个堆栈地址寄存器。
  
  当任务优先级Prio信号和中断使能int_en信号同时驱动多路选择器时,堆栈地址指针SP从堆栈地址寄存器组中选择存放在Pregx中的当前任务的地址,在设计的器中,SP指向栈空间的下一个存储单元的地址。如果入栈控制信号有效,则SP作为栈空间的寻址地址,写入数据,SP加1;如果出栈控制信号有效,则SP减1,改变后的SP值作为栈空间的寻址地址,读出数据。操作完成后,改变后的SP值写回到对应的堆栈地址寄存器组Pregx中。
  
  4仿真结果分析
  
  本器容量为10KB,宽度为16bit。在ISE8.2i开发软件中进行了综合和仿真,设计中使用了294个Slices芯片、396个触发器芯片、274个inputLUTs、60个boundedIOBs、1个块BRAMs。
  
  仿真时,输入十进制数的数据,图6为系统时序仿真波形图。

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


  
  (1)当INT无效时,即系统中不存在中断或中断嵌套。在push有效的情况下,置prio信号值为2,data_in信号值分别为32768、57908。仿真时,输出结果为:used信号值分别为1、2,而ostcbstkptr信号值分别为128、129;同理,在pop有效情况下,置prio信号值为2,观察仿真结果为:dout_out信号值分别为32768、57908,used的信号值分别为1、0,ostcbstkptr信号值分别为129、128。由此可得,在无中断处理的条件下,根据任务的优先级prio,按LIFO原则在中写入和读出数据,并且每次的有效操作同时修改当前任务的used和ostcbstkptr信号值。
  
  (2)当INT有效时,即系统中产生中断或存在中断嵌套。在push有效的情况下,置prio信号值为6及data_in信号值为8192,观察仿真结果为:used信号值依次为1、2、3、4,ostcbstkptr信号值依次为576、577、578、579;同理,在pop有效情况下,置prio为6,此时的仿真结果:data_out信号值为8192,used信号值依次输出4、3、2、1,ostcbstkptr信号值依次输出579、578、577、576。由此可得,当系统中产生中断或存在中断嵌套,按LIFO原则在中写入和读出数据,并且每次有效操作同时修改的used和ostcbstkptr的值。



评论


相关推荐

技术专区

关闭