2011-10-28 27 views
7

Gần đây tôi đã bắt đầu sử dụng các bản ghi cho các định nghĩa cổng của mình, đặc biệt nếu tôi muốn nhóm các tín hiệu thuộc về một giao diện nhất định. Tuy nhiên, vấn đề tôi đang phải đối mặt ở đây là tôi không thể vượt qua, nói chiều rộng của một std_logic_vector, cho các thực thể bằng phương tiện của một chung chung. Vì vậy, những gì tôi về cơ bản muốn làm là như sau:Truyền Generics để ghi các loại cổng

library ieee; 
use ieee.std_logic_1164.all; 
use work.math_pkg.all; 

package fifo_pkg is 

    type fifo_in_type is record 
    data_in : std_logic_vector(DATA_WIDTH_??- 1 downto 0); 
    rd  : std_logic; 
    wr  : std_logic; 
    end record; 

    type fifo_out_type is record 
    data_out : std_logic_vector(DATA_WIDTH_?? - 1 downto 0); 
    empty : std_logic; 
    full  : std_logic; 
    end record; 

    component fifo is 
    generic 
     (
     MIN_DEPTH : integer; 
     DATA_WIDTH : integer 
     ); 
    port 
     (
     clk : in std_logic; 
     res_n : in std_logic; 
     i  : in fifo_in_type; 
     o  : out fifo_out_type 
     ); 
    end component fifo; 

end fifo_pkg; 

Vì vậy, các giải pháp lý tưởng sẽ là khi tôi có thể sử dụng cùng chung trong hồ sơ của tôi như tôi đã làm trong đơn vị. (Vì vậy, DATA_WIDTH là giống như DATA_WIDTH_ ??). Tôi biết rằng điều này sẽ làm việc bằng cách nào đó với vhdl 2008, tuy nhiên quartus II 11sp1 của tôi không hỗ trợ generics trong hồ sơ.

Có cách nào thanh lịch để đạt được loại "đi chung" đó có thể tổng hợp không? Tôi biết rằng người ta chỉ có thể lưu trữ một hằng số trong gói, nhưng sau đó tôi không thể sử dụng cùng một gói nămo để tạo ra một số FIFO với độ rộng khác nhau.

Nhờ một triệu, T

Trả lời

8

Bạn có thể sử dụng Generics loại với Quartus?

Sau đó, bạn hãy đặt loại hoàn toàn không xác định, do đó bạn có thể tạo một FIFO của integers hoặc bất kỳ loại dữ liệu khác:

package fifo_pkg is 
    generic (type element_type); 

    type fifo_in_type is record 
    data_in : element_type; 
    rd  : std_logic; 
    wr  : std_logic; 
    end record; 

    type fifo_out_type is record 
    data_out : element_type; 
    empty : std_logic; 
    full  : std_logic; 
    end record; 

    component fifo is 
    generic 
     (
     MIN_DEPTH : integer; 
     DATA_WIDTH : integer 
     ); 
    port 
     (
     clk : in std_logic; 
     res_n : in std_logic; 
     i  : in fifo_in_type; 
     o  : out fifo_out_type 
     ); 
    end component fifo; 

end fifo_pkg; 

Sau đó, khi bạn muốn sử dụng nó:

package wide_fifo_pkg is new fifo_pkg 
    generic map (type => std_logic_vector(31 downto 0)); 

và sau đó bạn có thể sử dụng fifo_in_typefifo_out_type:

signal i : fifo_in_type; 

Nếu bạn có nhiều hơn một FIFO trong một đơn vị thiết kế, bạn có thể tạo ra một số phiên bản của gói và sử dụng tiền tố gói để có được đúng loại:

package narrow_fifo_pkg is new fifo_pkg 
    generic map (type => std_logic_vector(3 downto 0)); 

signal i32 : wide_fifo_pkg.fifo_in_type; 
signal i4 : narrow_fifo_pkg.fifo_in_type; 

VHDL Một 2008 tùy chọn: bạn có thể có một loại không bị giới hạn kỷ lục:

type fifo_in_type is record 
    data_in : std_logic_vector; 
    rd  : std_logic; 
    wr  : std_logic; 
    end record; 

mà sau đó bạn có thể tạo subtype s của cho các mục đích khác nhau của bạn:

subtype fifo1_data_type is fifo_in_type(data_in(31 downto 0)); 
subtype fifo2_data_type is fifo_in_type(data_in(15 downto 0)); 

Không có ý tưởng nếu Quartus hỗ trợ một trong các tùy chọn đó - vui lòng cho chúng tôi biết!

+0

Hi Martin, Cảm ơn bạn đã đề xuất, cả hai đều đẹp và thanh lịch. Tuy nhiên điều này không hoạt động trong phiên bản Quartus 11.0 sp1. Dường như quartus chỉ hỗ trợ một tập hợp con rất hạn chế của vhdl 2008 cho đến nay. Bất kỳ ý tưởng khác để thực hiện điều này? Tôi tự hỏi nếu điều đó sẽ làm việc với Synplify ... Cảm ơn, T – user1017739

+0

Đó là một sự xấu hổ (về Quartus), nhưng không hoàn toàn bất ngờ. Tệp trợ giúp Synplify ngụ ý rằng nó không biết về các bản ghi với các mảng không bị ràng buộc * và * loại generics. –

+0

có thực sự, đó là một chút thất vọng: ( – user1017739

Các vấn đề liên quan