需求说明:Verilog设计

内容       :第一部分  门控时钟

                  第二部分  门控时钟和时钟使能的理解(附代码)

来自       :时间的诗


第一部分  门控时钟

原文:http://www.cnblogs.com/qiweiwang/archive/2011/03/17/1987060.html

门控时钟的简介:

组合逻辑中多用门控时钟,一般驱动门控时钟的逻辑都是只包含一个门,如果有其他的附加逻辑,就容易因竞争而产生不希望的毛刺。门控时钟通过一个时能信号控制时钟的开关。当系统不工作时可以关闭时钟,整个系统处于非激活状态,这样就能够在某种程度上降低系统功耗。

  然而,使用门控时钟并不符合同步设计的思想,它可能会影响设计的实现和验证。单纯从功能上看,使用使能时钟替代门控时钟是一个不错的选择;但是使能时钟在使能信号关闭时,时钟信号仍然在工作,它无法像门控时钟那样降低系统的功耗。

  Altera的解决方案:

  对于上升沿有效的系统时钟clk,他的下降沿先把门控时钟打一拍,然后再用这个使能信号和系统时钟clk相与后作为后续电路的门控时钟。

  这样的门控时钟电路很好的解决了组合逻辑常见的一些问题。它避免了毛刺的出现,同时也有效的抑制了亚稳态可能带来的危害。但是从另一个方面来说,如果这个设计的系统时钟占空比不是很稳定,或者输出的使能信号(enable)与时钟信号(clk)的逻辑过于复杂,那么它也会带来一些功能和时序上的问题。总得来说,只要设计者控制好这个设计中时钟占空比和门控逻辑复杂度,他还是比下面这个简单的门控时钟电路方案可行。

第二部分  门控时钟和时钟使能的理解(附代码)

原文:http://www.eefocus.com/chudonganjin/blog/11-08/229940_5b96c.html

门控时钟

时钟使能电路是同步设计的重要基本电路,在很多设计中,虽然内部不同模块的处理速度不同,但是由于这些时钟是同源的,可以将它们转化为单一的时钟电路处理。在FPGA的设计中,分频时钟和源时钟的skew不容易控制,难以保证分频时钟和源时钟同相。故此推荐采用使用时钟使能的方法,通过使用时钟使能可以避免时钟“满天飞”的情况,进而避免了不必要的亚稳态发生,在降低设计复杂度的同时也提高了设计的可靠性。

门控时钟 Verilog示例代码:

input wr_n; //写使能信号,低有效
input cs_n; //片选信号,低有效
input[7:0] db; //输入数据总线
output db_r; //锁存输出
reg db_r; //输入数据寄存器
wire d_clk; //门控时钟信号
assign d_clk = wr_n || cs_n;
always @ (posedge d_clk) //门控时钟上升沿
db_r <= db; //锁存输入数据

RTL Viewer:

组合逻辑中多用门控时钟,一般驱动门控时钟的逻辑都是只包含一个与门(或门)。如果有其它的附加逻辑,容易因竞争产生不希望的毛刺。

使能时钟

Verilog示例代码:

input clk; //50MHz时钟信号
input wr_n; //写使能信号,低有效
input cs_n; //片选信号,低有效
input[7:0] db; //数据总线
output db_r;
reg db_r; //输入数据寄存器
wire en; //使能信号
assign en = ~wr_n && ~cs_n;
always @ (posedge clk) //全局时钟上升沿
if(en) //使能锁存输入
db_r <= db; //锁存输入数据

RTL Viewer:

使能时钟这要是用于时序逻辑中,比门控时钟要来的稳定。

上面只是一个举例,实际上它们实现的功能上还是有一点差别的。门控时钟一例中是能够比较准确的在wr_n的上升沿锁存数据的。而使能时钟一例中在wr_n有效期间的每个时钟周期都会锁存输入数据,最后写入结束后锁存寄存器里的数据是wr_n上升前的0-T(T=1/clk)时间内锁存的数据。因为是个例子,也就不详细说,具体情况具体分析。

在某系统中,前级数据输入位宽为8,而后级的数据输出位宽32,我们需要将8bit的数据转换成32bit的数据,因此后级处理的时钟频率为前级的1/4,若不使用时钟时能,则就要将前级时钟进行4分频来作为后级处理的时钟,这种设计方法会引入新的时钟域,为了避免这种情况,我们采用了时钟时能的方法来减少设计的复杂度。

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

reg [1:0] cnt;
reg [31:0] shift_reg;

always @ (posedge clk,negedge rst_n)
begin
if(!rst_n)
cnt <= 2'b0;
else
cnt <= cnt +1'b1;
end

always @ (posedge clk,negedge rst_n)
begin
if(!rst_n)
clk1x_en <= 1'b0;
else if(cnt ==2'b01)
clk1x_en <= 1'b1;
else
clk1x_en <= 1'b0;
end

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

always @ (posedge clk,negedge rst_n)
begin
if(!rst_n)
data_out<= 32'b0;
else if(clk1x_en==1'b1)//仅在clk1x_en为1时才将shift_reg的值赋给data_out
data_out<=shift_reg;
end

endmodule

Verilog基础知识3(门控时钟及FPGA时钟使能处理)相关推荐

  1. Verilog基础知识总结02

    Verilog基础知识总结02 1.简述Verilog如何建模 数字电路有两种基本要素:线(器件管脚之间的物理连线:wire)和器件(模块:module). Verilog建模就是用HDL语言把数字电 ...

  2. Verilog基础知识(数值表示总结,signed,原码,反码,补码)

    以前虽然是用过verilog,但是只使用了其中最常见wire,reg类型数据,并且是无符号的,因为是及处理过程很多数据就是无符号的.但是想进一步拓展无符号数,或者其底层的补码形式存储与运算方式,就需要 ...

  3. 三、6【Verilog HDL】基础知识之门级建模

    参考书籍:<Verilog HDL 数字设计与综合>第二版,本文档为第5章的学习笔记.由于本章也讲述的建模方式.该建模方式是通常设计师常用的底层抽象层次.更为低层的为开关级建模. 想了解更 ...

  4. Verilog基础知识

    I/O端口类型: input             wire型 output           wire/reg型 verilog可综合语句 assign,always,其中initial 语句不 ...

  5. Verilog基础知识(异步FIFO)

    本文主要内容来自Clifford E. Cummings的 Simulation and Synthesis Techniques for Asynchronous FIFO Design 这篇文章的 ...

  6. Verilog 基础知识

    Verilog 的逻辑值 逻辑 0:表示低电平,也就是对应我们电路的 GND: 逻辑 1:表示高电平,也就是对应我们电路的 VCC: 逻辑 X:表示未知,有可能是高电平,也有可能是低电平: 逻辑 Z: ...

  7. Zemax基础知识5--专门的一些设计思路(随时补充)

    一.非球面镜的使用 第一个图是单个球面镜对平行光进行会聚,存在较大的球差,光斑比较大:第二个图前表面采用了二次曲面,进行了优化设计,三级球差基本校正,光斑小于艾里斑 对于一些复杂的光学设计,非球面设置 ...

  8. 关于门控时钟的毛刺解决

    平台:ise14.7 仿真平台:modelsim se10.4d 在使用AD采集控制的时候往往需要使用SPI来读取外部的数据,需要逻辑内部产生门控时钟提供给外部器件使用. 逻辑上使用组合逻辑分配时钟. ...

  9. educoder基本SR锁存器+门控SR锁存器+与非门构成的门控SR锁存器

    基本SR锁存器 任务描述 本关任务:在Logisim中,构建由两个或非门构成的基本SR锁存器. 相关知识 锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状 ...

最新文章

  1. Eclipse 报 “Exception in thread main java.lang.OutOfMemoryError: Java heap space ”错误的解决办法
  2. Help:立体图绘制以及根据X,Y,Z三坐标值,在图上描点
  3. 曾宝仪和机器人_你愿意和机器人成为终身伴侣吗?
  4. [剑指offer]面试题3:二维数组中的查找
  5. 【费用流】摘取作物(jozj 3447)
  6. 前端学习(1504):组件通信的几种情况
  7. 又见n/i下取整+分块
  8. 昨晚家里停网后,我动了邪念用Python破解了隔壁小姐姐的wifi密码
  9. linux虚拟主机用织梦,织梦程序用什么虚拟主机很服务器好
  10. 上海世博会物联网技术应用
  11. 代码精进之代码规范(二)
  12. 入门必学 | R语言程序包的安装与使用指南
  13. vue项目中引入外部字体(超详细)
  14. IOS 关于扬声器和听话筒的设置 ----自己试验过的,可以达到扩音器和听筒播放的效果...
  15. python VTK画3D方框
  16. 0到1使用spring-security(Spring的安全认证框架)
  17. axure 折线图部件_Axure教程:折线图
  18. Dockerfile构建Nginx镜像、镜像优化(多阶段构建,最小化镜像构建)
  19. 蚁群优化算法(ACO)详细介绍
  20. cat5e跑万兆_全网最标准的万兆网线测试!超五类到底能不能跑万兆?

热门文章

  1. 计算机网络常见面试问题和解析
  2. 免费logo在线设计平台
  3. Java程序员未来的三大就业方向
  4. MD5加密算法的原理和应用
  5. cli sti cld std
  6. 不同公司系统的对接心得
  7. teamlab什么意思_不好意思,我们的2019毕业季聚会,和前辈的不一样
  8. php打印出来乱码_PHP输出中文乱码怎么解决?
  9. K8s JavaClient watch Pod检测状态变更、和Read timed out异常
  10. 科软计算机录取人数,科软是如何用5年时间从招生靠调剂到406名400+大神的?