打印

VHDL编译成功,但做试验有问题,请大侠知道

[复制链接]
2382|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xubanghui|  楼主 | 2007-7-14 07:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

 --  表示8位数值比较器>=DCH,输出=1
LIBRARY  IEEE ;
USE  IEEE.STD_LOGIC_1164.ALL ;
ENTITY  comparator_bc  IS 
PORT (  dataA  :  IN  STD_LOGIC_VECTOR ( 7 DOWNTO  0 ) ;
        rfmute :  IN STD_LOGIC;
        greater_bc  :  OUT  STD_LOGIC );  --  A大于DCH输出信号
END  ENTITY  comparator_bc ;

ARCHITECTURE  behavioral  OF  comparator_bc IS
SIGNAL  dataB :  STD_LOGIC_VECTOR ( 7 DOWNTO  0 ) ;--can't in

BEGIN
inst_comparator : PROCESS ( rfmute,dataA, dataB )
BEGIN
    dataB <= "11011100";   --dataB=DCH
    IF  ( rfmute='1'  )  THEN
            FOR  i  IN  7  DOWNTO  0  LOOP
            IF  ( dataA ( i ) = '1'  AND  dataB ( i ) = '0' )  THEN
               greater_bc  <=   '1' ;
            EXIT ;   --  已经判断出dataA> dataB,则跳出循环
            ELSE
               greater_bc  <=   '0' ;
            END IF;
            END LOOP;     
    ELSE
    greater_bc  <=   '0' ;
    END  IF ;
END  PROCESS  inst_comparator ;
END  ARCHITECTURE  behavioral ;

在maxplus2试验时,EXIT要删除,否则编译不能通过。
做试验时,在高四位输入为1101时输出改变,与低四位无关,不知道程序有什么问题。请高手指点。谢谢!

相关帖子

沙发
xubanghui|  楼主 | 2007-7-14 07:59 | 只看该作者

重新试验只与最低位有关,

重新试验只与最低位有关,与其他位无关。不知道程序那儿有问题

使用特权

评论回复
板凳
sibaidong| | 2007-7-14 08:53 | 只看该作者

程序有点问题吧,等于时就输不出1

loop 循环我很少用,没实验过!

使用特权

评论回复
地板
xubanghui|  楼主 | 2007-7-14 10:25 | 只看该作者

那一般用什么语句解决?

那一般用什么语句解决?

使用特权

评论回复
5
zhanghao35| | 2007-7-14 17:44 | 只看该作者

用变量不要用信号

signal定义的信号要到最后一个生效,variable 一有变化就跟着变。这里用到了许多if,编译是不是有告警,“the last if will take effect".
楼主可以试试!

使用特权

评论回复
6
xubanghui|  楼主 | 2007-7-14 20:02 | 只看该作者

您说的对,如何用VARIABLE,请您指点一下。

您说的对,编译警告显示:found multiple assignments to the same signal or signal bit"greater_bc"-only the last assignment will take effect.请教如何用VARIABLE,请指点。给个例题也可以。谢谢

使用特权

评论回复
7
xubanghui|  楼主 | 2007-7-15 09:39 | 只看该作者

花了两天解决这个问题,少用FOR LOOP语句,供大家学习。

LIBRARY  IEEE ;
USE  IEEE.STD_LOGIC_1164.ALL ;
ENTITY  comparator_bc  IS  --  表示8位数值比较器>=DCH,
PORT (  dataA  :  IN  STD_LOGIC_VECTOR ( 7 DOWNTO  0 ) ;
        rfmute :  IN STD_LOGIC;
        bigerout  :  OUT  STD_LOGIC );  --  A大于DCH输出信号
END  ENTITY  comparator_bc ;

ARCHITECTURE  behavioral  OF  comparator_bc IS
SIGNAL temp_dataA : STD_LOGIC_VECTOR( 4 DOWNTO 0);
BEGIN
temp_dataA <=  dataA(4) & dataA(3) & dataA(2) & dataA(1) & dataA(0);
inst_comparator : PROCESS ( rfmute,dataA(7),dataA(6),dataA(5),dataA(4),dataA(3),dataA(2),dataA(1),dataA(0))
BEGIN
    IF ( rfmute= '0') THEN
             bigerout  <=   '1' ;
        ELSE    
            IF  ( dataA(7)='1' AND dataA(6)='1' AND dataA(5)='1' )  THEN
                bigerout  <=   '1' ;
            ELSIF (dataA(7)='1' AND dataA(6)='1' AND dataA(5)='0') THEN
                CASE temp_dataA IS
                WHEN "11111" => bigerout  <=   '1' ;
                WHEN "11110" => bigerout  <=   '1' ;
                WHEN "11101" => bigerout  <=   '1' ;
                WHEN "11100" => bigerout  <=   '0' ;
                WHEN  OTHERS => bigerout  <=   '0' ;
                END CASE; --  已经判断出dataA> DCH,
            ELSE 
            bigerout  <=   '0' ;
            END IF;
        END IF;
    END  PROCESS  inst_comparator ;
END  ARCHITECTURE  behavioral ;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

39

帖子

0

粉丝