VHDL симуляция не может генерировать вывод - PullRequest
0 голосов
/ 18 мая 2018

Коллега и я работаем над проектом курса для вычисления GCD (большего общего делителя) из N чисел, используя VHDL.Мы используем алгоритм Евклида и написали следующий код:


     P1: process(clk,rstN)
    begin
    if (rstn = '1') then
    CS <= redy;
        eqsig <= '0';
        x <= (others => '0');
        y <= (others => '0');
    elsif (clk'EVENT and clk = '1') then
        CS <= NS;  
   end if;
end process P1;


    P2: process(CS,eqsig,NS)
begin

    case CS is
        when redy =>
            NS <= inpt;
        when inpt =>
            NS <= comp;
        when comp =>
            if (eqsig = '1') then
                NS <= otpt;
            else 
                NS <= oper;
            end if;
        when oper =>
            NS <= comp;
        when otpt =>
            NS <= redy;
        when others =>
            NS <= redy;
    end case;
end process P2;

    P3: Process(CS,eqsig)
begin

    case CS is
        when oper =>
            if x<y then
            y <= y-x;
            elsif y<x then
            x <= x-y;
            end if;

        when comp =>
            if x=y then
                eqsig <= '1';
            else
                eqsig <= '0';
            end if;
       when otpt =>
           if (rden = '1') then
           rdata <= x;
           end if;
       when inpt =>
             if (wren'EVENT and wren = '1') then
                if (waddr = "00") then
                    x <= wdata;
              end if;
             end if;
             if (wren'EVENT and wren = '0') then
                 if (waddr = "01") then
                     y <= wdata;
               end if;
             end if;
        when others =>
            null;
    end case; 
end process P3;

При попытке смоделировать его, он показывает, что вывод «U», хотя код кажется правильным без ошибок, и он может прочитатьвходы.Вот испытательный стенд:


rstN <= '0' after 10 ns;
        wren <= '1' after 10 ns, '0' after 70 ns;
        wdata <= "00000000000000000000000000000011" after 20 ns,
                 "00000000000000000000000000000110" after 60 ns;
        waddr <= "00"after 20 ns,
                 "01"after 60 ns;
        rden <= '1' after 90 ns;

clk_process : process
begin
    clk <= '0' ;
    wait for cp/2;
    clk <= '1';
    wait for cp/2;
end process;

Большое вам спасибо.BR // Ди

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...