集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 7927|回复: 20

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

[复制链接]
longtime 发表于 2010-6-28 00:00:16 | 显示全部楼层 |阅读模式
module seqdet(x,z,clk,rst,state);            
input x,clk,rst;                    
output z;                     
output[2:0] state;                  
reg[2:0] 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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-6 12:21 , Processed in 0.074556 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表