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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6961|回复: 7

[求助] 为什么在quartus ii中没错在modelsim中却提示:Unknown identifier std_logic_vecter

[复制链接]
发表于 2011-4-16 00:37:54 | 显示全部楼层 |阅读模式

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

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

x
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
ENTITY test IS
END test;
ARCHITECTURE test OF test IS
SIGNAL clock: STD_LOGIC :='0';
SIGNAL a,b: INTEGER RANGE 0 TO 3:=0;
SIGNAL cc: INTEGER RANGE 0 TO 1:=0;
SIGNAL aaa,bbb: STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL ccb: STD_LOGIC;
COMPONENT adder IS
PORT (a,b:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
   clk,cc:IN STD_LOGIC;
   s:OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
   cout:OUT STD_LOGIC);
END COMPONENT;
--------------------------------------
FUNCTION conv_std_logic(SIGNAL x:INTEGER)
   RETURN STD_LOGIC IS
   variable result: STD_LOGIC;
BEGIN
  IF (x=0) THEN
     result:= '0';
  ELSE
      result:= '1';
END IF;
         
  RETURN result;
END conv_std_logic;
---------------------------------------
FUNCTION conv_std_logic_vector(SIGNAL x:INTEGER)
   RETURN STD_LOGIC_VECTOR IS
   VARIABLE result:STD_LOGIC_VECTER(1 downto 0);
  BEGIN
     IF(x=0) then
         rusult :="00";
    ELSIF(x=1)then
     rusult :="01";
  ELSIF(x=2)then
     rusult :="10";
  ELSe
     rusult :="11";
  end if;
RETURN result;
END conv_std_logic_vector;
----------------------------------
BEGIN
  aaa <= conv_std_logic_vector(a);
  bbb<=conv_std_logic_vector(b);
  ccb<=conv_std_logic(cc);
u1: adder PORT MAP(aaa=>a,bbb=>b,ccb=>cc,s=>open,cout=>open);
  clock <= NOT clock  AFTER 100ns;
PROCESS (clock)
  BEGIN
    IF(clock'EVENT AND clock = '1') THEN
      IF( a< 3) THEN a<=a+1; ELSE a<=0;END IF ;
    END IF;
  END PROCESS;
PROCESS (clock,a)
  BEGIN
    IF (clock'EVENT AND clock='1') THEN
      IF (a=3) THEN
      IF( b < 3) THEN  b<=b+1; ELSE b<=0;END IF ;  
      END IF;
    END IF;
  END PROCESS;
PROCESS (clock,b)
   BEGIN
    IF(clock'EVENT AND clock = '1') THEN
      IF (b=3 AND a=0) THEN
      IF (cc=0) THEN cc<=cc+1;ELSE CC<=0; END IF;
      END IF;
    END IF;
  END PROCESS;
  
END test;
发表于 2011-4-16 09:01:02 | 显示全部楼层
写错了吧,应该是std_logic_vector  是不是?
 楼主| 发表于 2011-4-16 10:31:54 | 显示全部楼层
哦,谢谢。找到了,vector写错了,还有result,component PORT MAP也映射错了,昨晚就是查不出,哎!
谢谢!!
 楼主| 发表于 2011-4-16 10:49:11 | 显示全部楼层
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
ENTITY test IS
END test;
ARCHITECTURE test OF test IS
SIGNAL clock: STD_LOGIC :='0';
SIGNAL a,b: INTEGER RANGE 0 TO 3:=0;
SIGNAL        cc: INTEGER RANGE 0 TO 1:=0;
SIGNAL aaa,bbb: STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL        ccb: STD_LOGIC;
COMPONENT adder IS
        PORT (a,b:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
                        clk,cc:IN STD_LOGIC;
                        s:OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
                        cout:OUT STD_LOGIC);
END COMPONENT;
--------------------------------------
FUNCTION conv_std_logic(SIGNAL xin:INTEGER)
   RETURN STD_LOGIC IS
   variable result: STD_LOGIC;
BEGIN
  IF (xin=0) THEN
     result:= '0';
  ELSE
      result:= '1';
        END IF;
         
  RETURN result;
END conv_std_logic;
---------------------------------------
FUNCTION conv_std_logic_vector(SIGNAL xin:INTEGER)
   RETURN STD_LOGIC_VECTOR IS
   VARIABLE result:STD_LOGIC_VECTOR(1 downto 0);
  BEGIN
     IF(xin=0) then
         result :="00";
           ELSIF(xin=1)then
                   result :="01";
                ELSIF(xin=2)then
                   result :="10";
                ELSe
                   result :="11";
                end if;
RETURN result;
END conv_std_logic_vector;
----------------------------------
BEGIN
  aaa <= conv_std_logic_vector(a);
  bbb <=conv_std_logic_vector(b);
  ccb <=conv_std_logic(cc);-----di 50 hang----
u1: adder PORT MAP(a=>aaa,b=>bbb,cc=>ccb,clk=>clock,s=>open,cout=>open);
  clock <= NOT clock  AFTER 100ns;
PROCESS (clock)
  BEGIN
    IF(clock'EVENT AND clock = '1') THEN
      IF( a< 3) THEN a<=a+1; ELSE a<=0;END IF ;
    END IF;
  END PROCESS;
PROCESS (clock,a)
  BEGIN
    IF (clock'EVENT AND clock='1') THEN
      IF (a=3) THEN
      IF( b < 3) THEN  b<=b+1; ELSE b<=0;END IF ;  
      END IF;
    END IF;
  END PROCESS;
PROCESS (clock,b)
   BEGIN
    IF(clock'EVENT AND clock = '1') THEN
      IF (b=3 AND a=0) THEN
      IF (cc=0) THEN cc<=cc+1;ELSE CC<=0; END IF;
      END IF;
    END IF;
  END PROCESS;
  
END test;
但是我吧程序改为上面的一段之后,用modelsim仿真的时候,提示:
Fatal: (vsim-3709) Signal formal "xin" bounds -2147483648 to 2147483647 (null range) are not identical to actual bounds 0 to 1.
#    Time: 0 ns  Iteration: 0  Process: /test/line__50 File: C:/Documents and Settings/liubing/My Documents/test.vhd
# Fatal error in Architecture test at C:/Documents and Settings/liubing/My Documents/test.vhd line 50
请问是什么原因。
 楼主| 发表于 2011-4-16 10:51:30 | 显示全部楼层
附上,adder的程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY adder IS
        PORT (a,b:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
                        clk,cc:IN STD_LOGIC;
                        s:OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
                        cout:OUT STD_LOGIC);
END adder;
ARCHITECTURE add OF adder IS
        SIGNAL g,p:STD_LOGIC_VECTOR (1 DOWNTO 0);
        SIGNAL c:STD_LOGIC_VECTOR (1 DOWNTO 0);
BEGIN

PROCESS (clk)
BEGIN
FOR i IN g'RANGE LOOP
        IF (clk'EVENT AND clk = '1') THEN
        g(i)<=a(i) AND b(i);
        p(i)<=a(i) XOR b(i);
        END IF;
END LOOP;
END PROCESS;

--CHAN SHENG JIN WEI WEI--
PROCESS (clk,p,g)
BEGIN
        IF (clk'EVENT AND clk = '1') THEN
                c(0)<=g(0) OR (p(0) AND cc);
                c(1)<=g(1) OR (p(1) AND g(0)) OR ((p(1) AND p(0)) AND cc);
        END IF;
END PROCESS;
cout<=c(1);

--QIU he dan yuan---
PROCESS (clk,c)
BEGIN
        IF (clk'EVENT AND clk='1') THEN
                s(1)<=p(1) XOR c(0);
           s(0)<=p(0) XOR cc;
        END IF;
END PROCESS;
END add;
发表于 2011-4-16 11:14:12 | 显示全部楼层
回复 5# xmffsf


    应该是变量类型声明不一样吧,第50行的CC声明和函数内声明的类型不一样,检查一下吧,VHDL代码风格要求比较严格。
 楼主| 发表于 2011-4-16 11:45:48 | 显示全部楼层
是一样的啊!SIGNAL   cc: INTEGER RANGE 0 TO 1:=0;
FUNCTION conv_std_logic(SIGNAL xin:INTEGER)
函数的输入类型,和cc的类型一样啊。而且用modelsim编译的时候没错,只是仿真的时候运行才出错。
 楼主| 发表于 2011-4-17 09:32:52 | 显示全部楼层
找到了,是函数的INTEGER类型,我在函数参数定义的地方加上一个范围就对了,不是函数参数不能指明范围吗????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-30 05:48 , Processed in 0.020843 second(s), 7 queries , Gzip On, MemCached On.

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