Bir alt modülün dahili sinyalleri VHDL'deki bir üst modüle nasıl getirilir?


11

VHDL kaynak kodumun dahili sinyallerini test bankamda nasıl gösterebilirim, böylece onları dalga formları olarak görebilirim? Aktif HDL kullanıyorum. Hedefime ulaşmak için herhangi bir araçtan bağımsız yöntem olup olmadığını bilmek istiyorum. Herhangi bir yardım takdir.

Şimdi bu hatayı alıyorum.resim açıklamasını buraya girin

Kaynak kodum

entity SPI_DAC is
    Port ( 
    -- inputs and oututs
    )
end SPI_DAC;

architecture Behavioral of SPI_DAC is 
    --These are my internal signals 
    signal ch1_byte_data_sent       : STD_LOGIC_VECTOR(23 downto 0)     := x"000000"; 
    signal ch1_byte_cmd_sent        : STD_LOGIC_VECTOR(23 downto 0)     := x"000000";
    --and a few other signals
begin 
    --functionality 
end Behavioral;

Testbench kodum

entity tb_spi_dac is
end tb_spi_dac;

architecture behavioral of tb_spi_dac is
    component spi_dac
    port(
    --declaration, inputs and outputs
    );
    end component;
begin
    uut: spi_dac port map(
    --map ports
    );
    --stimulus process
end;

Simülasyonunuza başladığınızda, simülatörünüz tüm öğeleri ayrıntılı olarak açıklayacaktır. Daha sonra harici isimler kullanarak yaptığınız bağlantıları arar. Bana öyle geliyor ki yolun yanlış. Cevabımı, yolların yapımı hakkında daha ayrıntılı bilgi vermek için düzenledim. Tasarımınız hakkında bilgi sahibi olmadan yolunuzda neyin yanlış olduğunu söyleyemem.
Thomas

Cevabımda söylediğim gibi, varlık adını değil etiketi kullanmanız gerekiyor. Doğru yol olmalıdır .tp_spi_dac.uut.ch1_byte_data_sent.
Thomas

Önerileriniz @ThomasS sorunumu çözdü. Çok teşekkürler! David'in önerdiği şekilde videoyu izledikten sonra çözdüğüm VHDL sürümü ile ilgili bir sorun yaşadım. Teşekkür notları yazmayı tavsiye etmiyorum, ama düzenlememi düzelttiği için teşekkürler Thomas (gerçekten bu işaretleme biçimlendirmesi ile karıştırıldım).
Suhasini

Yanıtlar:


11

Aradığınız şey VHDL'de harici adlar (veya hiyerarşik adlar) olarak adlandırılır. Kapsam / hiyerarşi görünürlüğünü atlatmak için kullanılabilirler. Sözdizimi aşağıdaki örnek gibidir.

<<signal path_name : std_logic_vector(7 downto 0)>>

Harici adlara sahip sabitlere ve değişkenlere de erişebilirsiniz. Dış tipteki türü değiştirmelisiniz. Harici adları doğrudan okuma / yazma erişimi için kullanabilirsiniz. Ancak okunabilirliği artırmak için takma adlar kullanmalısınız.

alias signal_name is 
    <<signal path_name : std_logic_vector(7 downto 0)>>;

Harici ad, erişmek istediğiniz öğenin yolunu içermelidir. Yol, mutlak veya göreli olabilir. Yolunuzdaki ayrı ayrı öğeler noktalarla ayrılır. Adın değil, örnek / süreç / varlık / ... etiketlerini sağlamanız gerektiğini unutmayın. Mutlak yol, .ardından en üst düzeyinizin adıyla başlar . Göreli yollar ^için, hiyerarşide yukarı taşımak için kullanabilirsiniz . Bir paketteki sabitleri / sinyalleri kullanırken @bir kütüphaneye gitmek için de kullanabilirsiniz .

Mutlak yol için bir örnek

.tb_name.instance_label.sub_instance_label.signal_name

Test öğesinden göreli adlarla aynı öğeye erişmek için kullanabilirsiniz

instance_label.sub_instance_label.signal_name

Alt testten bazı testbench sinyallerine / sabitlerine erişmek istediğinizde kullanabilirsiniz

^.^.constant_name

Yapılandırma kütüphanesinde bulunan bir yapılandırma paketindeki başka bir sabite erişmek için

@config.pkg_name.other_constant_name

Doğru yol adını bulmak için David'in işaret ettiği simülatör tasarımınızı / kütüphane tarayıcınızı kullanabilirsiniz.

Bu özellik VHDL-2008'de eklenmiştir, bu yüzden zaten VHDL-2008 desteği olan tüm araçlar tarafından desteklenmelidir (ActiveHDL dahil). Çoğu simülatör varsayılan olarak VHDL-2008 kullanmaz, ancak etkinleştirmek için bir komut satırı argümanı veya yapılandırma seçeneği sunar.


Önerdiklerini denedim. ch1_byte_data_sent takma adı << sinyalidir .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (23 aşağı 0) >>: = x "000000"; Bunu yaptığımda "Tanımlayıcı veya dize değişmez beklenen" hatası alıyorum. Hatayı neden aldığım hakkında bir fikrin var mı? (
Gönderiyle

Cevabım yeterince açık olmayabilir. Kullanırken aliasödevi yeni bir deyime yazmanız gerekir. Avantajı, uzun harici ad yerine takma ad kullanabilmenizdir.
Thomas

1

VHDL kaynak kodumun dahili sinyallerini test bankamda nasıl gösterebilirim, böylece onları dalga formları olarak görebilirim?

Bir test tezgahı simülasyon anlamına gelir - herhangi bir portu olmayan bir varlık genellikle sentez için uygun değildir.

Active-HDL'yi hiç kullanmadığım halde, dalga formunuzda görüntülemek için hiyerarşinizde sinyalleri almanıza izin veren bir tasarım tarayıcısı olduğunu anlıyorum. Derleme ve Simülasyon videosuna bakın (5:02, dak: sn).

Ve şimdi videonun belki de bu durumda karışıklığa neden olabileceği izlenimini edindim.

Videonun sonundan itibaren 2:22'de simülasyonu kontrol eden bir do dosyası (makro) gösterilir:

2:22 dosya yap

Tasarımın üst seviyesindeki her sinyali gördüğümüz yerde dalga komutu ile dalga formu ekranına eklendi. Tasarım hiyerarşisinde herhangi bir yerde bir sinyal belirtmek de mümkün olmalıdır.

Temel fikir, dalga formu görüntüsü için toplanacak sinyalleri (ve bazı değişkenlere izin verir) programlamanızı sağlayan birçok simülatördür.

Bu kısa video, ikincil hiyerarşi seviyeleri için sinyal göstermez. (Kısa bir video sunumunda çok fazla şey var).

Hedefime ulaşmak için herhangi bir araçtan bağımsız yöntem olup olmadığını bilmek istiyorum.

Yukarıda belirtildiği gibi, hedefiniz iç sinyalleri dalga formları olarak görmek gibi görünüyor.

Şimdi kötü haberler için - simülatör özellikleri veya arayüzleri, dalga formu dökümü için programlama sinyalleri, vb. İçin bir standartlaştırma yoktur.

Bir tasarım hiyerarşisinde herhangi bir yere herhangi bir simüle eden dalga formu görüntüleyicisine veya dalga formu dökümü dosyasına sinyal dökebileceğiniz garanti edilmektedir, bunu yapmak için yöntem uygulama tanımlanmıştır.

İyi haber şu ki , birden fazla uygulama platformunda işlevsel doğrulamayı tanımlayan, sözdizimi ve anlambilimdeki farklılıkların üstesinden gelen ortak bir veritabanı kullanarak, taşınabilirlik için programlı olarak oluşturabileceğiniz dosyalar yapmak gibi kavramları birbirinden kopyalama eğilimindedirler . Ayrıca, araçları programlı olarak çağırmak için komut satırı arabirimi sözdiziminde farklılıklar olabilir.

Taşınabilirlik fikri birden fazla GUI'yi zarif bir şekilde kucaklamamaktır.


0

Xilinx gibi araçlar dahili sinyalleri görüntüleme seçeneğine sahiptir.

Basit araçtan bağımsız yöntem, ayrı çıkış hatlarını bildirmek ve dahili sinyalleri bu hatlara bağlamaktır.


Giriş ve çıkış portlarımı karıştırmak istemiyorum; bu nedenle yeni çıkış hatları bildirilemez. Test tezgahımdaki sinyalleri beyan ettim ama dalga formunda herhangi bir çıktı göremiyorum (işlevselliği uygulamadan yalnızca sıfırladığım değeri gösterir). Bunu yapmanın başka bir yolu var mı?
Suhasini

0

Testbençindeki sinyalleri bildirdiyseniz ancak herhangi bir çıktı göremiyorsanız, test edilecek objeyi başlattığınız örnekleme bildiriminde bir sorun olabilir. Bir varlık örnekleme ifadesi veya bileşen örnekleme kullanarak doğru şekilde örneklendirip eklemediğinizi kontrol edin. Test tezgahınızdaki sinyallerin test edilen cihaza bağlı olduğundan emin olun. Bu sorunu çözmezse, yardımcı olabilmemiz için testbench kodunu gönderin.


Thomas'ın söyledikleri sorunumu tam olarak ele alıyor. Lattice'in iCEcube2 tasarım yazılımı ile sağlanan Active-HDL'de varsayılanın VHDL 1993'e ayarlanması nedeniyle ortaya çıkan daha önce bahsettiğim hatayı çözdüm. Simülasyonu başlatmaya çalıştığımda şimdi ölümcül bir ayrıntı hatasıyla karşılaşıyorum. Bunun neden olduğunu bulmaya çalışıyorum, umarım sınırlı bir lisans sorunu değildir.
Suhasini

Bize bu mesajı gösterebilir misin?
rick
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.