wwenguang
驱动小牛
驱动小牛
  • 注册日期2002-08-12
  • 最后登录2005-08-22
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:10939回复:7

VHDL 的if-elsif--else 的用法

楼主#
更多 发布于:2003-05-13 17:16
用VHDL给FPGA编程,发现在拥到  IF----ELSIF--ELSIF---END IF;
和 IF---ELSIF----ELSE-----END IF  时,几乎每次都会出错,下面就是一个:
  if lhold=\'0\' then
   nlint<=\'1\';
  elsif (bist_ok\'event and bist_ok=\'1\')THEN
   nlint<=\'0\';
  ELSE
   nlint<=\'Z\';
  end if;

错误处在后面的ELSE上,新手上路,请大侠们指点一下 IF --ELSE系列的用法。
谢了。 :
sharc2002
驱动牛犊
驱动牛犊
  • 注册日期2002-04-07
  • 最后登录2013-05-07
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望32点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-13 19:21
-- elsif (bist_ok\'event and bist_ok=\'1\')THEN

是这个有问题。if-elsif--else 中不能有时钟检测语句.
wwenguang
驱动小牛
驱动小牛
  • 注册日期2002-08-12
  • 最后登录2005-08-22
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-13 21:30
谢谢,那么我要实现如下的功能该怎么办?
  当bist_ok上升沿到时,lint=0,其他时候均为高阻态。
下面的写法是错的(把Z改为0、1时在语法上是对的):
IF LHOLD=\'1\'THEN
   nlint<=\'Z\';--
ELSif (bist_ok\'event and bist_ok=\'1\')THEN--
   nlint<=\'0\';
end if;

再有下面的几句的IF---ELSE 也有错:
process(en)
begin
IF(en=\'0\')then
  nlint<=\'0\' ;
  else
  nlint<=\'1\';
end if;
END PROCESS;

恳求大侠们分析分析。
minhead
驱动牛犊
驱动牛犊
  • 注册日期2003-05-15
  • 最后登录2006-05-28
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望14点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-15 15:29
异步复位电路是可以将时钟检测放在if -elsif_end if中,关键问题是你在设计时要考虑到硬件实现,不能想当然,一般时钟检测条件是没有else 情况的
sharc2002
驱动牛犊
驱动牛犊
  • 注册日期2002-04-07
  • 最后登录2013-05-07
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望32点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-15 20:59
当bist_ok上升沿到时,lint=0,其他时候均为高阻态。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
有这样的要求吗?只是上升沿一时刻高阻?
wwenguang
驱动小牛
驱动小牛
  • 注册日期2002-08-12
  • 最后登录2005-08-22
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-15 23:33
是这样的:lint为本地中断,bist_ok为自检完成的标志,在自检完成后发出中断,(lint为inout类型),其余时刻本地不发出中断。
并非“只是上升沿一时刻高阻”,因为这一段是在一个process里面,lint 是在一个区间内为0,从bist_ok开始,到下一个敏感量有效为止。
   上面提到的if---else的错误,我怀疑是由于MAXPLUS2的愿意,在SYNPLIFY下综合没有错。
guqs77
驱动小牛
驱动小牛
  • 注册日期2003-05-22
  • 最后登录2007-07-30
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-22 18:06
再有下面的几句的IF---ELSE 也有错:
process(en)
begin
IF(en=\'0\')then
nlint<=\'0\' ;
else
nlint<=\'1\';
end if;
END PROCESS;


你上面这一段和
nlint <= en ;
有什么区别??

 你说nlint是一个inout类型,那么应该这样设计比较妥当
另定义一个信号nlint_reg
程序中的nlint为输出的地方都该为nlint_reg
最后加入这个语句
nlint <= \'0\' when nlint_reg = \'0\' else
          \'Z\' ;
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-05-28 17:36
不要把简单问题复杂化
游客

返回顶部