2013-10-15 4 views
2

У меня есть простой модуль VHDL проверочногоКак создать тестовый стенд 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; 

Создано простые схематические enter image description here

и пользовательские ограничения файлов тоже (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; 

Вот моя структура проекта Here's my project structure

Но я все еще получаю неправильные результаты. test_out_port следует изменить с помощью тактового процесса. enter image description here

Я не смог найти хороший учебник, так что, может быть, его слишком туп, но дать мне некоторую помощь

+0

Что такое 'Т.Б.: PROCESS' должен делать? Я не вижу в этом необходимости. –

ответ

1

Это была немая ошибка с «если» заявления.

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; 

enter image description here

+3

«elsif» приведет к более утонченному решению с одним меньшим «end if» ... –

Смежные вопросы