Bir DSP ile standart bir mikrodenetleyici arasındaki fark nedir?


84

Bir DSP'nin dijital sinyal işleme için optimize edilmiş olduğunu biliyorum, ancak bunun bir IC seçme görevini nasıl etkilediğinden emin değilim. Bir mikrodenetleyici ile yaptığım hemen hemen her şey dijital sinyallerin işlenmesini içerir!

Örneğin, popüler Microchip dsPIC30 veya 33 DSP ile PIC24 genel amaçlı mikrodenetleyicileri diğer 16 bit tekliflerini karşılaştıralım. DsPIC ve PIC, aynı bellek ve hıza sahip olacak şekilde yapılandırılabilir, benzer çevresel setlere, benzer A / D özelliğine, pin sayımlarına, akım çizimine vb. Sahip olabilirler. Digikey listesinde görünen tek büyük fark, osilatör. Farkı fiyatlara (veya bu konuda başka bir alana bakarak) söyleyemem.

Çeşitli protokoller (I2C, SPI, vb.) Kullanan birkaç harici sensörle çalışmak istersem, bazı A / D dönüşümleri yapın, bazı seri flaşlarda bazı verileri saklayın, bazı düğmelere yanıt verin ve verileri bir karaktere itin LCD ve üzerinde bir FT232 (oldukça genel bir gömülü sistem), hangi yongayı kullanmalıyım? DSP'nin herhangi bir şekilde PIC'in gerisinde kalacağı görülmedi ve bu gizemli "DSP Motoru" nu sunuyor. Kodum her zaman matematik yapar ve arada bir kayan noktaya veya kesirli sayılara ihtiyacım vardır, ancak bir DSP kullanmanın avantajını kullanıp kullanamayacağımı bilmiyorum.

Başka bir satıcının DSP'leri ve mikrodenetleyicileri arasındaki daha genel bir karşılaştırma aynı derecede faydalı olacaktır; Bunları sadece tartışma için bir başlangıç ​​noktası olarak kullanıyorum.

Yanıtlar:


64

Dürüst olmak gerekirse, ikisi arasındaki çizgi bugünlerde neredeyse gitti ve her ikisi de olarak sınıflandırılabilen işlemciler var (örneğin, AD Blackfin).

Genel konuşma:

Mikrodenetleyiciler, kesme alt sistemine sahip tam sayı matematik işlemcileridir. Bazıları donanım çarpma ünitelerine sahip olabilir, bazıları yoktur, vb. Amaç basit matematik için ve çoğunlukla diğer cihazları kontrol etmek için tasarlanmış olmalarıdır.

DSP'ler, sinyal işleme akışı için optimize edilmiş işlemcilerdir. Genellikle, tek bir komutta çoğaltmak gibi genel görevleri hızlandıran özel talimatlar vardır. Ayrıca sık sık başka vektör veya SIMD talimatları da vardır. Tarihsel olarak kesintiye dayalı sistemler değildi ve programlanmaları daha zor hale getirmek için optimize edilmiş standart dışı bellek sistemleriyle çalıştırıldılar. Genellikle bir veri akışını işleyen büyük bir döngüde çalışacak şekilde tasarlanmıştır. DSP'ler tamsayı, sabit nokta veya kayan nokta işlemcileri olarak tasarlanabilir.

Tarihsel olarak eğer ses akışlarını, video akışlarını işlemek, hızlı motor kontrolü yapmak istiyorsanız, bir veri akışını yüksek hızda işlemeyi gerektiren her şeyi bir DSP'ye bakarsınız.

Bazı düğmeleri kontrol etmek, bir sıcaklığı ölçmek, bir karakter LCD çalıştırmak, bir şeyleri işleyen diğer IC'leri kontrol etmek istiyorsanız, bir mikrodenetleyici kullanırsınız.

Günümüzde, çoğunlukla DSP benzeri talimatlarla yerleşik ya da akış verileri ya da diğer DSP işlemleriyle uğraşmak için çip işlemcileri olan genel amaçlı mikrodenetleyici tipi işlemciler bulursunuz. Saf DSP'lerin belirli endüstriler dışında artık kullanıldığını görmüyorsunuz.

İşlemci pazarı eskiden olduğundan çok daha geniş ve daha bulanık. Mesela bir ARM cortex-A8 SoC'yi mikro denetleyici olarak görmüyorum ama muhtemelen bir PoP paketindeki standart tanıma uyuyor.

EDIT: Uygulama işlemcilerinin yapıldığı günlerde bile DSP'leri ne zaman / nerede kullandığımı açıklamak için biraz ekleyeceğimi düşündüm.

Tasarladığım yeni bir ürün, X bölgesi giriş kanalı ve 'bölge' başına X çıkışı çıkışı olan ses işlemesi yapıyordu. Ürün için amaçlanan kullanım, ses kanallarını hiç kimseye dokunmadan yıllarca işleyerek sık sık orda bir şey yapıp oturduğu anlamına geliyordu. Ses işleme, çeşitli akustik filtrelerden ve işlevlerden oluşuyordu. Sistem aynı zamanda hepsi bir kutuya bir miktar bağımsız 'bölge' ekleyebilme özelliğine sahip "hot plugable" idi. Toplam 3 PCB tasarımı (anakart, arka panel ve modülde fiş) ve arka panelde 4 fiş modül destekliydi. Yalnız yaptığım gibi eğlenceli bir proje, sistem tasarımı, şematik, PCB düzeni ve firmware yapmak zorunda kaldı.

Şimdi her şeyi tek bir hacimli ARM çekirdeği ile yapabilirdim, sadece bölge başına 24bit sabit nokta numaralarında 50MPSS DSP çalışmasına ihtiyacım vardı. Ancak, bu sistemin çok uzun süre çalışacağını biliyordum ve asla tıklamamasının, patlamamasının ya da benzeri bir şeyin kritik olduğunu biliyordum. Bölge başına düşük güçte bir DSP ve sistem yönetimi rolünü oynayan tek bir PIC mikrodenetleyici ile uygulamayı seçtim. Bu şekilde, uC işlevlerinden biri çökse bile, Ethernet portuna bir DDOS saldırısı gelse bile, DSP mutlu bir şekilde uzak durmaya devam edecek ve muhtemelen hiç kimsenin bilmeyeceği bir durum ortaya çıkacaktı.

Böylece mikrodenetleyici, 2 satır karakterli LCD'nin, bazı düğmelerin, sıcaklık izlemenin ve fan kontrolünün (her panoda oldukça yüksek güçte ses amplifikatörleri vardı) çalıştırma rolünü oynadı ve hatta Ethernet üzerinden bir AJAX tarzı web sayfasını hizmet etti. Ayrıca DSP'leri seri bağlantı yoluyla da yönetti.

Böylece, her şeyi yapmak için tek bir ARM çekirdeği kullanabildiğim günlerde bile, tasarım özel bir sinyal işleme IC'si dikte etti.

DSP'lerle karşılaştığım diğer alanlar:

* High End ses - Çok yüksek son alıcılar ve konser kalitesinde karıştırma ve işleme dişli

* Radar İşleme - Düşük çekirdekli uygulamalarda bunun için ARM çekirdeği kullandım.

* Sonar İşleme

* Gerçek zamanlı bilgisayar görüşü

Çoğunlukla, genel amaçlı bir CPU'yu çeşitli uygulamalar için birlikte çalışan boşaltma motorlarıyla birleştiren uygulama işlemcileri tarafından ses / video / benzer alanın düşük ve orta uçları devralınmıştır.


1
Belki başka bir ek. Yaklaşık 80 G / Ç hattı ve 12 analog giriş içeren bir uygulamada, şimdi G / Ç akışlarını işlemek için bağlı bir FPGA ile tek bir mikro denetleyici kullanıyoruz. Bunun gibi çözümler daha yaygın hale geliyor. Bu sistemi kullanıyoruz: embeddedarm.com/products/board-detail.php?product=ts-7800 , pazara kısa bir süre için gelişimi hızlandırmak için ve çok iyi çalıştığını söylemeliyim (Tabii ki fiyatı böyle bir ürün daha düşük satış fiyatı / beklenen değere sahip uygulamalar için uygun olmayabilir.) - Wouter Simons 33 saniye önce
Wouter Simons

Her mikrodenetleyicide kesinti yoktur. Kritik uygulamalarda asla kullanılmazlar. Örnek olay: Savaş uçaklarında kullanılan Viper denetleyicisi.
stevenvh

15

Pek çok dijital sinyal işlemcisi, 'normal' işlemcilerde bulunmayan çeşitli işlevler içerir:

  1. Her iki işlenen ile RAM'den getirilen her bir işlenen çiftinde bir döngü hızında çarpma işlemi gerçekleştirme yeteneği.
  2. Bir tamponun işaretçilerin sarılmasını sağlamak için manuel kod kullanmak zorunda kalmadan tekrar tekrar kullanılmasını sağlamak için bir miktar 'modulo' veya 'sarma' adresleme gerçekleştirme yeteneği. Örneğin 3205x bir 'tampon başlangıcı' ve 'tampon ucu' kaydına sahiptir; Kod 'arabellek başlangıcını' işaret eden bir işaretçi kaydını arttırmaya veya azaltmaya çalışırsa, işlemci işaretçiyi 'arabellek ucu' ile yükler. 3205x ayrıca, adres ekleme işlemlerinin, bunun tersi yerine MSB'yi LSB'ye taşıdığı bir geri taşıma moduna sahiptir; Bu, N 2 bir güç ise modulo-N adreslemesine izin verir, ancak işler karışık sırada saklanır.
  3. Bir komutun 'n' kez yeniden getirilmesine gerek kalmadan çalıştırılacağını belirleme yeteneği. 8088 gibi bazı işlemciler bunu birkaç talimat için içerir, ancak birçok DSP birçok talimatta buna izin verir.
  4. Bir kod bloğunun 'n' zamana kadar tekrar tekrar dallanmaya gerek kalmadan çalıştırılabileceğini belirleme yeteneği. Her kod alımından önce program sayacı 'loop-end' siciline karşı kontrol edilir; eşleşir ve döngü etkinse, program sayacı 'loop-start' ile yeniden yüklenir (aksi takdirde artar). Eğer 'loop-count' sıfır ise, loop devre dışı bırakılır; Aksi halde 'loop-count' azaltılacaktır.

Birçok DSP'nin, çoklu bir birikimin her iki işleyicisinin aynı anda alınmasına izin vermek için ayrı otobüslerin olacağını unutmayın; Bunu yapabilen bir DSP olmayan hiç görmedim. Bir çipin DSP olması gerektiğinin 'eksik' olması gerektiğinden habersiz olmama rağmen, çift işlemcili alma işlemine izin vermek için gereken ekstra silikon alanı, daha genel olarak yararlı bir amaç için kullanılmayan silikon alanıdır.


Çoklu birikimi biliyordum, fakat modulo adresleme ve tekrardan getirme gerektirmeyen kod yürütme aşina olmadığım özelliklerdi.
Kevin Vermeer

1
Çok fazla harika cevabınız var ve hem eski hem de yeni sorular üzerinde çalışmanız harika. Sahtekarlık algılama algoritmaları ve günlük kayıtlar olmasaydı, tüm cevaplarınızı gözden geçirir ve onları oylardı . Yine de birkaç gün bekleyin! Harika çalışmalara devam et!
Kevin Vermeer

@reemrevnivek: Yanıtlarımı yararlı bulduğuma sevindim. Belirttiğim gibi, çift getirmeli çarpma-toplama tasarımı, DSP dışı işlemcilerde görmediğim bir özellik. ARM, çoklu toplama ve modulo adresleme gerektiren işlemlerde iyi bir iş çıkarıyor (256 baytlık bir tablo için örneğin (R0 + (R1 >> 24) gibi etkili bir adres kullanarak)) bir DSP bir döngüde yapar.
supercat

MAC, üç işlemsel komuttur, a <- a + b * c iki değil.
Trismegistos

@Trismegistos: N maddeli tekrarlanan bir MAC işlemi toplam 2N + 1 operandını içerecektir. Akümülatörü her bir maddeden önce alıp daha sonra depolamaya gerek yoktur. Yinelenmeyen bir çarpım ekleme işlemine sahip işlemciler üç işleve sahipken, bir yineleme-MAC sadece döngü başına iki işleci alır.
supercat,

13

Diğerlerinin bahsetmediği bir şey, sayısal taşma davranışıdır. Normal işlemcilerde bu genellikle maksimum değerden minimum değere kaydırılır.

DSP kullanımı için genellikle en azından doygunluğu kullanma seçeneği vardır . Yani, taşma sırasında değer, daha az bozulma üreten ve analog devrelerin davranışını daha iyi taklit eden maksimum değerde kalır.


9

DSP ile standart uController arasındaki en büyük fark, DSP'nin uC'de bulunmayan çarpma biriktirme özelliği (MAC). FFT gibi gerçek bir dijital sinyal işleme matematiği yapmak istiyorsanız bu değerlidir (bir örnek). FFT'yi standart bir mikroişlemcide yapmak, DSP'nin bir MAC'inde gerçekleştirmeye kıyasla uzun zaman alacaktır.

I2C ve seri sinyallerin işlenmesi bir DSP'deki işlem dalga biçimleriyle aynı değildir. Seri sinyaller sadece bit çarpması nedeniyle tamamen farklı bir işlem gerçekleşiyor.

İşte DSP forumunda benzer bir tartışma: DSP ve Mikroişlemci


DSP blok şemasında bir Akümülatör gördüm, fakat ne yaptığını bilmiyordum. Bilmek güzel! ASCII verilerini gönderirken I2C ve serinin işlem dalga biçimleriyle aynı olmadığını, ancak bazı periferlerin (Seri erişim ivmeölçerler, harici A / D, GPS, vb.) Veri biçimlerindeki dalga biçimlerini kodladığını anlıyorum. nasılsa DSP içine!
Kevin Vermeer

3
çoğu sinyal işleme matematiksel olarak çarpım matrisleri ve / veya vektörleri içerir. Bunu yapma süreci çok fazla cevapla sonuçlanır = a b + c d + e * f tipi hesaplamalar. MAC olmayan bir işlemci üzerinde yapılması gereken birçok talimat vardır, bir MAC ile birçok kez daha hızlı olabilir.
Mark

1
Bu yorum yanlıştır. Hepsi değil, fakat çoğu MCU, MAC işlevli donanım çarpanları içerir. Bunun bir DSP'ye karşı MCU ayrımı ile ilgisi yok. Evet, DSP'lerin bir MCU'dan daha fazla bir MAC'ye sahip olma olasılığı daha yüksektir, ancak bu küçük özellikten çok daha temel farklılıklar vardır.

2
Saati 15 yıl geriye çevirirseniz, bu özelliğe sahip neredeyse hiç MCU görmüyorsunuz. MAC veya eşdeğeri bir özelliği DSP'den çıkarırsanız, dürüst bir şekilde bir DSP'niz olduğunu söyleyebilir misiniz? Olmazsa ya da yakın bir şey olmasaydı kesinlikle bir tane almak istemem. Harvard'a karşı von Neuman'a ve hafıza erişimine girdiğinizde mimari farklılıklar var ama ben uzun ve ayrıntılı bir açıklama yapmadan basit bir cevap veriyordum. Bence "Düzgün YANLIŞ" diyerek yorumunuz için çok zorsun. Kapsanması gerektiğini düşündüğünüz derinliği tartışan bir cevap gönderebilirsiniz.
Jay Atkinson

@ adrian: Yorumunuz yanlış görünüyor. Bir MCU bir MAC fonksiyonuna sahipse, bir DSP olarak pazarlanacaktır.
Johan.A

5

DSP'leri birbirinden ayırmak için kullanılan, aritmetik işlemler, özellikle çarpma için optimizasyonlarıydı, ancak bugünlerde mikrodenetleyicilerin çarpma ve bölme talimatlarıyla donatılmış olmaları nadir değildir. Bazılarının sabit nokta matematik (örneğin, TI TMS320s 'IQ' lib'i) için donanım desteğine sahip olduğu sürece, DSP yongaları ile sinyal işleme yapmakta hala bir avantaj olabilir, oysa mikronların sadece tamsayılı birimleri içermesi daha muhtemeldir.

Şahsen, bir tasarım için ikisi arasında seçim yaparken karşılaştığımda, uygulamanın sadece ara sıra mod değiştiren mantıkla tekrarlanan hesaplamalar için çağrı yapıp yapmadığını veya yalnızca gerektiğinde kısa hesaplama sıralarını yapması gerekip gerekmediğini kategorize etmeye çalışırdım. Birincisi, bir mikro olan DSP olurdu.

Ve sonra, elbette, her ikisine de sahip olan OMAP gibi eğlenceli şeyler var. P =


1
Sanırım niyetin farkını anlıyorum (ikinci paragrafınız), ancak mikroişlemlerin DSP benzeri matematik yeteneğine sahip olmadığı ve DSP'lerin mikro benzeri çevre kümelerine sahip olduğu durumlarda neden bunu yapacağımdan emin değilim. OP'mde dediğim gibi, dsPIC33 ve PIC24 neredeyse aynı özelliklere ve aynı fiyata sahip olabilir. Hatalıysam beni düzeltin, ancak DSP'nin tekrar eden işlem olanakları olsa da, PIC24'ün (ya da baktığım herhangi bir diğer mikro bilgisayarın), bir çift gibi, DSP'ye göre, bir değişiklik gibi DSP'ye göre herhangi bir avantajı olduğunu sanmıyorum. boru hattı veya daha hızlı FLASH.
Kevin Vermeer,

@reemrevnivek: Yani diyorsun ki, neden her zaman sadece bir DSP seçmiyorsun?
JustJeff,

@JustJeff: Evet, tam olarak söylediğim bu.
Kevin Vermeer

1

MAC komutunun sahip olabileceği bir başka özellik ise çoğullamalara işaret eden kayıtları otomatik olarak arttırmaktır. (16 bit sabit nokta) Clarkspur çekirdeğini kullanan bir Zilog DSP programladım. Harvard mimarisinde, üç veri yolu ile aynı anda üç bellek alanına erişebilmesine izin veren bir değişiklik oldu: Öğretim belleği, veri ram bankı 1 ve veri ram bankı 2. MAC / imleç artış işlemi başına bir tek-çevrim komutlu bir FIR filtresi yapın. C de tek komut şöyle görünür:

Akümülatör + = rambank1 [r1 ++] * rambank2 [r2 ++];

Ve elbette bu talimat her katsayı için tekrar edilir.

Ayrıca daha önce işaret edilmemiş olan DSP'ler (en azından kullandığım eskileri) genellikle RISC mimarisidir ve tek bir döngüde (veya aynı sayıda döngüde) yürütülen birçok veya çoğu komutla tasarlanmıştır. Bu, deterministik kesme tepkisi için programlanabilme imkanı sağlar (aktif olan kesme hattı ile yürütülen ISR'deki ilk komut arasında sabit bir saat sayımı), diğer çoğu işlemci neye bağlı olarak değişken sayıda saat döngüsünde kesintilere cevap verir. Çok çevrimli komuttaki nokta kesme işlemi gerçekleşir. Sabit yürütme süresi, tekrarlayan çıkışlarda birden çok zaman aralıklı titreşimi ortadan kaldırır.

OP’nin Microchip Pic ve DSPic ile karşılaştırılmasında, DSPic’in temelde yalnızca MAC komutlu bir Pic talimatı ve sinyal işleme işlevlerini yapan bir mikroişlemciyi hızlandırabilen bir kaç ek özellik daha eklenmiş olduğunu anladım. (tartışılan diğer özelliklerin hiçbirinin olmamasından dolayı) terminolojiyi DSP olarak adlandırmaya zorluyor olabilir. MSP430, donanım MAC'li sürümlerde de mevcuttur, ancak hiç kimse bu DSP'yi çağırmaz.

10 - 15 yıl önce, Intel’den gelen ana işlemcilerin “yerel” sinyal işleme için MAC ve benzeri talimatlar eklediğini (1990’larda ses üretimi için yaygın olan özel DSP işlemcileri olan genişleme kartlarının yerine) okuduğunu hatırlıyorum. 56k çevirmeli PC veri yolu modemleri sadece A / D ve D / A çeviricilerdi ve modem sinyalini kodlama ve kod çözme fonksiyonlarını yerine getirmek için ana işlemciye dayanıyorlardı, bu yüzden tam orada daha verimli işlemci kullanımı için bir talep vardı. Video düzenleme / kodlama / kod çözme gibi medya kullanımlarının yanı sıra ses kaydı / üretimi de DSP tipi talimatlarla büyük ölçüde hızlandırılmıştır.


Güneşin altında yeni bir şey yok. <g>C'nin ilk günlerinde, artırma ve azaltma operatörleri doğrudan PDP'deki tek bir donanım talimatına çevrilecek şekilde tasarlandı.
Pete Becker,
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.