打印

重赏求助:能熟练应用verilog的高手进来看一下

[复制链接]
2327|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunt8707|  楼主 | 2010-10-26 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sunt8707 于 2010-10-26 14:37 编辑

该状态机用case语句实现的代码为:
module fsm_onehot(rst_n,w,clk,z);
  input rst_n,w,clk;
  output reg z;
  
  reg [8:0]state,next_state;
  parameter A=9'b000000001,
            B=9'b000000010,
            C=9'b000000100,
            D=9'b000001000,
            E=9'b000010000,
            F=9'b000100000,
            G=9'b001000000,
            H=9'b010000000,
            I=9'b100000000;
  
  
  always @(posedge clk)
    begin
      if(!rst_n)
        state<=A;
      else
        state<=next_state;
    end
  [email=always@ (state]always @ (state[/email] or A or B or C or D or E or F or G or H or I)
    begin
      case (state)
        A: begin
             if(w)
               next_state <= F;
             else
               next_state <= B;
           end
        B: begin
             if(w)
               next_state <= F;
             else
               next_state <= C;
           end
        C: begin
             if(w)
               next_state <= F;
             else
               next_state <= D;
           end
         D: begin
             if(w)
               next_state <= F;
             else
               next_state <= E;
           end
         E: begin
             if(w)
               next_state <= F;
             else
               next_state <= E;
           end
         F: begin
             if(w)
               next_state <= G;
             else
               next_state <= B;
           end
         G: begin
             if(w)
               next_state <= H;
             else
               next_state <= B;
           end
         H: begin
             if(w)
               next_state <= I;
             else
               next_state <= B;
           end
         I: begin
             if(w)
               next_state <= I;
             else
               next_state <= B;
           end
         default: next_state<=A;
       endcase
    end
  [email=always@(state]always@(state[/email])
    begin
      case (state)
        A: z=1'b0;
        B: z=1'b0;
        C: z=1'b0;
        D: z=1'b0;
        E: z=1'b1;
        F: z=1'b0;
        G: z=1'b0;
        H: z=1'b0;
        I: z=1'b1;
        default: z=1'b0;
      endcase
   
    end   
   
endmodule
请问各位大哥,如何用assign语句实现这个状态机?具体是调用9个触发器来实现这个FSM,用assign语句连接触发器的输入。哪位高手知道,请指点一下,小弟初学,不胜感激!!!

相关帖子

沙发
lelee007| | 2010-10-27 09:47 | 只看该作者
你要赏谁?

哥赏你个窍门,想听不?

使用特权

评论回复
板凳
sunt8707|  楼主 | 2010-10-28 14:08 | 只看该作者
2# lelee007
你有啥窍门,不会又是在骗人吧?。。。。。。

使用特权

评论回复
地板
sxhhhjicbb| | 2011-2-19 22:56 | 只看该作者
你这个是组合电路,用assign一定可以的,用一个?:条件表达式代替吧.

使用特权

评论回复
5
Arwei| | 2011-2-23 16:33 | 只看该作者
所有的电平触发都可以ASSIGN ,将以前的REG 定义换成WIRE。

--------------------------------------------------------------------------------------------------
48元 超高性价比 月销量超200件 SALEAE 24M 8CH 逻辑分析仪  
http://item.taobao.com/item.htm?id=8430104015

使用特权

评论回复
6
dong_dt| | 2012-3-21 16:26 | 只看该作者
兄弟啊,你把状态跳转图画出来,接下来怎么写,就一目了然了。
如果还是不行,再叫我吧。

使用特权

评论回复
7
lxc806705| | 2012-3-22 08:32 | 只看该作者
[email=always@(state]always@(state[/email])
这是啥意思,我没见过

使用特权

评论回复
8
viatuzi| | 2012-3-22 23:19 | 只看该作者
你这个状态机写的有问题啊,下面这个,你再研究一下。最不济nlint的时候,工具应该也会报ERROR的吧
email=always@ (state]always @ (state[/email] or A or B or C or D or E or F or G or H or I)

使用特权

评论回复
9
hegelwks| | 2012-3-22 23:51 | 只看该作者
没看出什么问题呵呵,我也是菜鸟

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

164

帖子

1

粉丝