|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 jun_dahai 于 2012-1-17 11:58 编辑
在数字电路中,时钟信号是最常用到的信号,所以时钟发生器(clock generator)也就是最常用到的电路。
用verilog行为级描述时钟发生器时,如果是描述一直存在的时钟信号,那当然很简单了,用always语句,或者forever语句都可以描述出需要的时钟信号;如果描述和使能信号相关的时钟信号,就有点麻烦了,当使能信号从使能状态转变到禁止状态时,会出现不能立刻关断时钟发生器的现象(假设:使能信号禁止状态时,时钟发生器输出低电平):发生在低电平时,表面看不出来;发生在高电平时,就很明显了,看到高电平会持续到它的有效时间结束后才转换为低电平。
下面针对后面一种时钟发生器提出一种解决不能立即关断时钟发生器的verilog行为级描述方法:
- parameter T=10;
- reg clk;
- reg enable;
- always @(*)
- begin : gclk
- clk = 1'b0;
- forever
- begin
- if(enable === 1'b0) disable gclk;
- #(T/2) clk = 1'b1;
- #(T/2) clk = 1'b0;
- end
- end
- always @(*)
- if(enable === 1'b0)
- begin
- disable gclk;
- #0.01 clk = 1'b0;
- end
复制代码
第一个always语句用来跳出clock loop,第二个always语句用来立即关断时钟发生器。
如下图所示:
|
|