【发布时间】:2017-02-14 18:52:17
【问题描述】:
虽然我已经完成了数字逻辑的大学课程,但我是 VHDL 设计的新手,我希望有人可以帮助我创建 2 个依赖于彼此状态的时钟信号。
我在 DE2-115 FPGA 板上使用 50 MHz 时钟,用于创建 5MHz 时钟(名为 dclk_5)。但是,模拟显示了两个信号,但运行时间仅为 200 ns,并且不再运行。为什么仿真运行时间不超过 200 ns?
2 个时钟的数据表:
用于测试合成但仿真不正确的 dclk_5 和 clk_50 的替代 VHDL 设计:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity DCLK_top is
port(
clk_50 : in std_logic;
sw : in std_logic;
dclk_5 : out std_logic
);
end DCLK_top;
architecture behaviour of DCLK_top is
signal clk_counter : integer range 0 to 10 := 0;
signal dclk_counter : integer range 0 to 8 := 0;
signal dclk_pause_counter : integer range 0 to 7 := 0;
signal dclk_pause : std_logic := '0';
signal clk_pause_counter : integer range 0 to 7 := 0;
begin
dclk_proc : process(clk_50)
begin
if(clk_50'event and clk_50='1' ) then
clk_counter <= clk_counter+1;
if(clk_counter=10) then
clk_counter <= 0;
end if;
if(clk_counter<5) then
dclk_5 <= '0';
else
dclk_5 <= '1';
end if;
end if;
end process dclk_proc;
end architecture behaviour;
仿真图片:
【问题讨论】:
-
我对Quartus不太了解,但是没有像xilinx这样的生成时钟的工具吗?你既没有解释你的确切问题是什么......代码似乎是可综合的......我会把
start_dclk = '1'放在另一个if中。 -
我使用 ModelSim 生成时钟,但问题是 50MHz 本身可以正常运行任意时间,但是当我包含 dclk (5MHz) 时,整个模拟将在 400ns 后停止为 1 个 dclk 周期。所以我假设问题出在我的设计之内。我还将用模拟的屏幕截图更新帖子。
-
你的问题不清楚,结果是什么,预期的结果是什么?请参阅How do I ask a good question? 和How to create a Minimal, Complete, and Verifiable example。最初在 Electrical Engineering Stack Exchange 上的地址为 Quartus VHDL ModelSim not showing what I want,Stack Overflow 上的问题指南有所不同。
-
看一下信号分配。在仿真下,通常在过程完成之前不会更新信号。我建议你使用变量。使用变量,值会立即更新,使用信号......你必须等待一个增量时间。但是......我还没有理解这个问题......你如何运行Modelsim?您正在监控哪些信号? Modelsim 会给你错误信息吗?遵循@user1155120 的建议。拆分代码并进行增量测试。
-
您可能想使用
rising_edge(clk_50)而不是clk_50'event and clk_50='1'
标签: vhdl clock quartus hardware-programming