2011-03-15 2 views
-2
-----------begin part1.vhdl--------------------- 


library ieee; 
use ieee.std_logic_1164.all; 

entity part1 is 
    generic (width : integer :=7); 
    PORT(a, b, c, d: IN std_logic_vector(width downto 0); 
     sel: IN std_logic_vector(1 downto 0); 
     result: OUT std_logic_vector(width downto 0) 
    ); 
end part1; 

architecture muxbehav of part1 is 

BEGIN 

    result <=  a after 5 ns when sel="00" else 
        b after 5 ns when sel="01" else 
        c after 5 ns when sel="10" else 
        d after 5 ns; 
end muxbehav; 

-----------end part1.vhdl--------------------- 

    -----------begin part1_tb.vhdl------------------ 

library ieee; 
use ieee.std_logic_1164.all; 


entity part1_tb is 
    generic(width : integer := 7); 
end part1_tb; 

architecture tb of part1_tb is 

    signal t_a: std_logic_vector(width downto 0):="00000000"; 
    signal t_b: std_logic_vector(width downto 0):="00000000"; 
    signal t_c: std_logic_vector(width downto 0):="00000000"; 
    signal t_d: std_logic_vector(width downto 0):="00000000"; 
    signal t_s: std_logic_vector(1 downto 0); 
    signal t_o: std_logic_vector(width downto 0); 

component part1 
    generic(width : integer); 
    PORT(a, b, c, d: IN std_logic_vector(width downto 0); 
     sel: IN std_logic_vector(1 downto 0); 
     result: OUT std_logic_vector(width downto 0) 
    ); 
    end component; 

    begin 

    U_part1: part1 generic map(width) port map(a=>t_a, b=>t_b, c=>t_c, d=>t_d, sel=>t_s, result=>t_o); 

    process 

     begin 

     t_a <= "11111111"; 
     t_b <= "00000001"; 
     t_c <= "10101010"; 
     t_d <= "01010101"; 

     wait for 10 ns; 
     t_s <= "00"; 
     wait for 6 ns; 
     assert (t_o="11111111") report "Error input a" severity error; 

     wait for 10 ns; 
     t_s <= "01"; 
     wait for 6 ns; 
     assert (t_o="00000001") report "Error input b" severity error; 

     wait for 10 ns; 
     t_s <= "10"; 
     wait for 6 ns; 
     assert (t_o="10101010") report "Error input c" severity error; 

     wait for 10 ns; 
     t_s <= "11"; 
     wait for 6 ns; 
     assert (t_o="01010101") report "Error input d" severity error; 

     wait; 

    end process; 
end tb; 

-----------end part1_tb.vhdl------------------ 

Привет, это мой первый код, который я написал в VHDL. Это простой 4 к 1 MUX, который может принимать вектор любой ширины. Однако, когда я пытаюсь запустить testbench, GHDL просто зависает. Я смотрел на тестовые площадки, похожие на мои, но я все еще не могу найти, почему моя висит. Есть идеи?Простой VHDL 4 до 1 MUX testbench висит

+0

Под «зависанием», вы имеете в виду, что симуляция просто работает без чего-либо, или время моделирования просто перестает развиваться? –

+0

Можете ли вы разместить информацию о своей платформе и версию GHDL? И ваши команды компиляции/запуска? –

+0

Что делает «ожидание» в конце процесса? Это заставляет его остановиться? Извините, что я не знаю VHDL, что хорошо .. более того, человек Verilog. – user623879

ответ

1

Хммм. Я не вижу никаких причин для его зависания.

Я только что пробовал свой код в ghdl0.29 на Ubuntu 10.04 - отлично работает для меня (при этом он выходит без печати каких-либо сообщений, поэтому кажется, что ваш код работает :) Волны выглядят убедительными и в gtkwave.

Вы пытаетесь удалить вашу папку work и выполнить ее выполнить и перекомпилировать?

Извините, на самом деле это не ответ, который заставит вас двигаться вперед!

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