原创 FPGA中的时钟使能(转)

2010-12-12 20:54 3989 15 17 分类: FPGA/CPLD
  时钟使能电路是同步设计的基本电路。在很多设计中,虽然内部不同模块的处理速度不同,但由于这些时钟是同源的,可以将它们转化为单一时钟处理。在ASIC中可以通过STA约束让分频始终和源时钟同相,但FPGA由于器件本身和工具的限制,分频时钟和源时钟的Skew不容易控制(使用锁相环分频是个例外),难以保证分频时钟和源时钟同相,因此推荐的方法是使用时钟使能,通过使用时钟使能可以避免时钟“满天飞”的情况,进而避免了不必要的亚稳态发生,在降低设计复杂度的同时也提高了设计的可靠性。

    带使能端的D触发器,比一般D触发器多了使能端,只有在使能信号ENA有效时,数据才能从D端被打入D触发器,否则Q端输出不改变。


    我们可以用带使能端的D触发器来实现时钟使能的功能。


verilog模型举例


    在某系统中,前级数据输入位宽为8位,而后级的数据输出位宽为32,我们需要将8bit数据转换为32bit,由于后级的处理位宽为前级的4倍,因此后级处理的时钟频率也将下降为前级的1/4,若不使用时钟使能,则要将前级的时钟进行4分频来作后级处理的时钟。这种设计方法会引入新的时钟域,处理上需要采取多时钟域处理的方式,因而在设计复杂度提高的同时系统的可靠性也将降低。为了避免以上问题,我们采用了时钟使能以减少设计复杂度。


例1:采用时钟使能


module clk_en(clk, rst_n, data_in, data_out);
input clk;
input rst_n;
input [7:0] data_in;
output [31:0] data_out;


reg [31:0] data_out;
reg [31:0] data_shift;
reg [1:0] cnt;
reg clken;


always @(posedge clk or negedge rst_n)
begin
   if (!rst_n)
      cnt <= 0;
   else
      cnt <= cnt + 1;
end


always @(posedge clk or negedge rst_n)
begin
   if (!rst_n)
      clken <= 0;
   else if (cnt == 2'b01)
      clken <= 1;
   else
      clken <= 0;
end


always @(posedge clk or negedge rst_n)
begin
   if (!rst_n)
      data_shift <= 0;
   else
      data_shift <= {data_shift[23:0],data_in};
end


always @(posedge clk or negedge rst_n)
begin
   if (!rst_n)
      data_out <= 0;
   else if (clken == 1'b1)
      data_out <= data_shift;
end


endmodule



 时钟使能电路 - xupengee - 此间有山水的博客



 


时钟使能电路 - xupengee - 此间有山水的博客

 例2:采用分频方法


module clk_en1(clk, rst_n, data_in, data_out);
input clk;
input rst_n;
input [7:0] data_in;
output [31:0] data_out;


reg [31:0] data_out;
reg [31:0] data_shift;
reg [1:0] cnt;
wire clken;


always @(posedge clk or negedge rst_n)
begin
   if (!rst_n)
      cnt <= 0;
   else
      cnt <= cnt + 1;
end


assign clken = cnt[1];


always @(posedge clk or negedge rst_n)
begin
   if (!rst_n)
      data_shift <= 0;
   else
      data_shift <= {data_shift[23:0],data_in};
end


always @(posedge clken or negedge rst_n)
begin
   if (!rst_n)
      data_out <= 0;
   else
      data_out <= data_shift;
end


endmodule


 


时钟使能电路 - xupengee - 此间有山水的博客

 


时钟使能电路 - xupengee - 此间有山水的博客

 


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户327900 2013-1-12 09:50

讲的挺好的

用户1698998 2012-12-13 14:14

兄弟 有没有想过下降沿时钟使能的。。。 这样会更好一些!!!
相关推荐阅读
用户1527113 2014-08-25 23:52
锁相环典范 ADF4106 Datasheet 研究 ————相噪、杂散指标研究
Refer输入 ADF4106的Refer要求不严,正弦波方波都可以通吃(不过考虑到防止误计数,还是建议选择正弦波),输入是高阻抗,而且Vp-p只要求0.8V。记得用隔直电容,这样才能保...
用户1527113 2014-08-10 19:17
锁相环典范 ADF4106 Datasheet 研究 ———— 脉冲吞没式计数器
脉冲吞没式分频器 脉冲吞没式分频器(即预分频为P/P+1),有优点,在于它不损耗分辨率 针对我们的普通PLL器件是工作在数百兆的频率的,因为CMOS工艺的原因。 而我们往往需要处理的上GHz级别...
用户1527113 2010-12-26 11:50
Verilog中的任务与函数(转)
任务和函数有助于简化程序,有点类似与Fortran语言的subroutine和function。任务和函数的共同点:1.任务和函数必须在模块内定义,其作用范围仅适用于该模块,可以在模块内多次调用。2....
用户1527113 2010-12-26 10:06
谈谈我对阻塞与非阻塞赋值的看法(一些新手应该注意的问题)
这是在ouravr首发的。。(PS:EDN的图片上传实在是。。。所以先发别处。。)阻塞赋值,非阻塞赋值,说实话,我刚开始也搞了好久,感觉不能深度把握,还有就是一直不明白为什么用always写组合电路时...
用户1527113 2010-12-22 10:31
不收费的钢琴教师
这是我在爱折腾上面翻译的一篇文章,爱折腾网址见下方 爱折腾网址http://www.izheteng.com/diy/midi-piano-instructor.html 原文网址http://www...
用户1527113 2010-12-14 20:58
PCI板卡调试二(驱动,EEProm)
焊完了所有的元件,不容易啊,基本都是0603的元件,头昏眼花的。 洗干净板子,然后开始检查,先检查电源是否和地线短路,我可不想一插电脑上就烧电脑主板,然后检查电源和各个信号线是否短路,避免烧芯片,接着...
EE直播间
更多
我要评论
2
15
关闭 站长推荐上一条 /3 下一条