集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2499|回复: 6

多边沿问题

[复制链接]
sunmaster 发表于 2011-4-16 17:09:32 | 显示全部楼层 |阅读模式
各位大侠谁帮我看看这段程序哪有问题啊?提示的错误是下面的always块那的上升沿有问题,但是我看好多参考书上也是这么写的啊!谢谢啦!
module menu(clk,clear,stop,MSH,MSL,SH,SL,MH,ML);
input clk,clear,stop;
output[3:0] MSH,MSL,SH,SL,MH,ML;
reg[3:0] MSH,MSL,SH,SL,MH,ML;
reg count1,count2;
always @(posedge clk)
begin
        if(clear)
        begin
                MSL<=0;
                MSH<=0;
                count1<=0;
        end
        else if(!stop)
                begin
                        if(MSL==9)
                                begin
                                        MSL<=0;
                                        if(MSH==9)
                                                begin
                                                        MSH<=0;
                                                        count1<=0;
                                                end
                                        else
                                                begin
                                                        MSH<=MSH+1;
                                                        count1<=0;
                                                end
                                end
                        else
                                begin
                                        MSL<=MSL+1;
                                        count1<=0;
                                end
                end
end
always @(posedge clear or posedge count1)
begin
        if(clear)
        begin
                SL<=0;
                SH<=0;
                count2<=0;
        end
        if(SL==9)
                begin
                        SL<=0;
                        if(SH==5)
                                begin
                                        SH<=0;
                                        count2<=1;
                                end
                        else
                                begin
                                        SH<=SH+1;
                                        count2<=0;
                                end
                end
        else
                begin
                        SL<=SL+1;
                        count2<=0;
                end
end
always @(posedge clear or posedge count2)
begin
        if(clear)
        begin
                ML<=0;
                MH<=0;
        end
        if(ML==9)
                begin
                        ML<=0;
                        if(MH==5)
                                MH<=0;
                        else
                                MH<=MH+1;
                end
        else
                ML<=ML+1;
end
endmodule
哦十全_至芯学员 发表于 2011-4-17 22:38:24 | 显示全部楼层
always @(posedge clear or posedge count1)
always @(posedge clear or posedge count2)
这两句是错误的表达。always块沿触发,硬件上是个触发器,而触发器只能有一个上升沿触发或者下降沿出发,不能有两个沿触发。always @(posedge clk or negedge rst)这种表达还是可以的。
 楼主| sunmaster 发表于 2011-4-18 17:36:22 | 显示全部楼层
回复 2# 哦十全_至芯学员


    恩,首先感谢您的解答!我说怎么有的例程是那样写的,你说的很对!那我该怎么改写呢?我是想做一个跑表的程序,分了几个块,利用count1的状态来确定百分秒向秒的进位,count2的状态来确定秒位向分的进位,在秒计数那块我想用count1来作为控制信号,不知道这个要实现的话,该如何改写呢?谢谢您啦!我把这一笑部分改为如下这样也还是不行!
always @(posedge clk)
begin
        if(count1)
               begin
                       if(SL==9)
                               ........
                               ........
               end
end
期待您的指导和解答!
哦十全_至芯学员 发表于 2011-4-18 22:09:00 | 显示全部楼层
噢,你说的不行是功能没实现还是编译综合没有通过?
always @(posedge clk)
begin
        if(count1)    //这个count1必须为1后面的语句才执行,而通过看你以上的程序,你的count始终为1
               begin//你应该写错了。你怎样实现跑表思路应该没有问题。只是细节上你好好斟酌。
                       if(SL==9)
                               ........
                               ........
               end
end
哦十全_至芯学员 发表于 2011-4-18 22:10:54 | 显示全部楼层
不好意思上面句话打错了,应改为:  
  if(count1)    //这个count1必须为1后面的语句才执行,而通过看你以上的程序,你的count1始终为0
你应该写错了。你怎样实现跑表思路应该没有问题。只是细节上你好好斟酌。
 楼主| sunmaster 发表于 2011-4-24 12:06:31 | 显示全部楼层
回复 5# 哦十全_至芯学员


    恩,谢谢您啦!问题已经解决了,以后有问题还望您多多指教!
fusion317 发表于 2011-4-28 17:14:33 | 显示全部楼层
always @(posedge clear or posedge count1)
always @(posedge clear or posedge count2)
这两句是错误的 ...
哦十全_至芯学员 发表于 2011-4-17 22:38



    2个上升沿是属于不同的寄存器的也不行吗?我也犯过这个错误,看了你的才明白?楼主改后是不是成功编译了,没有这个错误了?
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-22 23:32 , Processed in 0.089319 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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