Aslında, bölücü yeni bir şey değil.İnternette bölücü hakkında daha fazla blog yazısı var ve birkaç tasarım yöntemi var. Bazıları oldukça pratiktir ve bazılarının sınırlı bir uygulama alanı vardır, bu da büyük ölçekli programlamaya uygulamayı zorlaştırır. Bugün tanıtacağım şey aynı zamanda gelişmiş algoritmalar anlamına da geliyor. Birçok kişi bunları daha önce İnternette tartıştı, ancak bunlar temelde kopyalanıp kopyalanır. Hatta bazılarında hatalar var. Bazıları sadece işlevsel simülasyondan geçiyor ve sağlanan programlar da Çok sayıda hata veya mantıksız yerler var. Aslında pek bir şey yapmadım, sadece seleflerin sonuçlarını özetledim, ilgili prosedürleri standartlaştırdım ve ücretsiz olarak sizlerle paylaştım.Bazı hatalar veya mantıksız noktalar varsa benimle iletişime geçebilirsiniz!
Tasarımın ilkesi çok basit ve öncekiler bunu çok net bir şekilde söylediler, bu yüzden doğrudan buraya taşıdım:
Bölmenin ve bölenin her ikisinin de sekiz bitlik veri olduğunu varsayarsak, buradaki algoritma:
Temettüyü 16 bitlik verilere genişletin, alttaki 8 bit temettü değeridir ve üstteki 8 bitin tümü 0'dır. Bir başlangıç sinyaliyle, 16 bitlik veriye bir değer atayın ve ardından işlemi başlatın. Verinin yüksek sekiz bitini bölenin değeriyle karşılaştırın. 0'dan büyükse, temettü büyüktür Bu sefer bölümü 1 olarak ayarlayın, en düşük veri bitine atayın ve ardından temettüdeki yüksek sekiz biti çıkarın. Ardından verileri bir bit sola kaydırın ve karşılaştırmaya devam edin. Son hesaplamadan sonra 8 kez. Verinin üstteki 8 biti geri kalan, alttaki 8 bit ise bölümdür.
Prensip açıktır: önce kaydırın, karşılaştırın (fark yaratın), sekiz kez yineleyin ...
Önemli not: Bu algoritma yalnızca pozitif sayıları ve tamsayı bölmeyi destekler. Temettü ve bölenlerin sayısı önceden belirtilmeli ve bölenlerin sayısı ile bölünenlerin sayısı eşit olmalıdır. (Geliştirilmiş algoritma daha sonra sizinle paylaşılacaktır)
ChinaAET'in kod dili işlevi çok düşüktür ve VerilogHDL'yi desteklemez, bu nedenle kod doğrudan eşlenir:
İşte Testbench:
Ve ActiveHDL'nin komut dosyası:
Simülasyon sonuçları aşağıdaki gibidir:
Synplify Pro (Diamond, MachXO36900C) kullanarak sentezledikten ve Eşleştirdikten sonra:
Tasarım Özeti
Kayıt sayısı: 7485 üzerinden 42 (% 1)
PFU kayıtları: 6864 üzerinden 42 (% 1)
PIO kayıtları: 621 üzerinden 0 (% 0)
SLICE sayısı: 3432 üzerinden 32 (% 1)
Mantık / ROM Olarak SLICE'lar: 3432 üzerinden 32 (% 1)
RAM olarak SLICE'lar: 2574 üzerinden 0 (% 0)
Gerçekleştirilen SLICE'lar: 3432 üzerinden 15 (% 0)
LUT4 sayısı: 6864 üzerinden 63 (% 1)
Mantıksal LUT'lar olarak kullanılan sayı: 33
Dağıtılmış RAM olarak kullanılan sayı: 0
Dalgalanma mantığı olarak kullanılan sayı: 30
Vardiya kayıtları olarak kullanılan sayı: 0
Kullanılan PIO site sayısı: 207'den 38 + 4 (JTAG) (% 20)
Blok RAM sayısı: 26 üzerinden 0 (% 0)
GSR sayısı: 1'de 1 (% 100)