VHDL: Bir vektörün bit veya OR-ing biti


11

Bir vektörün bitlerini birlikte VEYA istiyorum. Diyelim ki adlı bir vektörüm var example(23 downto 0)ve tüm bitleri başka bir vektöre VEYA istiyorum, bunu yapmayı içermeyen herhangi bir yol var example(0) or example(1) or ...example(23)mı?


Bunun yerine sıfıra karşılaştırır mısınız? Bu aynı etkiyi yaratacaktır.
David

David'in yorumunu genişletmek için (32 bit vektör kullanarak): or_result <= '0' when input=X"00000000" else '1';Sıfır sayısını, söz konusu vektörün uzunluğuna uyacak şekilde değiştirin.

Mantık azaltma vhdl 2008'de mevcuttur, bkz. Stackoverflow.com/questions/20296276/…
Moberg

1
Ayrıca daha genel bir yol kullanabilirsiniz:result <= '0' when (example=(example'range=>'0')) else '1';
Miguel Risco

Yanıtlar:


12

or_reduceistediğiniz şeydir ve kullanılabilir std_logic_misc. FPGA'lar için hem A hem de X tarafından desteklenir.


and_reducediğeri faydalı olanıdır.
Aaron D.Marasco

5

Verilog, tam olarak istediğinizi yapan kullanışlı bir "azaltma operatörüne" sahiptir: vektörün |example[23:0]tüm bitlerini OR 'nin sonucunu verir example.

Ne yazık ki VHDL'nin bu operatörü yok. Göre comp.lang.vhdl SSS olsa

Vektörün tüm bitleri üzerinde bir indirgeme işlemi gerçekleştirmek için önceden tanımlanmış bir VHDL operatörü yoktur (örn., Bir vektörün tüm bitlerine "veya" veya "tüm bitlerine"). Ancak, azaltma operatörleri kolayca uygulanabilir:

['X' ve 'Z' değerlerini ele almayan bir örneği atlamak]

    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 ); 

Kim küçümsedi, nedenini açıklamak ister misin?
Foton

Bu sentezlenebilir mi?
Johannes Schaub - litb

@ JohannesSchaub-litb, elbette, gerçekten büyük bir OR geçidine (veya daha küçük olanlardan oluşan bir ağaca) sentezlenebilir. Muhtemelen standart kütüphanedeki versiyon (Aaron D. Marasco'nun cevabında) anında üretilen bir şeyden daha iyi optimize edilecektir.
Photon

VHDL-2008'in tekli azaltma operatörleri vardır. SSS eski. Ayrıca, sunulan işlev, bazı araçların tıkayabileceği ve simülasyon için bir mikro optimizasyon dışında gerekli olmadığı erken çıkış nedeniyle şüpheli bir sentezlenebilirliktir.
KevinThibedeau
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.