在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6523|回复: 15

[求助] verilog语言请教

[复制链接]
发表于 2012-4-5 14:32:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
一个自动贩卖机的verilog codes, 1块和5毛两个硬币, 买一个2.5的饮料
总是显示Module contains unmapped components.  The output netlist might not be read back into the system.
请问 这个代码有什么问题呢?谢谢

module softdrink(rst,clk,op_start,coin_val,cancel_flag,
                   hold_ind,charge_ind,drinktk_ind,charge_val);
     input clk,rst;
     input op_start,cancel_flag;
     input [1:0] coin_val;
     output hold_ind;
     output charge_ind;   
     output drinktk_ind;
     output [2:0]charge_val;
     
     reg hold_ind;
     reg charge_ind;   
     reg drinktk_ind;
     reg [2:0]charge_val;
         
     reg[2:0]currentstate,nextstate;
     
     parameter S0=3'b000;
     parameter S1=3'b001;
     parameter S2=3'b010;
     parameter S3=3'b011;
     parameter S4=3'b100;
     parameter S5=3'b101;
     parameter S6=3'b110;
     
        
   
     
     
always@(posedge clk or posedge rst)
     if(rst)
        currentstate<=S0;
     else
        currentstate<=nextstate;
        
always@(rst or currentstate or op_start or cancel_flag or coin_val)
    if(rst)  nextstate=S0;
    else case(currentstate)
       S0:
           if(op_start)
             if(coin_val==2'b01) nextstate=S1;
             else if (coin_val==2'b10) nextstate=S2;
       S1:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S2;
                 else if (coin_val==2'b10) nextstate=S3;
              
       S2:
            if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S3;
                 else if (coin_val==2'b10) nextstate=S4;
       S3:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S4;
                 else if (coin_val==2'b10) nextstate=S5;
       S4:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S5;
                 else if (coin_val==2'b10) nextstate=S6;
       S5:  nextstate=S0;
       S6:   nextstate=S0;
       default:
            nextstate=S0;
      endcase
      
  always@(currentstate)
     if(currentstate==S0)
         hold_ind=1'b0;
     else
         hold_ind=1'b1;
         
  always@(currentstate)
     if((currentstate==S5)||(currentstate==S6))
         drinktk_ind=1'b1;
     else
         drinktk_ind=1'b0;
         
    always@(currentstate or cancel_flag)
     if(currentstate==S0)
             charge_ind=1'b0;
     else if(currentstate==S6)
             charge_ind=1'b1;
           else if(cancel_flag)
                   charge_ind=1'b1;     
               else
                   charge_ind=1'b0;
     
     always@(currentstate or cancel_flag )
       if(currentstate==S0) charge_val=3'b000;
       else if(currentstate==S6)
                charge_val=3'b001;
            else if(cancel_flag)
            begin
              case(currentstate)
                    S1: charge_val=3'b001;
                    S2:charge_val=3'b010;
                    S3:charge_val=3'b011;
                    S4:charge_val=3'b100;
                    default:charge_val=3'b000;
             endcase
            end         
           else
             charge_val=3'b000;     
     
endmodule
发表于 2012-4-5 14:58:57 | 显示全部楼层
回复 1# levisk


    第二个always 列表中把rst拿掉。
 楼主| 发表于 2012-4-5 15:19:32 | 显示全部楼层
回复 2# otogyg


    太感谢了 回头去实验室试试去
 楼主| 发表于 2012-4-6 03:22:58 | 显示全部楼层
回复 2# otogyg


    还是不太行。。。
发表于 2012-4-6 10:10:47 | 显示全部楼层
回复 4# levisk


    你是怎么拿掉的?后面里和rst 有关的语句也要拿掉的。
 楼主| 发表于 2012-4-6 10:24:53 | 显示全部楼层
回复 5# otogyg


    你的意思是把
always@(rst or currentstate or op_start or cancel_flag or coin_val)
    if(rst)  nextstate=S0;
    else case(currentstate)
       S0:
           if(op_start)
             if(coin_val==2'b01) nextstate=S1;
             else if (coin_val==2'b10) nextstate=S2;
       S1:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S2;
                 else if (coin_val==2'b10) nextstate=S3;
              
       S2:
            if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S3;
                 else if (coin_val==2'b10) nextstate=S4;
       S3:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S4;
                 else if (coin_val==2'b10) nextstate=S5;
       S4:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S5;
                 else if (coin_val==2'b10) nextstate=S6;
       S5:  nextstate=S0;
       S6:   nextstate=S0;
       default:
            nextstate=S0;
      endcase


改成这样? 不好意思 刚接触这东西 不太明白

always@(currentstate or op_start or cancel_flag or coin_val)
   

       S0:
           if(op_start)
             if(coin_val==2'b01) nextstate=S1;
             else if (coin_val==2'b10) nextstate=S2;
       S1:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S2;
                 else if (coin_val==2'b10) nextstate=S3;
              
       S2:
            if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S3;
                 else if (coin_val==2'b10) nextstate=S4;
       S3:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S4;
                 else if (coin_val==2'b10) nextstate=S5;
       S4:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S5;
                 else if (coin_val==2'b10) nextstate=S6;
       S5:  nextstate=S0;
       S6:   nextstate=S0;
       default:
            nextstate=S0;
      endcase
发表于 2012-4-6 10:52:34 | 显示全部楼层
回复 6# levisk

always@(currentstate or op_start or cancel_flag or coin_val)
begin
case(currentstate)
       S0:
           if(op_start)
             if(coin_val==2'b01) nextstate=S1;
             else if (coin_val==2'b10) nextstate=S2;
       S1:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S2;
                 else if (coin_val==2'b10) nextstate=S3;
              
       S2:
            if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S3;
                 else if (coin_val==2'b10) nextstate=S4;
       S3:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S4;
                 else if (coin_val==2'b10) nextstate=S5;
       S4:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S5;
                 else if (coin_val==2'b10) nextstate=S6;
       S5:  nextstate=S0;
       S6:   nextstate=S0;
       default:
            nextstate=S0;
      endcase
end


还有你的so状态里是一个if还是两个if语句?
发表于 2012-4-6 11:06:56 | 显示全部楼层
回复 6# levisk

建议你写成这样:


always@(*)
begin
case(currentstate)
       S0:
           if(op_start) (加上你的语句)
             else  if(coin_val==2'b01) nextstate=S1;
             else if (coin_val==2'b10) nextstate=S2;
       S1:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S2;
                 else if (coin_val==2'b10) nextstate=S3;
              
       S2:
            if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S3;
                 else if (coin_val==2'b10) nextstate=S4;
       S3:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S4;
                 else if (coin_val==2'b10) nextstate=S5;
       S4:
           if(cancel_flag) nextstate=S0;
            else if(coin_val==2'b01) nextstate=S5;
                 else if (coin_val==2'b10) nextstate=S6;
       S5:  nextstate=S0;
       S6:   nextstate=S0;
       default:
            nextstate=S0;
      endcase
end

这个星号verilog2001是支持的。
 楼主| 发表于 2012-4-6 11:54:16 | 显示全部楼层
回复 8# otogyg


    太感谢了。。好心人。。 我们学校用的是个叫synopsys的软件 代码实在不太会改
发表于 2012-4-6 12:01:06 | 显示全部楼层
Always中,if-else语句没写全产生了LATCH!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-12 13:19 , Processed in 0.028043 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表