Kodutöö #1 süntees (ASIC)

Matriklinumber: 999999-le vastava funktsioonide süsteemi tõeväärtus-tabel oleks järgmine:

0000 1-00
0001 01-0
0010 11-1
0011 0-01
0100 1110
0101 1010
0110 -111
0111 01-0
1000 0011
1001 -10-
1010 -0-1
1011 1001
1100 11-0
1101 0-10
1110 -000
1111 1011

Seda tabelit kirjeldav VHDL-kood oleks järgmine (vt. ka VHDL faili):

library IEEE; use IEEE.std_logic_1164.all;
entity f_system is
  port ( x1, x2, x3, x4: in std_logic;
         y1, y2, y3, y4: out std_logic );
end entity f_system;

library IEEE; use IEEE.std_logic_1164.all;
architecture tabel of f_system is
begin
  process (x1, x2, x3, x4)
    variable in_word, out_word: std_logic_vector (3 downto 0);
  begin
    in_word := x1 & x2 & x3 & x4;
    case  in_word  is
      when "0000" => out_word := "1-00";
      when "0001" => out_word := "01-0";
      when "0010" => out_word := "11-1";
      when "0011" => out_word := "0-01";
      when "0100" => out_word := "1110";
      when "0101" => out_word := "1010";
      when "0110" => out_word := "-111";
      when "0111" => out_word := "01-0";
      when "1000" => out_word := "0011";
      when "1001" => out_word := "-10-";
      when "1010" => out_word := "-0-1";
      when "1011" => out_word := "1001";
      when "1100" => out_word := "11-0";
      when "1101" => out_word := "0-10";
      when "1110" => out_word := "-000";
      when "1111" => out_word := "1011";
      when others => out_word := "----";
    end case;
    y1 <= out_word(3);    y2 <= out_word(2);
    y3 <= out_word(1);    y4 <= out_word(0);
  end process;
end architecture tabel;

Sünteesi puhul on oluline, et VHDL-fail sisaldaks ainult funktsioonide süsteemi kirjeldust (st. ilma testpingita).

Kõige lihtsam Synopsys'e DC kasutamise juhend oleks alljärgnev (keerukam juhend on siin, kuid ei sisalda kodutöö jaoks vajaliku teegi digsys_hw.db kasutamist):

Enne esmaskasutus luua abikataloog WORK.syn [>mkdir WORK.syn] ja kopeerida seadete fail [>cp ~/M/Peeter.Ellervee/IAS0150/hw1/.synopsys_dc.setup .], teek [cp ~/M/Peeter.Ellervee/IAS0150/hw1/digsys_hw.db .] ja selle kasutamise skript [cp ~/M/Peeter.Ellervee/IAS0150/hw1/digsys_hw.script .]. Need failid leiab ka materjalide veebist (.synopsys_dc.setup on peidetud).

Käsk "cad" abil valida Synopsys 2020 (3).

Käsk "design_vision" paneb süntesaatori tööle.

"File->Execute Script..." abil laadige skript 'digsys_hw.script'.

"File->Read" abil laadige sünteesitav fail (nt. fs1_tabel.vhd).
Kui see ei tööta (programm kukub kokku), proovige käsurealt sisestada "read_file -format vhdl path/filename.vhd".

Klõps yksus ("Logical Hierarchy" vasakus servas) valib kompileeritud disainiüksuse (kui seda alamakent ei ole või puudub disain, saab uue avada menüüst "Hierarchy->New Logical Hierarchy View"). Paremklõps ja sealt "Schematic View" avab liidesevaate (pilt all vasakul, kust topeltklõpsuga saab skeemi ennast vaadata.

Käsk "set_max_area 0" viib võimalikult väikeses keemini (ei pea kasutama).

"Design->Compile Design..." aktiveerib sünteesi dialoogi. "OK"-le klõpsates süntees käivitub.

Sünteesi tulemusena saadud skeemi (parempoolne pilt all, vajalik on "Hiearchy" uus avamine) vaadata käsu "report_qor" abil (sisestatakse alla käsureale).

Antud skeemi suuruseks on 30 ekvivalentset loogikalüli ja suurim viide 7.48 ns [*]. Tulemuse saab salvestada "File->Save as..." abil.

liides skeem

(*) Süuntesaator ei asenda invertoreid 2-NAND-dega ja selle tõttu on skeem suurem. Samuti võib erineda viide, sest srvestatakse ka loogikaelementide koormatust.


Proovige ka omaenda kodutöö ülesande funktsioonide süsteemi sünteesida.

Viimati muudetud 2.04.2023.