在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3121|回复: 2

[求助] 求助:VHDL中的PROCEDURE无法编译通过

[复制链接]
发表于 2013-6-24 11:03:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
求助:VHDL中的PROCEDURE无法编译通过
把Verilog代码用工具转换成了VHDL,结果仿真文件中的task都被翻译为PROCEDURE,但Modelsim无法编译通过。
以下是完整代码,请各位大神帮忙:
----------------------------------------------------------------------------------------------
--
-- VHDL file generated by X-HDL - Revision 3.2.37  Dec. 3, 2003
-- Sat Jun 22 11:41:10 2013
--
--      Input file         : E:/modelsim_work/111_vhdl/test_pkg.v
--      Design name        : test_pkg
--      Author             :
--      Company            :
--
--      Description        :
--
--
----------------------------------------------------------------------------------------------
--
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_signed;
use IEEE.std_logic_arith.all;
library work;
ENTITY test_pkg IS
END test_pkg;
ARCHITECTURE translated OF test_pkg IS
   CONSTANT xhdl_timescale         : time := 1 ns;
COMPONENT INFO_PKG
      PORT (
      clk                     : IN std_logic;   
      rst                     : IN std_logic;   
      val_a                   : IN std_logic;   
      ip_dest_a               : IN std_logic_vector(31 DOWNTO 0);   
      val_m                   : IN std_logic;   
      type_m                  : IN std_logic_vector(1 DOWNTO 0);   
      port_sour_m             : IN std_logic_vector(3 DOWNTO 0);   
      ip_sour_m               : IN std_logic_vector(31 DOWNTO 0);   
      ip_dest_m               : IN std_logic_vector(31 DOWNTO 0);   
      mpkg_sel         : IN std_logic;   
      apkg_sel         : IN std_logic;     
      mpkg0                 : OUT std_logic_vector(31 DOWNTO 0);   
      mpkg1                : OUT std_logic_vector(31 DOWNTO 0);   
      mpkg2                 : OUT std_logic_vector(31 DOWNTO 0);   
      mpkg3                 : OUT std_logic_vector(31 DOWNTO 0);   
      mpkg4                 : OUT std_logic_vector(31 DOWNTO 0);   
      cpu_m_int               : OUT std_logic;   
      apkg                  : OUT std_logic_vector(31 DOWNTO 0);   
      cpu_a_int               : OUT std_logic
  

);
   END COMPONENT;

   SIGNAL clk                      :  std_logic;   
   SIGNAL rst                      :  std_logic;   
   SIGNAL val_a                    :  std_logic;   
   SIGNAL ip_dest_a                :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL val_m                    :  std_logic;   
   SIGNAL type_m                   :  std_logic_vector(1 DOWNTO 0);   
   SIGNAL port_sour_m              :  std_logic_vector(3 DOWNTO 0);   
   SIGNAL ip_sour_m                :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL ip_dest_m                :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL cpu_int                  :  std_logic;   
   SIGNAL cnt                      :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL mpkg0                    :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL mpkg1                    :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL mpkg2                    :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL mpkg3                    :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL mpkg4                    :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL apkg                     :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL mpkg_sel                 :  std_logic;   
   SIGNAL apkg_sel                 :  std_logic;   
   SIGNAL cpu_a_int                :  std_logic;   
   SIGNAL cpu_m_int                :  std_logic;   
   PROCEDURE write_a (
         ip_dest_ain             : IN std_logic_vector(31 DOWNTO 0))IS
   
      
   BEGIN
      WAIT UNTIL (clk'EVENT AND clk = '1');
      val_a <= '1';   
      ip_dest_a <= ip_dest_ain;   
      WAIT UNTIL (clk'EVENT AND clk = '1');
      val_a <= '0';   
      ip_dest_a <= "00000000000000000000000000000000";   
   END write_a;
   PROCEDURE write_m (
         type_min                : IN std_logic_vector(1 DOWNTO 0);   
         port_sour_min           : IN std_logic_vector(3 DOWNTO 0);   
         ip_sour_min             : IN std_logic_vector(31 DOWNTO 0);   
         ip_dest_min             : IN std_logic_vector(31 DOWNTO 0))IS
   
      
   BEGIN
      WAIT UNTIL (clk'EVENT AND clk = '1');
      val_m <= '1';   
      type_m <= type_min;   
      port_sour_m <= port_sour_min;   
      ip_sour_m <= ip_sour_min;   
      ip_dest_m <= ip_dest_min;   
      WAIT UNTIL (clk'EVENT AND clk = '1');
      val_m <= '0';   
      type_m <= "00";   
      port_sour_m <= "0000";   
      ip_sour_m <= "00000000000000000000000000000000";   
      ip_dest_m <= "00000000000000000000000000000000";   
   END write_m;
BEGIN
   PROCESS
      VARIABLE xhdl_initial : BOOLEAN := TRUE;

   BEGIN
      IF (xhdl_initial) THEN
         clk <= '0';   
         rst <= '0';   
         WAIT UNTIL (clk'EVENT AND clk = '1');
         rst <= '1';   
         FOR X IN 1 TO 2 LOOP
            WAIT UNTIL (clk'EVENT AND clk = '1');
            
         END LOOP;
         rst <= '0';   
         cnt <= "00000000000000000000000000000000";   
         FOR X IN 1 TO 8 LOOP
            cnt <= cnt + "00000000000000000000000000000001";   
            -- <<X-HDL>> Warning - Subprogram write_m referenced before declared. Parameter size/type may be wrong
            write_m("11", "1111", cnt, cnt + "00000000000000000000000000010100");   
            FOR X IN 1 TO 40 LOOP
               WAIT UNTIL (clk'EVENT AND clk = '1');
               
            END LOOP;
         END LOOP;
         -- <<X-HDL>> Warning - Subprogram write_m referenced before declared. Parameter size/type may be wrong
         write_m("11", "1111", '1', "0000000000000000000010101");   
         FOR X IN 1 TO 40 LOOP
            WAIT UNTIL (clk'EVENT AND clk = '1');
            
         END LOOP;
         -- <<X-HDL>> Warning - Subprogram write_m referenced before declared. Parameter size/type may be wrong
         write_m("11", "1111", '0', "0000000000000000000010101");   
         WAIT FOR 600 ns;
         
         cnt <= "00000000000000000000000000000000";   
         FOR X IN 1 TO 8 LOOP
            cnt <= cnt + "00000000000000000000000000000001";   
            -- <<X-HDL>> Warning - Subprogram write_a referenced before declared. Parameter size/type may be wrong
            write_a(cnt);   
            FOR X IN 1 TO 40 LOOP
               WAIT UNTIL (clk'EVENT AND clk = '1');
               
            END LOOP;
         END LOOP;
         -- <<X-HDL>> Warning - Subprogram write_a referenced before declared. Parameter size/type may be wrong
         write_a(3);   
         FOR X IN 1 TO 40 LOOP
            WAIT UNTIL (clk'EVENT AND clk = '1');
            
         END LOOP;
         -- <<X-HDL>> Warning - Subprogram write_a referenced before declared. Parameter size/type may be wrong
         write_a(25);   
         WAIT FOR 600 ns;
         ASSERT (FALSE) REPORT "'$stop' Encountered" SEVERITY FAILURE;   
         xhdl_initial := FALSE;
      ELSE
         WAIT;
      END IF;
   END PROCESS;
   PROCESS
   BEGIN
      WAIT FOR 5 ns;
      clk <= NOT clk;   
   END PROCESS;
   PROCESS
   BEGIN
      WAIT UNTIL (clk'EVENT AND clk = '1') OR (rst'EVENT AND rst = '1');
      IF (rst = '1') THEN
         mpkg_sel <= '0';   
      ELSE
         IF (cpu_m_int = '1') THEN
            mpkg_sel <= '1';   
         ELSE
            IF (NOT cpu_m_int = '1') THEN
               mpkg_sel <= '0';   
            ELSE
               mpkg_sel <= mpkg_sel;   
            END IF;
         END IF;
      END IF;
   END PROCESS;
   PROCESS
   BEGIN
      WAIT UNTIL (clk'EVENT AND clk = '1') OR (rst'EVENT AND rst = '1');
      IF (rst = '1') THEN
         apkg_sel <= '0';   
      ELSE
         IF (cpu_a_int = '1') THEN
            apkg_sel <= '1';   
         ELSE
            IF (NOT cpu_a_int = '1') THEN
               apkg_sel <= '0';   
            ELSE
               apkg_sel <= apkg_sel;   
            END IF;
         END IF;
      END IF;
   END PROCESS;
   -- <<X-HDL>> Can't find translated component 'INFO_PKG'. Port & generic names and types may not match. No template will be included
   U_INFO_PKG : INFO_PKG
      PORT MAP (
         clk => clk,
         rst => rst,
         val_a => val_a,
         ip_dest_a => ip_dest_a,
         val_m => val_m,
         type_m => type_m,
         port_sour_m => port_sour_m,
         ip_sour_m => ip_sour_m,
         ip_dest_m => ip_dest_m,
         mpkg_sel => mpkg_sel,
         apkg_sel => apkg_sel,
         cpu_m_int => cpu_m_int,
         mpkg0 => mpkg0,
         mpkg1 => mpkg1,
         mpkg2 => mpkg2,
         mpkg3 => mpkg3,
         mpkg4 => mpkg4,
         cpu_a_int => cpu_a_int,
         apkg => apkg);   
   
END translated;
发表于 2013-6-25 08:49:09 | 显示全部楼层
翻译有时候还是不靠谱啊
发表于 2013-6-27 13:58:24 | 显示全部楼层
vhdl转verilog靠谱,verilog转VHDL不完全靠谱的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 06:36 , Processed in 0.020689 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表