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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4390|回复: 14

大家看看我的verilog 程序那里错了

[复制链接]
发表于 2007-5-25 15:20:31 | 显示全部楼层 |阅读模式

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

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

x
module speed(fp,reset,speed0,speed1,speed2,speed3);
   input fp;
   input reset;
   output[3:0] speed0;
    reg[3:0]  speed0;
    output[3:0]  speed1;
     reg[3:0]  speed1;
     output[3:0]  speed2;
     reg[3:0]  speed2;
    output[3:0]  speed3;
     reg[3:0]  speed3;
   
     reg c1;
     reg c2;
     reg c3;
     always @(reset or fp)
     begin :spd0
         if (reset==1'b1)
        begin
          speed0<=4'b0000;
          speed1<=4'b0000;
          speed2<=4'b0000;
          speed3<=4'b0000;
          c1<=1'b0;
          c2<=1'b0;
          c3<=1'b0;
         end
       else if(fp==1'b1)
          begin
           if(speed0==4'b1001)
            begin
           speed0<=4'b0000;
          c1<=1'b1;
          end
            else
              begin
                speed0<=speed0+1;
                 c1<=1'b0;
              end
           end
          end
     
always @(c1)
      begin:spd1
        if (c1==1'b1)
        begin
          if (speed1==4'b1001)
         begin
           speed1<=4'b0000;
          c2<=1'b1;
           end
            else
           begin
               speed1<=speed1+1;
                c2<=1'b0;
                  end
                end
               end

    always @(c2)
       begin:spd2
         if(c2==1'b1)
           begin
            if(speed2==4'b1001)
              begin
            speed2<=4'b0000;
               c3<=1'b1;
            end
            else
           begin
               speed2<=speed2+1;
                c3<=1'b0;
               end
           end
          end
  
always @(c3)
       begin:spd3
         if(c3==1'b1)
           begin
            if(speed3==4'b1001)
              begin
            speed3<=4'b0000;
              end
              else
                    begin
     speed3<=speed3+1;
            end
           end
          end
    endmodule

关于转速检测和报警的设计 用计数器完成  但是有错误 不知道那个大侠给修改以下
十分感谢
 楼主| 发表于 2007-5-25 15:22:07 | 显示全部楼层
请大家帮帮忙
 楼主| 发表于 2007-5-25 16:26:08 | 显示全部楼层
拜托了
发表于 2007-5-26 00:04:19 | 显示全部楼层
ms是第一个always的敏感量得不到激发 所以所有的always只能走一次 不能实现持续加速到限定值
发表于 2007-5-26 10:26:27 | 显示全部楼层
麻烦把你的主要信号的含义和这个模块的功能说一下,大家才好帮忙啊。
发表于 2007-5-26 17:28:22 | 显示全部楼层
module speed(fp,reset,speed0,speed1,speed2,speed3);
   input fp;
   input reset;
   output[3:0] speed0;
    reg[3:0]  speed0;
    output[3:0]  speed1;
     reg[3:0]  speed1;
     output[3:0]  speed2;
     reg[3:0]  speed2;
    output[3:0]  speed3;
     reg[3:0]  speed3;
   
     reg c1;
     reg c2;
     reg c3;
always @(reset or fp or c1 or c2 or c3)
begin
     begin :spd0
         if (reset==1'b1)
        begin
          speed0<=4'b0000;
          speed1<=4'b0000;
          speed2<=4'b0000;
          speed3<=4'b0000;
          c1<=1'b0;
          c2<=1'b0;
          c3<=1'b0;
         end
       else if(fp==1'b1)
          begin
           if(speed0==4'b1001)
            begin
           speed0<=4'b0000;
          c1<=1'b1;
          end
            else
              begin
                speed0<=speed0+1;
                 c1<=1'b0;
              end
           end
          end
     
      begin:spd1
        if (c1==1'b1)
        begin
          if (speed1==4'b1001)
         begin
           speed1<=4'b0000;
          c2<=1'b1;
           end
            else
           begin
               speed1<=speed1+1;
                c2<=1'b0;
                  end
                end
               end

       begin:spd2
         if(c2==1'b1)
           begin
            if(speed2==4'b1001)
              begin
            speed2<=4'b0000;
               c3<=1'b1;
            end
            else
           begin
               speed2<=speed2+1;
                c3<=1'b0;
               end
           end
          end
  
       begin:spd3
         if(c3==1'b1)
           begin
            if(speed3==4'b1001)
              begin
            speed3<=4'b0000;
              end
              else
                    begin
     speed3<=speed3+1;
            end
           end
          end
end
    endmodule

这个可以通过MAX+PLUS11的test,至于能否实现你想要的功能就不知道了.
你的代码错误的原因是把硬件编程语言当作软件语言来写了.verilog中,begin和end之间的语句是从上到下顺序执行的,但之外的都是并行执行的.
你原来的代码执行的时候,当第一个触发条件满足,将给c1赋值,c1出现了变化则第二个触发条件满足了,不等你第一部分begin 和end之间的代码执行完就开始执行第二个触发条件里的语句了,这样一来这两块语句中都有给speed1赋值的语句,所以会报错说不能给speed1赋超过一个的值.
修改后的代码把以前的几个模块都用begin 和end框起来了,这样它们就能顺序执行,不会并发的给speed1后其它赋值了.
我也是初学者,大家多多交流.我的邮箱是:rsail@126.com
发表于 2007-5-27 12:09:32 | 显示全部楼层
描述总是要清楚呀
 楼主| 发表于 2007-5-27 21:33:34 | 显示全部楼层
我的功能就是实现转速检测功能,我用的计数器  因为气轮机的最大转速就3600左右速所以需要在四个数码管上显示
我就是用的计数器的清零 进位  计数些的
发表于 2007-5-28 22:12:10 | 显示全部楼层
看看  学学 啊
发表于 2007-6-15 11:56:13 | 显示全部楼层
看看学学啊!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-17 07:36 , Processed in 0.045124 second(s), 8 queries , Gzip On, Redis On.

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