数字电路信号
数字电路设计对信号的定义包括以下八种:根据强度排列分别为supply,strong,pull,large,weak,midium,small,highz等状态,其中supply,strong,pull,和weak是drive(驱动),而large,medium,small是存储,highz为高阻态;supply表示电路中的最高电压或者最低电压,分别为supply0和supply1;strong电压略低一些,应该是在multi-drive电路中,采用的稍低于supply的电压,而pull在模拟电路中应该有这样的pull-up,pull-down的概念,相应的三极管电路也会有这样类似的概念,上拉电阻会提到将电压拉升的作用,下拉则正好相反;weak应该是作为电路驱动的最弱的电压。而相应的large,medium和small在存储电路中会用到,存储电路一般电压都很低,电路开关比较灵敏,而highz则是高阻态,是一种特殊的状态。接触过三态门的话应该会对这个有一定了解,在一定情况下会产生一个状态是高阻态;除了这些表示0,1,z的特性,电路还有一种特性是x,就是unknown状态。
在编写verilog代码的过程中,一般单个bit的wire型的声明可以略掉,电路会默认为这种类型,其他类型就不能省略掉了;在组合逻辑输入端,如果没有定义输入值,那么在仿真时,就会形成高阻态high-z,这种状态经过一些逻辑之后比如说nand,and等之类的就会变成unknown状态;而直接接入的reg型的输入,在仿真时没有接入输入,那么直接就是unknown;其实就相当最初的high-z经过了一些逻辑(register)变成unknown。另外,要注意的一点是highz状态并不一定是未知状态,这种状态可以保持之前的状态值,经过一段时间电路中会存在充电或者放电,然后就由high-z变成了X状态了。另外还有几种case语句,case,casez和casex,后边两种在电路设计中很少用到,但在一些特定的情况下会用到。
另外,尽管不允许出现multi-drive的情况,即一条线由多条线驱动的情况(语法上一般无法通过,除非定义了强度),,但在实际中还是会有的(目前没碰到过),两个不同强度的线驱动时,强度大的决定最终的驱动的属性。这点需要注意。