集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2221|回复: 2

各位大哥、大姐,看本菜的程序错在那里!!??

[复制链接]
youjianbaba 发表于 2011-1-3 10:16:41 | 显示全部楼层 |阅读模式
module led_shizhong(res,clkin,on_ked,fenout,wei);//时钟
  input clkin,res;
  input [2:0] on_ked;//按键
  output fenout,wei;
  reg [7:0] fenout;//显示出口
  reg [3:0] wei;//led位  
  reg tai,anle,anle1;//功能键按了标记,anle1保证每按一次键只加一个数
  reg shan;//闪烁标记
  reg [25:0] con;//分频计数
  reg [21:0] con1;
  reg [5:0] miao;//秒计数
  reg miaoshan;//秒点闪烁
  reg [5:0] weishu [1:0];//小时和分钟寄存器
  reg [7:0] zibiao [9:0];//字表寄存器组
  
  always @ (posedge res or posedge clkin)
   begin
    if(res)
      begin
        con<=0;        
        //fenout<=8'hFF;
        //wei=0; // 初始化字段
        zibiao[0]=8'h03;
            zibiao[1]=8'h9F;
            zibiao[2]=8'h25;
            zibiao[3]=8'h0D;
            zibiao[4]=8'h99;
            zibiao[5]=8'h49;
            zibiao[6]=8'h41;
            zibiao[7]=8'h1F;
            zibiao[8]=8'h01;
            zibiao[9]=8'h09;
            weishu[0]=0;
            weishu[1]=0;
            tai=0;       
            shan=0;
      end   
    else
      begin
        if(on_ked==3'b111)
          begin
            anle=0;
            con1=0;
          end
        if(on_ked!=3'b111)
          begin
            if(con1<22'd2000000)
              begin
                con1=con1+1'b1;//防抖延时
              end
            if(con1==22'd2000000)
              begin
                if(on_ked!=3'b111)
                  begin//也可以con1<=22'd2000001;来保证按一次键,但较占空间
                    if(anle==0)//保证每按一次键只加一个数
                      begin
                        anle=1;//确认按键啦
                        anle1=1;//保证每按一次键只加一个数
                      end
                  end
             end
          end
///
        
        if(anle1==1)
          begin
            anle1=0;//保证每按一次键只加一个数
            if(on_ked[0]==1'b0)//功能键按下
              begin
                tai=~tai;
              end
            if(tai==1'b1)
              begin
                if(on_ked[1]==1'b0)//调分
                  begin
                    jifen;        
                  end
                if(on_ked[2]==1'b0)//调时
                  begin
                    jishi;
                  end
              end
          end//
        if(tai==1'b0)//停止闪烁
            begin
              shan=1'b0;
            end
        con=con+1'b1;        
        if(con==26'd40000000)//40MHz晶体,1秒分频,用于计数源
          begin
            con=0;
            miaoshan<=~miaoshan;
            if(tai==1'b1)//数字闪烁
              begin
                shan=~shan;
              end
            miao=miao+1'b1;//计秒
            if(miao==6'd60)
              begin
                miao=0;
                if(tai==1'b0)//未按功能键就走时
                  begin
                    jifen;
                  end
               end
           end
      end
   end


  always(posedge res or posedge clkin)
    begin
      if(res)
        begin        
          fenout<=8'hFF;
          wei=0; // 初始化字段
        end
      else if(!res)
        begin
          case(con[18:17])//用于位扫描
            2'b00:
              begin
                if(shan==1'b0)//第一位数字闪烁,表示进入调时
                  begin                  
                    wei=4'b0111;
                  end
                else
                  begin
                    wei=4'b1111;
                  end
                fenout=zibiao[weishu[0]%4'd10];
              end
            2'b01:
              begin
                wei=4'b1011;
                fenout=zibiao[weishu[0]/4'd10];
              end
            2'b10:
              begin
                wei=4'b1101;
                fenout=zibiao[weishu[1]%4'd10];
                fenout[0]<=miaoshan;//秒点闪烁
              end
            2'b11:
              begin
                wei=4'b1110;
                fenout=zibiao[weishu[1]/4'd10];
              end
          endcase
        end
    end
  task jifen;
    weishu[0]=weishu[0]+1'b1;//分钟
    if(weishu[0]==6'd60)
      begin
        weishu[0]=0;
        if(tai==1'b0)//未按功能键就走时
          begin
            jishi;
          end
      end
  endtask
  task jishi;
    weishu[1]=weishu[1]+1'b1;//小时
    if(weishu[1]==5'd24)
      begin
        weishu[1]=0;
      end   
  endtask           
endmodule

综合时报错:
Error (10170): Verilog HDL syntax error at led_shizhong.v(111) near text "(";  expecting "@", or an identifier, or a system task, or "{", or a sequential statement,
Error (10170): Verilog HDL syntax error at led_shizhong.v(137) near text "<=";  expecting ".", or "["
Error (10112): Ignored module "led_shizhong" at led_shizhong.v(1) due to previous errors
kelly07050505 发表于 2011-1-4 16:49:02 | 显示全部楼层
always(posedge res or posedge clkin)
你少个@啊~~太粗心
加上去编译至少通过了,有没有其他问题就不知道了
hch00789 发表于 2011-1-5 08:56:43 | 显示全部楼层
少了个@,哈哈
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-17 16:36 , Processed in 0.069822 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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