VHDL时钟测试台

时间:2015-05-24 02:50:05

标签: vhdl ghdl


我正在尝试运行我在网上获取的代码,但它在某种程度上测试平台无法在GHDL上运行预期的输出。

架构代码     图书馆IEEE;     使用IEEE.STD_LOGIC_1164.ALL;

entity clk200Hz is
    Port (
        clk_in : in  STD_LOGIC;
        reset  : in  STD_LOGIC;
        clk_out: out STD_LOGIC
    );
end clk200Hz;

architecture Behavioral of clk200Hz is
    signal temporal: STD_LOGIC;
    signal counter : integer range 0 to 124999 := 0;
begin
    frequency_divider: process (reset, clk_in) begin
        if (reset = '1') then
            temporal <= '0';
            counter <= 0;
        elsif rising_edge(clk_in) then
            if (counter = 124999) then
                temporal <= NOT(temporal);
                counter <= 0;
            else
                counter <= counter + 1;
            end if;
        end if;
    end process;

    clk_out <= temporal;
end Behavioral;

试验台:

  LIBRARY ieee;
    USE ieee.std_logic_1164.ALL;

    ENTITY clk200Hz_tb IS
    END clk200Hz_tb;

    ARCHITECTURE behavior OF clk200Hz_tb IS 
      COMPONENT clk200Hz
      PORT(
        clk_in : IN  std_logic;
        reset  : IN  std_logic;
        clk_out: OUT std_logic
      );
      END COMPONENT;

      -- Inputs
      signal clk_in  : std_logic := '0';
      signal reset   : std_logic := '0';
      -- Outputs
      signal clk_out : std_logic;
      constant clk_in_t : time := 20 ns; 
    BEGIN 
      -- Instance of unit under test.
      uut: clk200Hz PORT MAP (
        clk_in  => clk_in,
        reset   => reset,
        clk_out => clk_out
      );

      -- Clock definition.
      entrada_process :process
        begin
        clk_in <= '0';
        wait for clk_in_t / 2;
        clk_in <= '1';
        wait for clk_in_t / 2;
      end process;

      -- Processing.
      stimuli: process
      begin
        reset <= '1'; -- Initial conditions.
        wait for 100 ns;
        reset <= '0'; -- Down to work!
            wait;
      end process;
    END;

我预计会形成一个时钟上下波动的波,但情况似乎并非如此。我想知道这个设计有什么问题。


我运行了以下命令:

ghdl -s *.vhd
    ghdl -a *.vhd
    ghdl -e clk200Hz_tb
    ghdl -r clk200Hz_tb --vcd=led.vcd 
    gtkwave led.vcd

这是我的输出enter image description here
但是对于时钟输出,我期望一个上下信号,而不是0的信号。

由于

2 个答案:

答案 0 :(得分:0)

我已经修复了问题,在我的运行命令中,我只是添加了ghdl -r clk200Hz_tb --vcd = led.vcd --stop-time = 100ns。

答案 1 :(得分:0)

  

ghdl -a clk200Hz_tb.vhdl
  ghdl -e clk200Hz_tb
  ghdl -r clk200Hz_tb --wave = clk200hz_tb.ghw --stop-time = 500ns

都给:

clk200hz_tb.png (点击)