2

簡単な VHDL モジュールテストがあります

entity test is 
 port( 
  clk: in std_logic;
  test_out: out std_logic
  ); 
end test;  

architecture Behavioral of test is
begin 
main: process(clk)
variable tmp_buffer : std_logic:='0';
begin
if (rising_edge(clk) and tmp_buffer='0') then
    test_out<='1';
    tmp_buffer:='1';
end if;
if (rising_edge(clk) and tmp_buffer='1') then
    test_out<='0';
    tmp_buffer:='0';
end if;
end process;
end Behavioral;

簡単な回路図を作成しました ここに画像の説明を入力

ユーザー制約ファイルも (Spartan-3 XC3S200):

NET "clk_port" LOC = "C5";
NET "test_out_port" LOC = "B5";

回路図用のテストベンチを作成しました(!)

ENTITY main_main_sch_tb IS
END main_main_sch_tb;
ARCHITECTURE behavioral OF main_main_sch_tb IS 

   COMPONENT main
   PORT( clk_port   :   IN  STD_LOGIC; 
          test_out_port :   OUT STD_LOGIC);
   END COMPONENT;

   SIGNAL clk_port  :   STD_LOGIC;
   SIGNAL test_out_port :   STD_LOGIC;

BEGIN

   UUT: main PORT MAP(
        clk_port => clk_port, 
        test_out_port => test_out_port
   );

    clk_port_proc : process 
                 begin 
                 clk_port <= '0'; 
                 wait for 10 ns; 
                 clk_port <= '1'; 
                 wait for 10 ns;  
             end process;

-- *** Test Bench - User Defined Section ***
   tb : PROCESS
   BEGIN
      WAIT; -- will wait forever
   END PROCESS;
-- *** End Test Bench - User Defined Section ***

END;

これが私のプロジェクト構造です これが私のプロジェクト構造です

しかし、私はまだ間違った結果を得ています。test_out_port は、クロック プロセスで変更する必要があります。 ここに画像の説明を入力

良いチュートリアルが見つからなかったので、愚かすぎるかもしれませんが、助けてください

4

1 に答える 1

1

「if」ステートメントのばかげた間違いでした。

if (rising_edge(clk) and tmp_buffer='0') then
        test_out<='1';
        tmp_buffer:='1';

else if (rising_edge(clk) and tmp_buffer='1') then
test_out<='0';
tmp_buffer:='0';
end if;
end if;

ここに画像の説明を入力

于 2013-10-15T06:47:12.987 に答える