如何在FPGA上生成时钟使能信号

这篇文章将告诉您如何生成时钟使能信号(没有门控的时钟) to drive another logic using the same clock domain instead of creating another clock (使用 时钟分频器 or 时钟门控),可能导致FPGA时序问题(由非专用问题造成) FPGA时钟发生器) 要么 时钟域穿越 诸如 亚稳,数据丢失和数据不连贯(如果不注意的话)。 
如何生成时钟使能信号而不是创建另一个时钟域
Xilinx和Altera都建议使用 时钟使能,可帮助节省FPGA时钟资源并改善FPGA时序 设计的特性和时序分析。 

多时钟域穿越问题 在数字逻辑设计中非常常见。在不同时钟域之间连接信号时, 亚稳 并且数据丢失可能是由于 建立/保持时间违规。检查一下 这里 了解什么是亚稳态及其发生的原因。防止这种情况的最流行方法是使用多拖鞋 同步器来同步来自另一个时钟域的输入信号。 

为了避免FPGA时序问题或 时钟域穿越问题,建议您生成一个慢时钟使能信号,而不要创建另一个慢时钟 (using 时钟分频器 或时钟门控)来驱动设计的另一个逻辑部分。 

例如,在您的FPGA中,有一个50MHz的时钟可用,但是您想使用1K的较慢时钟来驱动设计的另一部分赫兹。代替创建另一个1KHz时钟,您应该创建一个1KHz时钟使能信号。 

以下是用于生成慢时钟使能信号的示例VHDL代码:

-- fpga4student.com: FPGA projects, Verilog项目, VHDL projects,
-- Generate clock enable signal instead of creating another clock domain
-- Assume that the input clock : clk_50MHz
signal clock_1KHz_enable  : std_logic;
signal counter : std_logic_vector(15 downto 0):=x"0000";
constant DIVISOR: std_logic_vector(15 downto 0):= x"C34F";
-- Generate the slow enable signal instead of creating another clock of 1KHz
-- 
process(clk_50MHz)
begin
  if(rising_edge(clk_50MHz)) then
    if(counter = DIVISOR) then
      counter <= x"0000";
      clock_1KHz_enable <= '1';
    else
      clock_1KHz_enable <= '0';
      counter <= counter + x"0001";
    end if;
  end if;
end process;
-- Use the same clock and the slow clock enable signal above 
-- to drive another part of the design to avoid domain crossing issues
process(clk_50MHz)
begin
  if(rising_edge(clk_50MHz)) then
    if(clock_1KHz_enable = '1') then
      -- Add your logic 这里
      -- It will be executed like a process of 1Khz clock
    end if;
  end if;
end process;
通过创建时钟使能信号,设计中的所有逻辑均由同一时钟驱动,因此您无需担心FPGA时序问题或FPGA时序问题。 多时钟跨域问题。您可以更改DIVISOR常数值以获得所需的任何时钟使能频率。另一个Verilog示例代码,用于生成慢速时钟使能信号而不是创建另一个时钟域: 这里.
另一个VHDL示例代码 这里 和Verilog示例代码 这里.
您可能会这样:
1. 什么是FPGA? VHDL如何在FPGA上工作
2. FIFO存储器的VHDL代码
3. FIR滤波器的VHDL代码
4. 8位微控制器的VHDL代码
5. 矩阵乘法的VHDL代码
6. 开关尾环计数器的VHDL代码
7. FPGA上数字闹钟的VHDL代码
8. 8位比较器的VHDL代码
9. 如何使用VHDL将文本文件加载到FPGA中
10。 D触发器的VHDL代码
11。 完整加法器的VHDL代码
12 具有可变占空比的VHDL中的PWM发生器
13 ALU的VHDL代码
14。 带测试平台的计数器的VHDL代码
15 16位ALU的VHDL代码
16。 VHDL中的移位器设计
17。 VHDL中的非线性查找表实现
18岁 VHDL中的密码协处理器设计

19 Verilog和VHDL:通过示例解释
20 VHDL代码,用于反跳FPGA上的按钮
21 交通信号灯控制器的VHDL代码
22 VHDL代码,用于反跳FPGA上的按钮
23。 交通信号灯控制器的VHDL代码
24 用于简单2位比较器的VHDL代码
25岁 单端口RAM的VHDL代码
26  使用FSM的停车场系统的VHDL代码
27。 VHDL编码与软件编程
推荐的 Verilog项目:
2. FIFO存储器的Verilog代码
3. 用于16位单周期MIPS处理器的Verilog代码
4. Verilog HDL中的可编程数字延迟计时器
5. 用于数字电路中基本逻辑组件的Verilog代码
6. 用于32位无符号除法器的Verilog代码
7. 用于定点矩阵乘法的Verilog代码
8. Verilog HDL中的车牌许可证识别
9. 提前进位乘法器的Verilog代码
10。 微处理器的Verilog代码
11。 4x4乘法器的Verilog代码
12 停车场系统的Verilog代码
13 使用Verilog HDL在FPGA上进行图像处理
14。 如何使用Verilog HDL将文本文件加载到FPGA中
15 交通信号灯控制器的Verilog代码
16。 FPGA上的闹钟的Verilog代码
17。 比较器设计的Verilog代码
18岁 D触发器的Verilog代码
19 Full Adder的Verilog代码
20 带testbench的计数器的Verilog代码
21 16位RISC处理器的Verilog代码
22 用于在FPGA上反跳按钮的Verilog代码
23。 如何为双向/输入端口编写Verilog Testbench
30岁  Verilog中的N位加法器设计
31。 Verilog和VHDL:通过示例解释
32。 FPGA上时钟分频器的Verilog代码
33。 如何在Verilog中生成时钟使能信号
34。 用于PWM发生器的Verilog代码
35岁 Verilog编码与软件编程
FPGA Verilog VHDL课程

没意见:

发表评论

热门FPGA项目