Board logo

标题: 变量声明有效性问题 [打印本页]

作者: graduate    时间: 2007-10-7 10:56     标题: 变量声明有效性问题

我对一个过程做如下定义的时候,出来个错误提示 Error (10482): VHDL error at fft_mult.vhd(38): object "a_ext" is used but not declared,显然是因为使用了a_ext ,而a_ext 却在PROCEDURE后定义引起的

PROCEDURE signed_add (signal A,B:IN std_logic_vector;
  signal C:OUT std_logic_vector) is
 BEGIN
  a_ext <= a(WIDTH-1) & a;
     b_ext <= b(WIDTH-1) & b; 
     sum <= a_ext + b_ext;

     c <= sum(WIDTH downto 1);
 END PROCEDURE signed_add;
 signal a_ext        :std_logic_vector(A'high+1 downto 0);
    signal b_ext        :std_logic_vector(A'high+1 downto 0);
    signal sum          :std_logic_vector(A'high+1 downto 0);

为了克服这个问题,我把变量的声明放到PROCEDURE的前面,如下:

signal a_ext        :std_logic_vector(A'high+1 downto 0);
    signal b_ext        :std_logic_vector(A'high+1 downto 0);
    signal sum          :std_logic_vector(A'high+1 downto 0);
 ROCEDURE signed_add (signal A,B:IN std_logic_vector;
  signal C:OUT std_logic_vector) is
 BEGIN
  a_ext <= a(WIDTH-1) & a;
     b_ext <= b(WIDTH-1) & b; 
     sum <= a_ext + b_ext;

     c <= sum(WIDTH downto 1);
 END PROCEDURE signed_add;

却又出来个错误提示:Error (10482): VHDL error at fft_mult.vhd(35): object "A" is used but not declared

天哪,这不是一个先有鸡还是先有蛋的问题吗?请问兄弟们怎么解决?


作者: caopengly    时间: 2007-10-7 12:38

你把

signal a_ext        :std_logic_vector(A'high+1 downto 0);
    signal b_ext        :std_logic_vector(A'high+1 downto 0);
    signal sum          :std_logic_vector(A'high+1 downto 0);

放到

PROCEDURE signed_add

里面去,而后将信号引出来,试试。


作者: graduate    时间: 2007-10-7 12:48

过程 PROCEDURE 内部不能定义信号类型,而只能定义变量variable !!
作者: caopengly    时间: 2007-10-7 21:21

哦,对不起

那就定义变量吧,平时基本不用过程!!

那就不用过程吧,在综合器综合时,用进程来表示更好。

过程只是便于书写方便,因为可以调用。

但真正的电路实现更接近于进程。

[此贴子已经被作者于2007-10-7 21:24:03编辑过]


作者: graduate    时间: 2007-10-8 16:13

那进程中如果遇到多次 组合逻辑的描述,难道你不想使用过程来“封装”这个组合逻辑描述,使程序易于理解吗 ?
作者: caopengly    时间: 2007-10-8 16:36

“那进程中如果遇到多次 组合逻辑的描述,难道你不想使用过程来“封装”这个组合逻辑描述,使程序易于理解吗 ?”

当然可以,不过也仅限于“易于理解”。






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0