Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> VHDL

Cara membuat Proses Berjam di VHDL

Sebagian besar desain VHDL menggunakan logika clock , juga dikenal sebagai logika sinkron atau logika sekuensial . Proses clock hanya dipicu oleh sinyal master clock, bukan saat sinyal input lainnya berubah.

Blok bangunan dasar logika clock adalah komponen yang disebut flip-flop . Ada varian yang berbeda, dan dalam tutorial ini kita akan fokus pada flip-flop yang dipicu sisi positif dengan reset negatif:

Flip-flop adalah rangkaian sampel-dan-tahan, yang berarti bahwa ia menyalin nilai dari input ke output ketika tepi naik dari sinyal clock tiba. Outputnya kemudian dipertahankan stabil pada nilai sampel sampai tepi naik berikutnya dari jam, atau sampai sinyal reset berdenyut.

Pos blog ini adalah bagian dari seri Tutorial VHDL Dasar.

Semua proses clock dipicu secara bersamaan dan akan membaca inputnya sekaligus. Pada saat yang sama, mereka akan menampilkan hasil dari iterasi terakhir. Sinyal jam secara efektif menciptakan langkah waktu dalam aliran data. Ini membuatnya mudah dikelola bagi desainer untuk membuat logika yang kompleks dan mendalam. Dia dapat memecah tindakan algoritme menjadi peristiwa yang terjadi pada siklus jam.

Flip-flop atau array flip-flop kadang-kadang disebut sebagai register , itu adalah hal yang sama.

Daftar sensitivitas untuk proses clock biasanya hanya berisi sinyal clock. Ini karena proses clock hanya dipicu oleh sisi sinyal clock, sinyal input lainnya tidak akan membuatnya aktif sama sekali.

Ini adalah template untuk membuat proses clock dengan reset sinkron:
process(Clk) is
begin
    if rising_edge(Clk) then
        if nRst = '0' then
            <reset all output signals here>
        else
            <main logic here>
        end if;
    end if;
end process;

Olahraga

Dalam tutorial video ini kita akan belajar cara membuat proses clock di VHDL:

Kode terakhir untuk flip-flop testbench :

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity T17_ClockedProcessTb is
end entity;

architecture sim of T17_ClockedProcessTb is

    constant ClockFrequency : integer := 100e6; -- 100 MHz
    constant ClockPeriod    : time    := 1000 ms / ClockFrequency;

    signal Clk    : std_logic := '1';
    signal nRst   : std_logic := '0';
    signal Input  : std_logic := '0';
    signal Output : std_logic;

begin

    -- The Device Under Test (DUT)
    i_FlipFlop : entity work.T17_FlipFlop(rtl)
    port map(
        Clk    => Clk,
        nRst   => nRst,
        Input  => Input,
        Output => Output);

    -- Process for generating the clock
    Clk <= not Clk after ClockPeriod / 2;

    -- Testbench sequence
    process is
    begin
        -- Take the DUT out of reset
        nRst <= '1';

        wait for 20 ns;
        Input <= '1';
        wait for 22 ns;
        Input <= '0';
        wait for 6 ns;
        Input <= '1';
        wait for 20 ns;

        -- Reset the DUT
        nRst <= '0';

        wait;
    end process;

end architecture;

Kode terakhir untuk modul flip-flop :

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity T17_FlipFlop is
port(
    Clk    : in std_logic;
    nRst   : in std_logic; -- Negative reset
    Input  : in std_logic;
    Output : out std_logic);
end entity;

architecture rtl of T17_FlipFlop is
begin

    -- Flip-flop with synchronized reset
    process(Clk) is
    begin

        if rising_edge(Clk) then
            if nRst = '0' then
                Output <= '0';
            else
                Output <= Input;
            end if;
        end if;

    end process;

end architecture;

Jendela bentuk gelombang di ModelSim setelah kami menekan run, dan memperbesar timeline:

Analisis

Kita dapat melihat dari bentuk gelombang bahwa sinyal keluaran hanya diperbarui pada setiap tepi naik dari sinyal clock. Sinyal input disampel hanya ketika sinyal clock berubah dari '0' menjadi '1'. Penurunan negatif dari sinyal input mulai sekitar 45 ns benar-benar hilang. Itu tidak disalin ke output karena berada di antara dua sisi naik jam, dan karena itu diabaikan.

Animasi ini mengilustrasikan bagaimana output bereaksi terhadap sinyal input dan clock yang berubah:

Garis vertikal menunjukkan bagaimana sinyal input relatif terhadap tepi naik jam.

Berikan perhatian khusus pada satu pulsa positif pada sinyal input mulai dari 20 ns. Ini sinkron dengan jam dan tepat satu periode jam. Outputnya tidak langsung bereaksi, itu tertunda satu periode clock.

Ketika saya belajar VHDL, saya menemukan ini sangat sulit untuk dipahami. Tepi naik jam sinkron dengan tepi naik input, jadi bagaimana flip-flop dapat memilih satu nilai atau yang lain?

Simulator menggunakan langkah waktu untuk memodelkan peristiwa dengan cara yang dapat diprediksi, dan sinyal menyebar dalam waktu nol. Karena flip-flop membaca input dalam langkah waktu yang sama persis saat memperbarui output, flip-flop melihat nilai input lama dan menyalinnya ke output.

Baca selengkapnya tentang langkah waktu VHDL di sini:Penjelasan siklus Delta

Saya harus menambahkan jawaban ini bahwa ini tidak benar-benar bagaimana itu bekerja. Di dunia fisik, sinyal membutuhkan waktu untuk menyebar, kita tidak tahu persis kapan tiba di flip-flop. Penundaan propagasi ini diperkirakan secara otomatis oleh proses perangkat lunak (tempat dan rute) yang mengubah kode VHDL menjadi netlist.

Pada kenyataannya, input harus tetap stabil selama beberapa nanodetik sebelum dan sesudah naiknya tepi jam:

Periode waktu kritis ini dikenal sebagai setup dan hold time. Untungnya, ini bukan sesuatu yang biasanya harus Anda pertimbangkan. Ketika bekerja murni dengan logika clock, masalah ini ditangani oleh perangkat lunak yang mengubah kode VHDL menjadi netlist.

Bawa Pulang

Ikuti Kuis Dasar VHDL – bagian 3 »
atau
Lanjut ke tutorial selanjutnya »


VHDL

  1. Cara membuat daftar string di VHDL
  2. Cara membuat testbench berbasis Tcl untuk modul kunci kode VHDL
  3. Bagaimana menghentikan simulasi di testbench VHDL
  4. Cara membuat pengontrol PWM di VHDL
  5. Cara menghasilkan angka acak di VHDL
  6. Cara membuat penyangga cincin FIFO di VHDL
  7. Cara membuat testbench pemeriksaan mandiri
  8. Cara membuat Daftar Tertaut di VHDL
  9. Cara menggunakan Prosedur dalam Proses di VHDL
  10. Cara menggunakan Fungsi di VHDL