Bagaimana cara mengeluarkan sinyal internal dari modul yang lebih rendah ke modul teratas di VHDL?


11

Bagaimana saya bisa mengeluarkan sinyal internal kode sumber VHDL saya ke testbench saya sehingga saya bisa melihatnya sebagai bentuk gelombang? Saya menggunakan HDL Aktif. Saya ingin tahu apakah ada alat yang independen untuk mencapai tujuan saya. Bantuan apa pun dihargai.

Saya mendapatkan kesalahan ini sekarang.masukkan deskripsi gambar di sini

Kode sumber saya adalah

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;

Kode testbench saya adalah

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;

Ketika Anda memulai simulasi, simulator Anda akan menguraikan semua elemen. Setelah itu mencari tautan yang Anda buat dengan menggunakan nama eksternal. Tampak bagi saya bahwa jalan Anda salah. Saya mengedit jawaban saya untuk memberikan detail lebih lanjut tentang pembangunan jalan. Tanpa pengetahuan tentang desain Anda, saya tidak bisa mengatakan apa yang salah dengan jalan Anda.
Thomas S.

Seperti yang saya katakan di jawaban saya, Anda harus menggunakan label bukan nama entitas. Jalan yang benar seharusnya .tp_spi_dac.uut.ch1_byte_data_sent.
Thomas S.

Saran Anda memecahkan masalah saya @ Thomas. Terima kasih banyak! Saya punya masalah dengan versi VHDL, yang saya selesaikan setelah menonton video seperti yang disarankan oleh David. Saya tahu menulis catatan terima kasih tidak disarankan, tetapi terima kasih Thomas telah memperbaiki edit saya (saya benar-benar bingung dengan pemformatan penurunan harga ini).
Suhasini

Jawaban:


11

Apa yang Anda cari disebut nama eksternal (atau nama hierarkis) di VHDL. Mereka dapat digunakan untuk menghindari visibilitas ruang lingkup / hierarki. Sintaksnya seperti contoh di bawah ini.

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

Anda juga dapat mengakses konstanta dan variabel dengan nama eksternal. Anda harus mengubah jenis dalam tipe eksternal. Anda dapat menggunakan nama eksternal secara langsung untuk akses baca / tulis. Namun Anda harus menggunakan alias untuk meningkatkan keterbacaan.

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

Nama eksternal harus berisi jalur ke elemen yang ingin Anda akses. Jalan dapat berupa absolut atau relatif. Elemen individual di jalur Anda dipisahkan oleh titik-titik. Perhatikan bahwa Anda harus memberikan label instance / proses / entitas / ... dan bukan nama. Path absolut dimulai dengan .diikuti oleh nama level teratas Anda. Untuk jalur relatif yang dapat Anda gunakan ^untuk naik dalam hierarki. Saat menggunakan konstanta / sinyal dari beberapa paket Anda juga dapat menggunakan @untuk pindah ke perpustakaan.

Contoh untuk jalur absolut adalah

.tb_name.instance_label.sub_instance_label.signal_name

Untuk mengakses elemen yang sama dari testbench dengan nama relatif yang dapat Anda gunakan

instance_label.sub_instance_label.signal_name

Ketika Anda ingin mengakses beberapa sinyal testbench / konstan dari sub_instance yang dapat Anda gunakan

^.^.constant_name

Untuk mengakses konstanta lain dalam paket konfigurasi yang terletak di pustaka konfigurasi yang dapat Anda gunakan

@config.pkg_name.other_constant_name

Anda dapat menggunakan simulator / browser desain simulator Anda seperti yang ditunjukkan David untuk menemukan nama jalur yang benar.

Fitur ini ditambahkan dalam VHDL-2008 sehingga harus didukung oleh semua alat yang sudah memiliki dukungan VHDL-2008 (termasuk saya kira ActiveHDL). Kebanyakan simulator tidak menggunakan VHDL-2008 secara default tetapi memberikan argumen baris perintah atau opsi konfigurasi untuk mengaktifkannya.


Saya mencoba apa yang Anda sarankan. alias ch1_byte_data_sent adalah << signal .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (23 downto 0) >>: = x "000000"; Saya mendapatkan kesalahan "Pengidentifikasi atau string literal yang diharapkan" ketika saya melakukan ini. Adakah ide mengapa saya mendapatkan kesalahan? (Maaf atas kesalahan dengan pos, pertama kali saya di sini!)
Suhasini

Jawaban saya mungkin tidak cukup jelas. Saat menggunakan aliasAnda harus menulis tugas dalam pernyataan baru. Keuntungannya adalah Anda dapat menggunakan nama alias alih-alih nama eksternal yang panjang.
Thomas S.

1

Bagaimana saya bisa mengeluarkan sinyal internal kode sumber VHDL saya ke testbench saya sehingga saya bisa melihatnya sebagai bentuk gelombang?

Bangku uji menyiratkan simulasi - suatu entitas tanpa port umumnya tidak sintesis memenuhi syarat.

Walaupun saya belum pernah menggunakan Active-HDL, saya memahaminya memiliki browser desain yang memungkinkan Anda untuk mengambil sinyal dalam hierarki Anda untuk ditampilkan dalam bentuk gelombang Anda. Lihat video Kompilasi dan Simulasi Aldec (5:02, mnt: dtk).

Dan tentang sekarang saya mendapat kesan video dapat menyebabkan kebingungan, mungkin dalam kasus khusus ini.

Pada 2:22 dari akhir, video menunjukkan file do (makro) yang mengontrol simulasi:

2:22 lakukan file

Di mana kita melihat setiap sinyal di tingkat atas desain telah ditambahkan ke tampilan gelombang dengan perintah gelombang. Seharusnya juga dimungkinkan untuk menentukan sinyal di mana saja dalam hierarki desain.

Ide dasarnya adalah banyak simulator memungkinkan Anda untuk menjadwalkan sinyal (dan beberapa variabel memungkinkan) dikumpulkan untuk tampilan bentuk gelombang.

Video singkat ini tidak menunjukkan sinyal untuk level hierarki tambahan. (Ada banyak yang diisi dalam presentasi video pendek).

Saya ingin tahu apakah ada alat yang independen untuk mencapai tujuan saya.

Seperti disebutkan di atas, tujuan Anda tampaknya untuk melihat sinyal internal sebagai bentuk gelombang.

Sekarang untuk berita buruk - tidak ada standarisasi untuk fitur atau antarmuka simulator, penjadwalan sinyal untuk gelombang, dll. Ini semua adalah implementasi yang ditentukan.

Ini dijamin cukup banyak Anda dapat membuang sinyal di mana saja dalam hierarki desain ke penampil bentuk gelombang atau file dump bentuk gelombang dengan implementasi apa pun yang disimulasikan, metode untuk melakukannya adalah implementasi didefinisikan.

Kabar baiknya adalah mereka cenderung menyalin konsep satu sama lain seperti file do, yang dapat Anda hasilkan secara program untuk portabilitas, menggunakan database umum menjelaskan verifikasi fungsional pada beberapa platform implementasi, mengatasi perbedaan dalam sintaksis dan semantik. Kemungkinan juga ada perbedaan dalam sintaks antarmuka baris perintah untuk menjalankan alat secara terprogram.

Gagasan portabilitas tidak merangkul beberapa GUI dengan anggun.


0

Alat seperti xilinx memiliki opsi untuk melihat sinyal internal.

Metode alat-independen sederhana mendeklarasikan jalur output terpisah dan menghubungkan sinyal internal ke jalur ini.


Saya tidak ingin mencampuri port input dan output saya; jadi tidak dapat mendeklarasikan jalur output baru. Saya mendeklarasikan sinyal dalam testbench saya tetapi saya tidak dapat melihat output pada bentuk gelombang (hanya menunjukkan nilai inisialisasi saya nol tanpa menerapkan funcionality). Apakah ada cara lain untuk melakukannya?
Suhasini

0

Jika Anda telah mendeklarasikan sinyal dalam testbench tetapi tidak dapat melihat output apa pun, Anda mungkin memiliki masalah dalam pernyataan instantiation di mana Anda instantiate entitas yang akan diuji. Periksa apakah Anda menginstalnya dengan benar, menggunakan pernyataan instantiasi entitas atau instantiasi komponen. Pastikan sinyal di testbench Anda terhubung ke entitas yang diuji. Jika itu tidak menyelesaikan masalah, poskan kode testbench sehingga kami dapat membantu.


Apa yang dikatakan Thomas, menjawab masalah saya dengan tepat. Saya menyelesaikan kesalahan yang saya sebutkan sebelumnya, yang muncul karena pengaturan default ke VHDL 1993 dalam Active-HDL yang disediakan dengan perangkat lunak desain iCEcube2 Lattice. Sekarang saya menghadapi kesalahan elaborasi yang fatal ketika saya mencoba menginisialisasi simulasi. Saya mencoba mencari mengapa ini terjadi, saya harap ini bukan masalah lisensi yang terbatas.
Suhasini

Bisakah Anda menunjukkan kepada kami pesan itu?
rick
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.