Dostałem polecenie, aby porównać raporty kompilacji, a w szczególności wygenerowane równania dla dwóch, zamieszczonych niżej kodów VHDL.
Oba kody wykonują to samo zadanie, za pomocą innych instrukcji.
Polecenie pochodzi z książki "Język VHDL" Kevin Skahill (ćw. 4.1).
Dodam, że w tej książce autor korzystał z narzędzia WARP, który generował czytelny raport, w którym faktycznie zawarte było równanie opisanego układu. Przykładowe równanie: step = addr(3) * addr(2) * addr(1) * addr(0) + step.
Problem w tym, że u mnie to narzędzie opisane w książce uruchamia się z błędami - książka ma 11lat i narzędzie może nie współpracuje z nowymi systemami.
Używam za to środowiska Xilinx.
Moje pytanie brzmi - czy xilinx generuje raport, z którego można wyłuskać podobne równanie?
Gdzie takiego raportu szukać i ewentualnie czy istnieją inne narzędzia generujące takie raporty?
Kod: Zaznacz cały
library IEEE;
use IEEE.std_logic_1164.all;
entity break1 is
port(
a,b,c,d : in std_logic;
j,k : in std_logic;
x : out std_logic);
end break1;
architecture conditional of break1 is
signal func1, func2, func3, func4 : std_logic;
begin
func1 <= j or k;
func2 <= j and k;
func3 <= j xor k;
func4 <= j xnor k;
p1: process(a, b, c, d, j, k)
begin
if a='1' then
x <= func1;
elsif b='1' then
x <= func2;
elsif c='1' then
x <= func3;
elsif d='1' then
x <= func4;
else
x <= '-';
end if;
end process;
end;
Kod: Zaznacz cały
library IEEE;
use IEEE.std_logic_1164.all;
entity break1 is
port(
a,b,c,d : in std_logic;
j,k : in std_logic;
x : out std_logic);
end break1;
architecture exclusive of break1 is
signal func1, func2, func3, func4 : std_logic;
begin
func1 <= j or k;
func2 <= j and k;
func3 <= j xor k;
func4 <= j xnor k;
p1: process(a, b, c, d, j, k)
subtype select_type is std_logic_vector(3 downto 0);
begin
case select_type' (a & b & c & d) is -- wyrażenie uściślające
when "1000" => X <= func1;
when "0100" => X <= func2;
when "0010" => X <= func3;
when "0001" => X <= func4;
when others => X <= '-';
end case;
end process;
end;