VHDL设计中常见错误

1)一个进程中不允许出现两个时钟沿触发,(Xilinx公司CoolRunner系列CPLD支持单个时双钟的双触发沿除外)

2)对同一信号赋值的语句应出现在单个进程内,不要在时钟沿之后加上elsifelse语句,如

if clk’event and clk=’1’ then - else … 的结构,现有综合工具支持不了这种特殊的触发器结构

 (3)不能在两个以上的进程内对同一信号赋值操作,引起输出多驱动源的发生

 

 

 

 

例子

隐含触发器

  如以下代码:
library  ieee;
use    ieee.std_logic_1164.all;
entity  and2  is 
port ( a, b : in std_logic;
   c : out std_logic);
end  and2;
architecture  behave  of  and2  is
begin
  process (a, b)
  begin
        if ( a='1' and b='1')  then
               c<='1'
        end  if;
   end  process;
end  behave;
  设计指原意是设计一个二输入与门,但因“if”语句中无“else”语句,在对此语句逻辑综合时为“else”语句中为:“C<=C;”,即保持不变。因此可能形成下图所示的电路:


  利用MAX+PLUSII软件仿真时,除了“a=1”及“b=1”时“c=1”外,其他时刻的值都不确定。为改正此错误,仅需加上如下语句即可。
else
     c<='0';
  这类错误在利用“if-then-else”语句设计组合电路时常犯的。

   时钟处理
  如以上所述,是为了设计一个带计数使能的计数器,但将falling_edge (clk)和ci='1'在一起,有些综合器可能会生成错误电路或不能综合。
IF ( falling_edge (clk) and ci='1')  then
qcnt<=qcnt+1;
end  if;
    最好如下:
     if falling_edge (clk)  then
        if (ci='1')  then
             qcnt<=qcnt+1;
        end  if;
      end  if;
  此外,对于时钟电路,可省略“else”语句,它隐含表示“qcnt<=qcnt+1”。可加上此句,但下面的描述则无法综合:
      if (falling_edge (clk))  then
          qcnt<=qcnt+1;
      else
          qcnt<=datain;
       end  if;
  综合时会出现如下错误信息:
“Else Clause following a Clock edge must hold the state of signal”
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值