longtime 发表于 2010-6-28 00:00:16

这段verilog代码是什么意思,并解释一下

module seqdet(x,z,clk,rst,state);            
input x,clk,rst;                  
output z;                     
output state;                  
reg state;                  
wire z;                     
parameter IDLE = `d0,A=`d1,B=`d2,            
                                       C=`d3,D=`d4,            
                                       E=`d5,F=`d6,            
                                       G=`d7;               
                                                         
assign z = ( state==E && x==0)?1:0;            
                        
always @( posedge clk)                  
    if( !rst)                        
                begin                  
                        state <= IDLE;               
                end                     
    else                     
                casex(state)                  
                  IDLE: if( x==1)               
                                        begin               
                                          state <= A;            
                                        end                                    
                  A:      if( x==0)               
                                        begin               
                                          state <= B;            
                                        end                                    
                  B:      if( x==0)               
                                        begin               
                                          state <= C;            
                                        end                                 
                              else                  
                                        begin               
                                          state <= F;            
                                        end                     
                  C:      if( x==1)               
                                        begin               
                                          state <= D;            
                                        end                                 
                              else                  
                                        begin               
                                          state <= G;            
                                        end                     
                  D:      if(x==0)               
                                        begin               
                                          state <= E;            
                                        end                     
                              else                  
                                        begin               
                                          state <= A;            
                                        end                                 
                  E:      if( x==0)               
                                        begin               
                                          state <= C;            
                                        end                                       
                              else                  
                                        begin               
                                          state <= A;            
                                        end                     
                  F:      if( x==1)               
                                        begin               
                                          state <= A;            
                                        end                                 
                              else                  
                                        begin               
                                          state <= B;            
                                        end                                 
                  G:      if( x==1)               
                                        begin               
                                          state <= F;            
                                        end                           
                  default:state = IDLE;            
                  endcase                  
endmodule

usb 发表于 2010-6-28 01:35:45

Just one example for the Mealy FSM

ANG 发表于 2010-6-28 03:29:24

就是一个米利机的例子(翻译楼上的。)

tim 发表于 2010-6-28 04:46:03

Just one example for the Mealy FSM(translation from the upstairs)

UFO 发表于 2010-6-28 05:10:03

我当然知道这是一个状态机。<br>
难道你看一段东东只要知道它是什么就完了吗?<br>
那看代码还有什么意思,不用看我就知道它是代码...

ICE 发表于 2010-6-28 05:30:18

楼上的还是没有理解别人的意思啊<br>
<br>
这就是个简单的FSM, 你可以看做是例子, 也可以看作是一个某某功能<br>
<br>
但谁都没法说是实现了个什么, 只是凭借几个简单的状态转移过程,你就想知道具体的实物是什么, 那不太现实.<br>
<br>
就好像说, 1+1 是什么意思那?

VVC 发表于 2010-6-28 07:23:01

你写代码,肯定是用它来实现什么功能.<br>
比如分频,加法器,编码译码什么的.<br>
你看一个core,就只需要知道它是一个core吗?<br>
难道你不会想要知道它是做什么用的,干嘛要这样写.<br>
只有知道它的功能,我们才能了解它的优劣,并加以改进.<br>
为什么我们看到一小段全加器的代码,就马上说他是全加器.<br>
而看到上面的玩意,就只说它是个FSM呢?

UFP 发表于 2010-6-28 09:01:36

不知道你是没理解意思, 还是大家没说清楚<br>
<br>
有些代码看了后确实知道是一个什么功能, 但你给的这段代码,只是几个状态的转移, 我现在说它是个自动取款机某部分的功能都可以.所以大家根本无法给你详细说明.<br>
<br>
你可以参考下一些好的代码. 还有就是常用模块大家都知道, 只要看上几行代码的描述就能知道再说什么了, 而FSM 主要是状态的转移, 里面有组合,有时序逻辑. 不可能一下就知道. 除非你把变量名写好, 有注释, 否则,就算是你自己的写的代码, 过几天也都忘记了.

ANG 发表于 2010-6-28 09:42:54

OK..<br>
谢谢..

HANG 发表于 2010-6-28 10:41:56

这不就是把数列中的10010检测出来么。。。
页: [1] 2 3
查看完整版本: 这段verilog代码是什么意思,并解释一下