微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 一个奇怪的verilog语法

一个奇怪的verilog语法

时间:10-02 整理:3721RD 点击:
代码如下,我以为三条CK$delay应看成是字符串,但这样的话就不能实现这个cell的功能(inst的pin与cell的port连不起来),但通过仿真代码发现其是正常工作的,请教各位这是怎么回事儿?我查了IEEE 1364,似乎没找到相关信息,还请各位指导!

  1. module DRNQ_0( CK, RDN, D, Q);
  2. input CK, RDN, D;
  3. output Q;

  4.    `ifdef FUNCTIONAL  //  functional //

  5.    `else

  6.         wire CK$delay ;
  7.         wire RDN$delay ;
  8.         wire D$delay ;

  9.         DRNQ_0$func HSL_DRNQ_0_inst(.CK(CK$delay),.RDN(RDN$delay),.D(D$delay),.Q(Q));


  10.         buf MGM_G0(ENABLE_RDN ,RDN$delay);

  11.    `endif



  12.    `ifdef FUNCTIONAL  //  functional //

  13.         DRNQ_0$func HSL_DRNQ_0_inst(.CK(CK),.RDN(RDN),.D(D),.Q(Q));

  14.    `endif


  15.    `ifdef FUNCTIONAL // functional  //

  16.    `else


  17. // specify block begins

  18.    specify

  19.         // arc CK --> Q
  20.         (posedge CK => (Q : D))  = (1.0,1.0);

  21.         if(CK===1'b0 && D===1'b0)
  22.         // arc RDN --> Q
  23.         (RDN => Q)  = (1.0,1.0);

  24.         if(CK===1'b0 && D===1'b1)
  25.         // arc RDN --> Q
  26.         (RDN => Q)  = (1.0,1.0);

  27.         if(CK===1'b1 && D===1'b0)
  28.         // arc RDN --> Q
  29.         (RDN => Q)  = (1.0,1.0);

  30.         if(CK===1'b1 && D===1'b1)
  31.         // arc RDN --> Q
  32.         (RDN => Q)  = (1.0,1.0);

  33.         $width(negedge CK,1.0,0);

  34.         $width(posedge CK,1.0,0);

  35.         // setuphold D- CK-LH
  36.         $setuphold(posedge CK &&& (ENABLE_RDN === 1'b1),
  37.                 negedge D &&& (ENABLE_RDN === 1'b1),
  38.                 1.0,1.0,,,,CK$delay,D$delay);

  39.         // setuphold D- CK-LH
  40.         $setuphold(posedge CK &&& (ENABLE_RDN === 1'b1),
  41.                 posedge D &&& (ENABLE_RDN === 1'b1),
  42.                 1.0,1.0,,,,CK$delay,D$delay);

  43.         // recrem RDN-CK-posedge
  44.         $recrem(posedge RDN,posedge CK,1.0,1.0,,,,RDN$delay,CK$delay);

  45.         $width(negedge RDN,1.0,0);

  46.    endspecify

  47.    `endif

  48. endmodule
  49. `endcelldefine

复制代码

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top