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

这篇文章即将告诉您如何生成时钟使能信号(没有门控时钟)使用相同的时钟域来驱动另一个逻辑,而不是创建另一个时钟(使用 时钟分隔线 or 时钟门控)可能导致FPGA时序问题(由非专用创建 FPGA时钟发电机) 或者 时钟域交叉 问题如 延期性如果没有小心,则数据丢失和数据不一致。 
如何生成时钟使能信号而不是创建另一个时钟域
Xilinx和Altera推荐使用 时钟使能,可以帮助节省FPGA时钟资源并提高FPGA定时 设计的特点及时间分析。 

多时钟域交叉问题 数字逻辑设计非常常见。当您接口不同时钟域之间的信号时, 延期性 和数据丢失可能会发生 设置/保持时间违规。查看 这里 要了解哪些常规性以及它发生的原因。最受欢迎的防止这种方式是通过使用多次拖鞋 Synchronizers与其他时钟域同步输入信号。 

避免FPGA时序问题或 时钟域交叉问题,建议生成慢速时钟使能信号,而不是创建另一个较慢的时钟 (using 时钟分隔线 或时钟门控)驱动您设计的另一个逻辑部分。 

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

以下是用于生成慢速启用信号的示例VHDL代码:

-- fpga4student.com: FPGA projects, Verilog projects, 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 here
      -- It will be executed like a process of 1Khz clock
    end if;
  end if;
end process;
通过创建时钟使能信号,设计中的所有逻辑都由相同的时钟驱动,以便您不需要担心FPGA时序问题或 多时钟域交叉问题。您可以更改除数常量值以获取所需的任何时钟启用频率。另一个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 vs vhdl.:通过示例解释
20。 VHDL代码用于FPGA上的Debouncing按钮
21。 交通灯控制器的VHDL码
22。 VHDL代码用于FPGA上的Debouncing按钮
23。 交通灯控制器的VHDL码
24。 VHDL代码为简单的2位比较器
25。 用于单端口RAM的VHDL代码
26。 使用FSM的停车系统VHDL码
27。 VHDL编码VS软件编程
推荐的 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。 VERILOG代码D触发器
19。 完整加法器的Verilog代码
20。 与测试台的计数器的Verilog代码
21。 16位RISC处理器的Verilog代码
22。 FPGA上的按钮的Verilog代码
23。 如何为双向/ inout端口编写Verilog TestBench
30.  Verilog中的n位加法器设计
31。 Verilog vs vhdl.:通过示例解释
32。 FPGA时钟分频器的Verilog代码
33。 如何在Verilog中生成时钟使能信号
34。 PWM生成器的Verilog代码
35。 Verilog编码VS软件编程
FPGA Verilog VHDL课程

没意见:

发表评论

趋势FPGA项目