微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 可置数的减法计数器

可置数的减法计数器

时间:10-02 整理:3721RD 点击:
请教您一个问题,我要做个递减的计数器,就是我可以随时设定计数的值,当设置的值减到0的时候就停止计数,下次计数是我重新设置的值计数! 如何实现设置的值递减到0就停止了,然后我通过外部的IO设置新值然后在开始递减计数啊,我以前设计的是定值计数器,就算是可变的计数器也是递加的计数,我现在不知道如何设置值,同时在减0的时候停止,这时就在等待我的计数值的设定,设定好了又开始递减



    可以在递减到0的时候流出一点时间来LOAD计数值

增加一个 计数器开始计数允许位(en)(此位有效后,就不允许预置数位变化),内部设置一个flag,
可计数 = en & flag ,
!flag =  !en | 计数满



    process(clk_cnt3)
   begin
        if(rising_edge(clk_cnt3))then        
        if(cnt3>X"00000000")then
     en<='1';
     cnt3<=cnt3-'1';
     else
         en<='0';
                      if(cnt33/=cnt3_temp)then      
                         cnt33<=cnt3_temp;
            cnt3<=cnt3_temp;
                      end if;      
     end if;     
           end if;      
   end process;
如果我的cnt3_temp变化,则把cnt3_temp放入cnt3中开始计数,但是我再次设置相同的计数值则不能计数,此事我该怎么处理,应为我现在要求只要cnt3_temp设置大于0的数就开始计数,等cnt3减到0停止,如果我cnt_temp有值输入,就算和上次的值是一样的也要计数,计完则停止,有输入开始,不管cnt3_temp是什么值,大于0就行,现在上面的代码是输入不同的值开始计数,请问该怎么设计



     process(clk_cnt3)
   begin
        if(rising_edge(clk_cnt3))then        
        if(cnt3>X"00000000")then
     en<='1';
     cnt3<=cnt3-'1';
     else
         en<='0';
                      if(cnt33/=cnt3_temp)then      
                         cnt33<=cnt3_temp;
            cnt3<=cnt3_temp;
                      end if;      
     end if;     
           end if;      
   end process;
如果我的cnt3_temp变化,则把cnt3_temp放入cnt3中开始计数,但是我再次设置相同的计数值则不能计数,此事我该怎么处理,应为我现在要求只要cnt3_temp设置大于0的数就开始计数,等cnt3减到0停止,如果我cnt_temp有值输入,就算和上次的值是一样的也要计数,计完则停止,有输入开始,不管cnt3_temp是什么值,大于0就行,现在上面的代码是输入不同的值开始计数,请问该怎么设计

cnt33<=cnt3_temp; ---赋值的方向反了吧?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top