Jump to content

    

Передать структуру из компонентка VHDL в verilog или system_verilog

	type ipv4_rx_header_type is record
		is_valid				: std_logic;
		protocol				: std_logic_vector (7 downto 0);
		data_length			: STD_LOGIC_VECTOR (15 downto 0);	-- user data size, bytes
		src_ip_addr 		: STD_LOGIC_VECTOR (31 downto 0);
		num_frame_errors	: std_logic_vector (7 downto 0);
		last_error_code	: std_logic_vector (3 downto 0);		-- see RX_EC_xxx constants
		is_broadcast		: std_logic;								-- set if the msg received is a broadcast
	end record;

entity UDP_Complete_nomac is
    Port (
			-- UDP TX signals
....
			udp_txi					: in udp_tx_type;							-- UDP tx cxns
....			udp_rxo					: out udp_rx_type;
			-- IP RX signals
			ip_rx_hdr				: out ipv4_rx_header_type;
....			);
end UDP_Complete_nomac;

Здравствуйте.

При использовании компонента UDP_Complete_nomac на VHDL из verilog,  как подключить порты ip_rx_header из verilog или SV файла ?

Или единственное решение: обертка на VHDL компонента UDP_Complete_nomac, в которой структуры разбиваются на отдельные std_logic_vector, и выводятся в описание портов как отдельные std_logic_vector ?

Заранее спасибо.

 

Share this post


Link to post
Share on other sites
3 hours ago, gosha said:

Или единственное решение: обертка на VHDL компонента UDP_Complete_nomac, в которой структуры разбиваются на отдельные std_logic_vector, и выводятся в описание портов как отдельные std_logic_vector ? 

да

Share this post


Link to post
Share on other sites
50 minutes ago, des00 said:

да

Меня вот тоже этот вопрос интересовал, неужели получается никак нельзя VHDLную структуру засунуть в вериложный порт напрямую? Без оберток? А можно ли некую функцию написать или только лишь обертка?

Share this post


Link to post
Share on other sites
12 minutes ago, AVR said:

Меня вот тоже этот вопрос интересовал, неужели получается никак нельзя VHDLную структуру засунуть в вериложный порт напрямую? Без оберток? А можно ли некую функцию написать или только лишь обертка? 

совместимость есть на уровне кривого преобразования std_logic в wire/reg/logic/bit (кривое, потому что у std_logic 9 значений, а тут 4/4/4/2). user defined типы (кроме упакованных структур, которые переводятся в битовые вектора) в ручную. можно через функции, но в ручную.

Share this post


Link to post
Share on other sites

Если примменительно к симуляции в Modelsim, то можно передавать VHDL packages в Verilog/SystemVerilog (с некоторыми ограничениями и конвертацией типов). Называется это всё "Sharing User-Defined Types". Необходимый VHDL package нужно компилить с флагом -mixedsvvh.

Пример из user manual:

Цитата

Consider the following VHDL package that you want to use at a SystemVerilog-VHDL boundary:

--/*----------pack.vhd---------------*/
package pack is
  type st_pack is record
    a: bit_vector (3 downto 0);
    b: bit;
    c: integer;
   end record;
constant c : st_pack := (a=>"0110", b=>'0', c=>4);
end package;

 

You must compile this package with the -mixedsvvh argument for vcom:

vcom -mixedsvvh pack.vhd

Import this package into the SystemVerilog design, as if it were a SystemVerilog package.

 

--/*------VHDL_entity--------*/
use work.pack.all;
entity top is
end entity;
architecture arch of top is
  component bot
    port(in1 : in st_pack;
      in2 : bit_vector(1 to c.c);
      out1 : out st_pack);
    end component;
begin
end arch;

 

/*------SV_file--------*/
import pack::*; // including the VHDL package in SV
module bot(input st_pack in1, input bit [1:c.c] in2, output st_pack out1);
endmodule

 

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now