VHDL: ATAU-ing bit vektor bersama-sama


11

Saya ingin ATAU potongan-potongan vektor bersama-sama. Jadi katakanlah saya memiliki vektor yang disebut example(23 downto 0)dan saya ingin ATAU semua bit ke vektor lain, apakah ada cara untuk melakukan ini yang tidak melibatkan pergi example(0) or example(1) or ...example(23)?


Bisakah Anda membandingkan dengan nol saja? Itu akan memiliki efek yang sama.
David

Untuk memperluas komentar David (menggunakan vektor 32 bit): or_result <= '0' when input=X"00000000" else '1';Ubah jumlah nol untuk mencocokkan panjang vektor yang dimaksud.

Pengurangan logika tersedia dalam vhdl 2008, lihat stackoverflow.com/questions/20296276/…
Moberg

1
Anda juga dapat menggunakan cara yang lebih umum:result <= '0' when (example=(example'range=>'0')) else '1';
Miguel Risco

Jawaban:



5

Verilog memiliki "operator reduksi" yang praktis yang melakukan persis seperti yang Anda minta: |example[23:0]memberikan hasil ATAU semua bit dari examplevektor.

Sayangnya VHDL tidak memiliki operator ini. Menurut comp.lang.vhdl FAQ , meskipun

Tidak ada operator VHDL yang telah ditentukan untuk melakukan operasi pengurangan pada semua bit vektor (mis., Ke "atau" semua bit vektor). Namun, operator reduksi dapat dengan mudah diimplementasikan:

[melewatkan contoh yang tidak menangani nilai 'X' dan 'Z']

    function or_reduce( V: std_logic_vector )
                return std_ulogic is
      variable result: std_ulogic;
    begin
      for i in V'range loop
        if i = V'left then
          result := V(i);
        else
          result := result OR V(i);
        end if;
        exit when result = '1';
      end loop;
      return result;
    end or_reduce;
    ...
    b <= or_reduce( b_vec ); 

Siapa pun yang turun jabatan, mau menjelaskan mengapa?
The Photon

Apakah ini dapat disintesis?
Johannes Schaub - litb

@ JohannesSchaub-litb, tentu saja, dapat disintesis ke gerbang OR yang sangat besar (atau pohon yang lebih kecil). Mungkin versi di perpustakaan standar (dalam jawaban Aaron D. Marasco) akan lebih optimal daripada sesuatu yang dihasilkan dengan cepat.
The Photon

VHDL-2008 memang memiliki operator pengurangan unary. FAQ sudah usang. Selain itu, fungsi yang disajikan adalah synthesizability dipertanyakan karena keluar awal yang beberapa alat dapat tersedak dan tidak diperlukan selain sebagai optimasi mikro untuk simulasi.
KevinThibedeau
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.