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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6186|回复: 4

[原创] clock generator(verilog code)

[复制链接]
发表于 2012-1-17 11:51:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 jun_dahai 于 2012-1-17 11:58 编辑

在数字电路中,时钟信号是最常用到的信号,所以时钟发生器(clock generator)也就是最常用到的电路。

      用verilog行为级描述时钟发生器时,如果是描述一直存在的时钟信号,那当然很简单了,用always语句,或者forever语句都可以描述出需要的时钟信号;如果描述和使能信号相关的时钟信号,就有点麻烦了,当使能信号从使能状态转变到禁止状态时,会出现不能立刻关断时钟发生器的现象(假设:使能信号禁止状态时,时钟发生器输出低电平):发生在低电平时,表面看不出来;发生在高电平时,就很明显了,看到高电平会持续到它的有效时间结束后才转换为低电平。

      下面针对后面一种时钟发生器提出一种解决不能立即关断时钟发生器的verilog行为级描述方法:
      



  1. parameter T=10;
  2. reg clk;
  3. reg enable;
  4. always @(*)
  5.   begin : gclk
  6.     clk = 1'b0;
  7.     forever
  8.       begin
  9.         if(enable === 1'b0) disable gclk;
  10.         #(T/2) clk = 1'b1;
  11.         #(T/2) clk = 1'b0;
  12.       end
  13.   end

  14. always @(*)
  15.   if(enable === 1'b0)
  16.     begin
  17.       disable gclk;
  18.       #0.01 clk = 1'b0;
  19.     end


复制代码


      第一个always语句用来跳出clock loop,第二个always语句用来立即关断时钟发生器。

      如下图所示:
clock_generator.GIF
发表于 2012-1-17 13:09:40 | 显示全部楼层
貌似用(enable & clk)也可以达到同样的效果。
 楼主| 发表于 2012-1-17 13:36:12 | 显示全部楼层
回复 2# acgoal


    直接在最后一级门控时钟在很多情况下是可以的,不过在多个时钟切换的时候,就可能有点力所不能及了,我也是在做一个项目时,仿真有些test cases时,才不得不用上面我提到的那种方法的。
发表于 2012-1-18 13:35:04 | 显示全部楼层
that's testbech.clock_generator.
Nice~~
 楼主| 发表于 2023-4-25 14:57:06 | 显示全部楼层
本帖最后由 jun_dahai 于 2023-4-25 15:31 编辑




  1. parameter CLK_FREQ = 2;    //Mhz
  2. parameter CLK_PERIOD_HALF = 1000/(CLK_FREQ*2);

  3. parameter CLK_DIS_VAL = 1'b0;

  4. logic clk_en; // 1'bx is treated as 1'b0
  5.               // and it's better to generated by the falling edge of clk

  6. logic clk = CLK_DIS_VAL;
  7. initial begin
  8.     forever begin
  9.         if(clk_en) begin
  10.             clk <= ~clk;
  11.             #CLK_PERIOD_HALF;
  12.         end else begin
  13.             clk <= CLK_DIS_VAL;    // disabled value
  14.             #1ms;                  // starting time
  15.         end
  16.     end
  17. end


复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-5-16 00:42 , Processed in 0.019688 second(s), 8 queries , Gzip On, MemCached On.

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