2017-06-26 1 views
2

VHDL文字列に接続できるSystemVerilogモジュールを作成しようとしています。しかし、私はSystemVerilogで対応する型を見つけることができません。タイプ "string"を使用すると、Questaで詳細なエラーが発生します。VHDL文字列に対応するSystemVerilog構文はどれですか?

VHDLコード:

library IEEE; 
use IEEE.std_logic_1164.all; 

entity tb_serdes_support is  
end entity; 

architecture beh of tb_serdes_support is  
    component serdes_support is port ( 
     cmd   : in string  
    ); 
    end component; 

    signal cmd : string(1 to 100); 

begin  
    i_srds_support: serdes_support port map (
     cmd   => cmd  
    ); 

    process 
    begin  
     cmd(1 to 12) <= "hello world!";  
     wait for 10 ns;  
     cmd(1 to 18) <= "hello world again!";  
     wait;  
    end process;  

end architecture; 

SVコード:

module serdes_support (cmd); 

import uvm_pkg::*; 

input string cmd; 

always_comb begin  
    $display(cmd);  
end 

endmodule 

編集:エラーメッセージ(クエスタ):

** Error: (vsim-3059) Cannot connect a VHDL array signal to Verilog scalar port 'cmd'.

答えて

1

適切な "ビットベクトル"でVHDL文字列を変換し、この "ビットベクトル"をVerilog環境で使用することができます。 Verilogでは、それを補間することができます。 %sで

mov_vhd.vhd:

LIBRARY ieee; 
USE ieee.std_logic_1164.ALL; 
USE ieee.numeric_std.ALL; 

ENTITY mod_vhd IS 
    PORT 
     (
      clk : IN std_ulogic; 
      str_out : OUT string 
     ); 
END ENTITY mod_vhd; 

ARCHITECTURE sim OF mod_vhd IS 

BEGIN 

    clock_out_string: PROCESS IS 


    BEGIN 
     FOR i IN 0 TO 9 loop 
      WAIT UNTIL rising_edge(clk); 
      str_out <= "Hallo "&integer'IMAGE(i); 
     END LOOP; 

    END PROCESS clock_out_string; 

END ARCHITECTURE sim; 

mod_ver.sv:

module mod_ver (
    input [79:0] my_string 
); 

initial begin 
    forever @my_string 
     $display ("see %s",my_string); 
end 


endmodule // mod_ver 

top_vhd.vhd

LIBRARY ieee; 
USE ieee.std_logic_1164.ALL; 
USE ieee.numeric_std.ALL; 

ENTITY top_vhd IS 
END ENTITY top_vhd; 

ARCHITECTURE sim OF top_vhd IS 

SIGNAL clk: std_ulogic := '0'; 
SIGNAL str_out : string (1 TO 10); 
SIGNAL str_out_ver : std_logic_vector (79 DOWNTO 0); 

BEGIN 

    clk <= NOT clk AFTER 10 ns; 

    mod_vhd_i: ENTITY work.mod_vhd 
     PORT MAP (
      clk  => clk, 
      str_out => str_out 
     ); 

    gen_vec: for i in str_out'range generate 
     str_out_ver((11-i)*8-1 downto (11-i)*8-8) <= std_logic_vector(to_unsigned(character'pos(str_out(i)), 8)); 
    end generate;  

    mod_ver_i: ENTITY work.mod_ver 
     PORT MAP (
      my_string => str_out_ver 
     ); 


END ARCHITECTURE sim; 
3

VHDLにおけるstringはで一方、固定サイズの配列でありますSystemVerilogは可変サイズの特異型です。 VHDL文字列をSystemVerilogのバイト配列に変換する必要があるかもしれません。

+0

私は[こちら]からの回答であなたを引用するちょうど約ました( https://verificationacademy.com/forums/systemverilog/passing-string-sv-systemc-port)。 ;) – JHBonarius

関連する問題