首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教 Verilog 任意整数分频的问题!

请教 Verilog 任意整数分频的问题!

我想设计一个0-999之间的任意整数分频器, 分频数count由按键输入对CLK进行分频,下面是我写的一部分程序

reg[15:0] count ;  //按键输入要分频的数字

reg[15:0]countx;   //计数器, 对CLK进行计数, 满足countx==count时输出翻转)

(num[]等数字是输出到七段数码管作为显示用的,显示的分频数与实际分频相差1)

always @(posedge keyclk)        //按键输入处理

5'b00100:                             //count的百位数+1, 到9时回到0
   begin    
    if(num[2]==9)
     begin
     num[2]<=0;
     count<=count-900; 
     end
    else
     begin
     num[2]<=num[2]+1;
     count<=count+100; 
     end
   end
  5'b00010:                                //            count的十位数+1
   begin    
    if(num[1]==9)
     begin
     num[1]<=0;
     count<=count-90; 
     end
    else
     begin
     num[1]<=num[1]+1;
     count<=count+10; 
     end
   end
  5'b00001:                                 //count的个位数+1
   begin    
    if(num[0]==9)
     begin
     num[0]<=0;
     count<=count-9; 
     end
    else
     begin
     num[0]<=num[0]+1;
     count<=count+1; 
     end
   end
   
  default:
    begin
    count<=0;
    end
  endcase

always @(posedge clk)

     if(countx==count)

         outdata<=~outdata;       //计数满, 输出翻转

         countx<=0;                  //计数器清零

    else

        countx<=countx+1;

  程序编译没有错误, 但是下载到芯片的时候好像countx==count不起作用, 输出的频率总是2分频

请问各位大侠, 怎么样设计一个任意整数分频器?   有甚么技巧? 

求教! 急啊

      

在仿真的时候看看countx和count这两个量的变化情况
美梦成真-->噩梦降临!

你这个程序如果count=n的话,结果实现的是2n倍的分频。

因为你每个 n 翻转一次,周期就是 2n 嘛

always @(posedge clk)

     if(countx==count)

         outdata<=~outdata;       //计数满, 输出翻转

         countx<=0;                  //计数器清零

    else

        countx<=countx+1;

返回列表