verilog 求助!

2019-07-16 01:26发布

本人初学verilog, 用ISE综合遇到点问题,特来寻求帮助!找了半天也没发现错误!module saler(clk,reset,half_yuan,one_yuan,out);
input clk,reset,half_yuan,one_yuan;
output reg  out;
reg [2:0] state;
parameter idle=0,half=1,one=2,one_half=3,two=4;
always@(posedge clk or posedge reset)
   if(reset)
                 begin
                                out<=0;
                                state<=idle;
                                end
        else  case(state)
                      idle:begin
                                     out<=0;
                                          if(half_yuan) state<=half;
                                          else if(one_yuan) state<=one;
                                          else state<=idle;
                                          end
                                half:begin
                                     out<=0;
                                          if(half_yuan) state<=one;
                                          else if(one_yuan) state<=one_half;
                                          else state<=half;
                                          end
                                one:begin
                                    out<=0;
                                         if(half_yuan)  state<=one_half;
                                         else if(one_yuan) state<=two;
                                         else state<=one;
                  one_half:begin
                           out<=0;
                                          if(half_yuan) state<=two;
                                          else if(one_yuan ) state<=two;
                                          else state<=one_half;
                                          end
                            two:begin
                                     out<=1;
                                          state<=idle;
                                          end
                        default:begin
                                out<=0;
                                          state<=idle;
                                          end
                        endcase
                  
               
       
endmodule



ERROR:HDLCompiler:31 - "E:MIPS2 ensaler.v" Line 50: <one_half> is already declared.
ERROR:HDLCompiler:31 - "E:MIPS2 ensaler.v" Line 56: <two> is already declared.
ERROR:HDLCompiler:806 - "E:MIPS2 ensaler.v" Line 60: Syntax error near "default".
ERROR:HDLCompiler:806 - "E:MIPS2 ensaler.v" Line 64: Syntax error near "endcase".



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
sh151
1楼-- · 2019-07-16 06:25
我看到了一个one:begin配合的end缺省……还有你上面错误的原因是你已经声明了那个变量,后两个说的是在“”附近有一个系统语法错误。我不知你用的啥软件,我自己用的quartus Ⅱ,修改之后,只有几个无关痛痒的警告,修改之后的程序如下:
module saler(clk,reset,half_yuan,one_yuan,out);
input clk,reset,half_yuan,one_yuan;
output reg  out;
reg [2:0] state;
parameter idle=0,half=1,one=2,one_half=3,two=4;
always@(posedge clk or posedge reset)
   if(reset)
                 begin
                                out<=0;
                                state<=idle;
                 end
  else  case(state)
                      idle:begin
                                     out<=0;
                                          if(half_yuan) state<=half;
                                          else if(one_yuan) state<=one;
                                          else state<=idle;
                           end
                      half:begin
                                     out<=0;
                                          if(half_yuan) state<=one;
                                          else if(one_yuan) state<=one_half;
                                          else state<=half;
                           end
                      one:begin
                                    out<=0;
                                         if(half_yuan)  state<=one_half;
                                         else if(one_yuan) state<=two;
                                         else state<=one;
                          end
                      one_half:begin
                                            out<=0;
                                          if(half_yuan) state<=two;
                                          else if(one_yuan ) state<=two;
                                          else state<=one_half;
                               end
                      two:begin
                                     out<=1;
                                          state<=idle;
                          end
                      default:begin
                                     out<=0;
                                          state<=idle;
                              end
          endcase
                  
               
        
endmodule

还有,注意程序素养,配套的关键字要对齐!

sh151
2楼-- · 2019-07-16 09:46
编译结果截图如附件所示
调试.JPG
mk1057493329
3楼-- · 2019-07-16 13:33
是的,加上end之后,ise就不报错了,不过这个错误提示挺误导人的,不过还是谢谢你的帮助!

一周热门 更多>