原创 [Verilog HDL 建模技巧 :低级建模 仿顺序操作·思路篇]5 - 开始/完成信号的作用

2010-6-5 13:05 2227 10 10 分类: FPGA/CPLD

2.3“开始信号”和“完成信号”的作用<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


先看看以下一段代码:


 


  


   //独立模块
    alway @ ( posedge CLK or negedge RSTn )
     ......
     else
          case ( cState )
 
              "打扫" : 
               if( 打扫完成 ) nState <= "洗厕所"
              else "发号打扫命令"
             
               "洗厕所" :
              if( 洗厕所完成 ) nState <= "跑腿"
              else "发送洗厕所命令"
 
              "跑腿" :
              ......
 
 /*********************************************************************/           
  
    //低级功能模块1 - 打扫工作
 always @ ( posedge CLK or negedge RSTn )
     ......
     else
         case( cState )
   
               IDLE :
               if( 到扫命令 )  nSate <= "打扫";
              else nState <= IDLE;
 
              "打扫" :
              "执行打扫" ;
              "打扫完毕后报告" ;
              "待命..." nState <= IDLE;
                  ......
 
 /*********************************************************************/
 
    //低级功能模块2 - 洗厕所工作
 always @ ( posedge CLK or negedge RSTn )
     ......
     else if
         case( cState )
             
               IDLE:
              if( 洗厕所命令 )  nSate <= "洗厕所";
              else nState <= IDLE;
             
               "洗厕所" :
              "执行洗厕所" ;
              "洗厕所完毕后报告" ;
              "待命..." nState <= IDLE;
              ......
 
 /*********************************************************************/
 
 //低级功能模块3 - 跑腿工作
 always @ ( posedge CLK or negedge RSTn )
     ......
     else
         case( cState )
             
               IDLE:
              if( 跑腿命令 ) nState <= "跑腿";           
               else nState <= IDLE;
 
              "跑腿" :
                 ......



 


上面的代码可以分成两个部分,一部分是“独立模块”和另一部分是“低级功能模块”。独立模块只有一个则打工模块有三个,而且每一个打工模块仅包含一个功能而已“打扫”,“洗厕所”和“跑腿”.... 



注意: 独立模块不属于低级建模。


 点击看大图


假设老板有一系列的命令要发号:打扫 ==> 洗厕所 ==> 跑腿 



 


当“负责打扫”的“低级功能模块”收到老板的第一号命令“打扫”时,该模块从“待命状态”变成“打扫状态”,此时老板可以睡一觉或者干其他的活儿。该模块便开始“执行打扫任务”,当该模块“打扫完毕”后,就给老板“报告”,然后返回“待命状态”。故老板听到“打扫完成”报告后,就给下一个“低功能模块”发下一号命令 ...


 


在“低级建模”的结构上,为了使不同层次的“低级功能模块”可以协调的工作,“开始信号”和“完成信号”扮演着很重要的角色。在现实中,如果 “打扫 ==> 洗厕所 ==> 跑腿”是一个有“次序的三部曲”,那么老板不可能要员工颠倒次序来干活儿 。老板得按次序,一个一个的命令员工干活。除此之外老板也不可能实时监督员工的工作状况,做老板真的很辛苦,除了“发号”以外,还要干很多事情,所以员工的“完成报告”在某种程度上可以减轻老板的活儿(使编程更简单),毕竟老板也是人,他也有疲惫的时候。


 


接下来的话题便是:“每一个低功能模块仅包含一个功能”。


 


虽然在现实中,确实存在“全能的人类”打扫,洗厕所,跑腿等技能全都集于一身。但是“低级建模”的准则必须遵守。你尝试想象一下,如果一个“低级功能模块”,包含了如上的工作 “打扫 ==> 洗厕所 ==> 跑腿” 或者更多,即不是要把代码写得很长很长 ...


 


所以呀,“低级建模”的准则有它一定的“重要性”(在日后的深入中,你会慢慢了解的)。



 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条