侵权投诉
订阅
纠错
加入自媒体

数字电路设计盲点实例与对策分析

  【算数演算Package变成Compile】

  ※现象

  利用VHDL设计PDL将List13-1的Source Code Compile时发生错误(Error)。List13-2是Therinks公司的WebPackISE,经过程序编写(Compile)时的部份Rep ort File,由该List可知错误的原因可能是利用第25,26,31,32行的程序进行算数演算时出现Error,不过第3行却可叫出算数演算Package std_logic_ arith。

 

  

 

  

 

  List13-2 用WebPackISE将List13-1 Compile时的部份Report File

  ※原因分析

  虽然std_logic_arith是属于可以演算signed与unsigned两者的算数演算Package,不过却无法直接处理std_logic_vector的数据形式(Data Type),是发生问题的主要原因。

  ※对策

  最简单的对策是在第3行将呼叫Package,变更成std_logic_unsigned或是std_ logic_signed。以List13-1为例如果要将Input的A与B、Output的C以无码方式处理,祇需将第3行的叙述更改成如下所示即可。

  Use IEEE.std_logic_unsigned.all;

  另一种对策是将算数演算的信号从std_logic_vector的数据形式变更成signed或是unsigned。以List13-3而言是在第17行以unsigned宣示算数演算的信号,接着在第21行与第22行代入A与B,由于无法直接将std_logic_vector直接代入unsigned,所以连结std_logic后才代入。实际上进行算数演算时是使用第28,29,34,35右边unsigned的信号,此时未作数据形式转换直接将unsigned代入std_logic_vector,不过由于进行理论演算的30~33行无法使用unsigned,因此改用std_logic_vector。

 

  

 

  还有一种对策是使用Type变换关数法,List13-4就是使用变换关数法的例子,具体方法是利用25,26,31,32行所谓的unsigned Type变换关数,将std_lo gic_vector变换成unsigned,由于这些关数包含在std_logic_arith Package内,所以并不需要呼叫其它的Package。

 

  

 

  【利用16进位叙述Counter值就发生错误】

  ※现象

  接着要介绍利用VHDL设计逻辑电路经常发生的错误。List14-1是叙述Counter的实例,由于Counter的位数非常多,如果用2进位叙述Counter相当烦琐,所以改用16进位叙述,例如List14-1的第31行ADD_fb信号是16位std_logic_vect or,如果用2进位叙述则多达16行,而16进位祇有4行,不过将List14-1Compile会因用Compiler会产生Error。

  ※原因分析

  主要原因是std_logic_vector祇允许2进位叙述,虽然某些程序编写器(Compil er)允许这种方式,不过却很容易发生错误(Error)。std_logic_vector祇允许2进位主要原因是std_logic的抓取值是0与1之外的数字,List14-1表示std_logi c的抓取值,由List可知该值表示逻辑电路信号线的状态,例如Z表示高阻(High Impedance)状态,而High Impedance状态却对该值不具任何意义,因此不论是2进位或是16进位都无法叙述。2进位允许的叙述会被当作一次元配列处理,例如所谓的”ZZZ ”的std_logic_vector(0到3),事实上是表示4位信号全部都是高阻抗(High Impedance)状态。

 

  表14-1 std_logic的抓取值抓取值定义

 

 

  ※对策

  最简单的对策是将数据形式(Data Type)变更成bit_vector,所的Data Type的抓取值祇有0与1,所以允许2进位以外8进位、16进位的叙述,不过某些情况却不适用,例如List14-1的第42行欲作ADDR_fb<=(other=>’-‘)时,就无法将AD DR_fb作成bit_vector,此时必需使用Type关数变换作以下的叙述:

  ADDR_fb<=To_stdlogicvector)x”FFFC”);

  所谓的To_stdlogicvector关数,是将位bit_vector转换成std_logic_vector的关数,值得一提的是关数名称会因Compiler有所不同,因此必需事先确认Com piler的使用说明(Manual)避免会产生错误(Error)。

<上一页  1  2  3  4  5  6  7  8  下一页>  余下全文
声明: 本网站所刊载信息,不代表OFweek观点。刊用本站稿件,务经书面授权。未经授权禁止转载、摘编、复制、翻译及建立镜像,违者将依法追究法律责任。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

    电子工程 猎头职位 更多
    扫码关注公众号
    OFweek电子工程网
    获取更多精彩内容
    文章纠错
    x
    *文字标题:
    *纠错内容:
    联系邮箱:
    *验 证 码:

    粤公网安备 44030502002758号