Làm cách nào để đưa tín hiệu bên trong của mô-đun thấp hơn đến mô-đun hàng đầu trong VHDL?


11

Làm cách nào tôi có thể đưa tín hiệu nội bộ của mã nguồn VHDL vào testbench của mình để tôi có thể xem chúng dưới dạng sóng? Tôi sử dụng HDL hoạt động. Tôi muốn biết nếu có bất kỳ công cụ độc lập phương pháp để đạt được mục tiêu của tôi. Bất kỳ trợ giúp được đánh giá cao.

Tôi nhận được lỗi này bây giờ.nhập mô tả hình ảnh ở đây

Mã nguồn của tôi là

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;

Mã testbench của tôi là

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;

Khi bạn bắt đầu mô phỏng, trình giả lập của bạn sẽ xây dựng tất cả các yếu tố. Sau đó, nó tìm kiếm các liên kết bạn đã thực hiện bằng cách sử dụng tên bên ngoài. Dường như với tôi rằng con đường của bạn là sai. Tôi chỉnh sửa câu trả lời của mình để cung cấp thêm chi tiết về việc xây dựng các đường dẫn. Không có kiến ​​thức về thiết kế của bạn, tôi không thể nói điều gì sai với con đường của bạn.
Thomas S.

Giống như tôi đã nói trong câu trả lời của tôi, bạn phải sử dụng nhãn chứ không phải tên thực thể. Đường dẫn chính xác phải là .tp_spi_dac.uut.ch1_byte_data_sent.
Thomas S.

Đề xuất của bạn đã giải quyết vấn đề của tôi @ThomasS. Cảm ơn rất nhiều! Tôi gặp vấn đề với phiên bản VHDL mà tôi đã giải quyết sau khi xem video theo đề xuất của David. Tôi biết viết thư cảm ơn không được khuyến nghị, nhưng cảm ơn Thomas đã sửa lỗi chỉnh sửa của tôi (tôi thực sự bối rối với định dạng đánh dấu này).
Suhasini

Câu trả lời:


11

Những gì bạn đang tìm kiếm được gọi là tên bên ngoài (hoặc tên phân cấp) trong VHDL. Chúng có thể được sử dụng để phá vỡ khả năng hiển thị phạm vi / phân cấp. Cú pháp giống như ví dụ dưới đây.

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

Bạn cũng có thể truy cập các hằng và biến với tên bên ngoài. Bạn phải thay đổi loại trong loại bên ngoài mặc dù. Bạn có thể sử dụng tên bên ngoài trực tiếp để truy cập đọc / ghi. Tuy nhiên, bạn nên sử dụng bí danh để cải thiện khả năng đọc.

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

Tên bên ngoài phải chứa đường dẫn đến thành phần bạn muốn truy cập. Đường dẫn có thể là tuyệt đối hoặc tương đối. Các yếu tố riêng lẻ trong đường dẫn của bạn được phân tách bằng dấu chấm. Lưu ý rằng bạn phải cung cấp nhãn của cá thể / process / entity / ... chứ không phải tên. Đường dẫn tuyệt đối bắt đầu bằng một .tên theo cấp độ cao nhất của bạn. Đối với các đường dẫn tương đối, bạn có thể sử dụng ^để di chuyển lên trong cấu trúc phân cấp. Khi sử dụng hằng / tín hiệu từ một số gói, bạn cũng có thể sử dụng @để di chuyển đến thư viện.

Một ví dụ cho một đường dẫn tuyệt đối là

.tb_name.instance_label.sub_instance_label.signal_name

Để truy cập cùng một phần tử từ testbench với tên tương đối, bạn có thể sử dụng

instance_label.sub_instance_label.signal_name

Khi bạn muốn truy cập một số tín hiệu / hằng số testbench từ sub_instance, bạn có thể sử dụng

^.^.constant_name

Để truy cập một số hằng số khác trong gói cấu hình nằm trong thư viện cấu hình, bạn có thể sử dụng

@config.pkg_name.other_constant_name

Bạn có thể sử dụng trình duyệt thiết kế / thư viện mô phỏng như David đã chỉ ra để tìm tên đường dẫn chính xác.

Tính năng này đã được thêm vào trong VHDL-2008 vì vậy nó phải được hỗ trợ bởi tất cả các công cụ đã hỗ trợ VHDL-2008 (bao gồm cả ActiveHDL tôi nghĩ). Hầu hết các trình giả lập không sử dụng VHDL-2008 theo mặc định nhưng cung cấp tùy chọn cấu hình hoặc đối số dòng lệnh để kích hoạt nó.


Tôi đã thử những gì bạn đề nghị. bí danh ch1_byte_data_sent là << signal .TBClickI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (23 dowo 0) >>: = x "000000"; Tôi gặp lỗi "Định danh hoặc chuỗi ký tự theo dự kiến" khi tôi thực hiện việc này. Bất cứ ý tưởng tại sao tôi nhận được lỗi? (Xin lỗi vì bất kỳ sai lầm nào với bài đăng, lần đầu tiên của tôi ở đây!)
Suhasini

Câu trả lời của tôi có thể không đủ rõ ràng. Khi sử dụng aliasbạn phải viết bài tập trong một câu lệnh mới. Ưu điểm là bạn có thể sử dụng tên bí danh thay vì tên bên ngoài dài.
Thomas S.

1

Làm cách nào tôi có thể đưa các tín hiệu bên trong của mã nguồn VHDL vào testbench của mình để tôi có thể xem chúng dưới dạng sóng?

Một băng ghế thử nghiệm ngụ ý mô phỏng - một thực thể không có bất kỳ cổng nào thường không đủ điều kiện tổng hợp.

Mặc dù tôi chưa bao giờ sử dụng Active-HDL nhưng tôi hiểu rằng nó có một trình duyệt thiết kế cho phép bạn chọn tín hiệu trong hệ thống phân cấp của mình để hiển thị ở dạng sóng của bạn Xem video tổng hợp và mô phỏng của Aldec (5:02, phút: giây).

Và bây giờ tôi có ấn tượng rằng video có thể gây nhầm lẫn, có lẽ trong trường hợp cụ thể này.

Vào lúc 2:22 từ cuối video cho thấy một tệp do (macro) điều khiển mô phỏng:

2:22 làm tập tin

Nơi chúng ta thấy mọi tín hiệu ở cấp cao nhất của thiết kế đã được thêm vào màn hình dạng sóng bằng lệnh wave. Cũng có thể chỉ định tín hiệu ở bất kỳ đâu trong hệ thống phân cấp thiết kế.

Ý tưởng cơ bản là rất nhiều trình giả lập cho phép bạn lên lịch tín hiệu (và một số biến cho phép) được thu thập để hiển thị dạng sóng.

Video ngắn này đơn giản là không hiển thị tín hiệu cho các cấp thứ bậc công ty con. (Có rất nhiều nhồi trong một bài thuyết trình video ngắn).

Tôi muốn biết nếu có bất kỳ công cụ độc lập phương pháp để đạt được mục tiêu của tôi.

Như đã lưu ý ở trên, mục tiêu của bạn dường như là xem các tín hiệu bên trong dưới dạng sóng.

Bây giờ đối với tin xấu - không có tiêu chuẩn hóa cho các tính năng hoặc giao diện giả lập, tín hiệu lập lịch cho kết xuất dạng sóng, v.v. Đây là tất cả các triển khai được xác định.

Nó được đảm bảo khá nhiều, bạn có thể kết xuất tín hiệu ở bất cứ đâu trong hệ thống phân cấp thiết kế cho trình xem dạng sóng hoặc tệp kết xuất dạng sóng với bất kỳ triển khai nào mô phỏng, phương thức để thực hiện được xác định như vậy.

Tin tốt là họ có xu hướng sao chép các khái niệm từ nhau như các tệp mà bạn có thể tạo lập trình cho tính di động, sử dụng cơ sở dữ liệu chung mô tả xác minh chức năng trên nhiều nền tảng triển khai, khắc phục sự khác biệt về cú pháp và ngữ nghĩa. Cũng có thể có sự khác biệt trong cú pháp giao diện dòng lệnh để gọi các công cụ theo chương trình.

Ý tưởng về tính di động không bao gồm nhiều GUI một cách duyên dáng.


0

Các công cụ như xilinx có tùy chọn để xem tín hiệu nội bộ.

Phương pháp độc lập với công cụ đơn giản là khai báo các dòng đầu ra riêng biệt và kết nối các tín hiệu bên trong với các dòng này.


Tôi không muốn can thiệp với các cổng đầu vào và đầu ra của tôi; vì vậy không thể khai báo bất kỳ dòng đầu ra mới. Tôi đã khai báo các tín hiệu trong testbench của mình nhưng không thể thấy bất kỳ đầu ra nào trên dạng sóng (chỉ hiển thị giá trị ban đầu của tôi bằng 0 mà không thực hiện chức năng). CÒn cách nào khác để thực hiện việc này không?
Suhasini

0

Nếu bạn đã khai báo các tín hiệu trong testbench nhưng không thể thấy bất kỳ đầu ra nào, bạn có thể gặp vấn đề trong câu lệnh khởi tạo trong đó bạn khởi tạo thực thể cần kiểm tra. Kiểm tra xem bạn đã khởi tạo nó một cách chính xác chưa, bằng cách sử dụng câu lệnh khởi tạo thực thể hoặc khởi tạo thành phần. Đảm bảo rằng các tín hiệu trong testbench của bạn được kết nối với thực thể được kiểm tra. Nếu điều đó không giải quyết được vấn đề, hãy đăng mã testbench để chúng tôi có thể giúp đỡ.


Những gì Thomas nói, giải quyết chính xác vấn đề của tôi. Tôi đã giải quyết lỗi tôi đã đề cập trước đó, lỗi phát sinh do mặc định được đặt thành VHDL 1993 trong Active-HDL được cung cấp cùng với phần mềm thiết kế iCEcube2 của Lattice. Bây giờ tôi phải đối mặt với một lỗi công phu nghiêm trọng khi tôi cố gắng khởi tạo mô phỏng. Tôi đang cố gắng tìm ra lý do tại sao điều này xảy ra, tôi hy vọng nó không phải là một vấn đề giấy phép hạn chế.
Suhasini

Bạn có thể chỉ cho chúng tôi thông điệp đó?
rick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.