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

2010-6-5 13:05 1577 0 分类: 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;
 
              "跑腿" :
                 ......



 


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



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


 点击看大图


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



 


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


 


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


 


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


 


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


 


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



 

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
akuei_2_550826815 2011-10-22 18:26
Verilog的私私细语 - 时钟化和信号的长度
目录 第2章 时钟化和信号的长度 2.01 一个时钟一块数据的概念 2.02 信号时钟化 2.03 深入了解模块的沟通 2.04 电平检测模块的整合(即时事件在时序上的不和谐)      实验八:电...
akuei_2_550826815 2011-09-08 12:47
瞎搞Time Quest 和无责任的笔记 第二章
最近整合篇的第二章的构思和灵感都累积不少了,应该是时候开工了。恰好手头上还有一本笔记还没有写完,就是这本瞎搞TimeQuest的第二章。目录笔者也懒得贴了,看过第一章的同学多少也会猜到第二章的内容是什...
akuei_2_550826815 2011-08-29 18:21
瞎搞Time Quest 和无责任的笔记 第一章
哎呀 ... 潜水了都有一段时间了,这是最近研究的成果和目标。 话说TimeQuest这个东西真的很搞怪呀,做得笔者不得不从其他的方向去研究它。 好了还是切入正题,TimeQuest用作静态时序的工具...
akuei_2_550826815 2011-07-06 17:43
Verilog的私私细语 - 整合的概念
目录         02  第1章  整合的概念          1.01  源码上的整合                   实验一:字面上的整合          1.02  时钟和步骤的定...
akuei_2_550826815 2011-06-22 10:18
VerilogHDL那些事儿 - 建模篇v4 + 时序篇v1
VerilogHDL那些事儿 - 建模篇v4 ====== v4 ====== 主要是修改了大量用法上的BUG和极限的精简内容 https://docs.google.com/leaf?id=0B...
akuei_2_550826815 2011-06-10 13:19
Verilog HDL的礼物 - Verilog HDL扫盲文
目录 02第0章 Verilog HDL语言扫盲文 030.01 各种的HDL语言 030.02 HDL语言的层次 03 0.03 RTL级和组合逻辑级 040.04 Verilog HDL语言真的那...
我要评论
0
0
广告
关闭 热点推荐上一条 /1 下一条