1.数字表示方式
在Verilog中的数字表示方式,最常用的格式是:
<位宽>'<基数><常量>,如4’b1011
位宽:描述常量所含位数的十进制整数。注意,位宽是将进制转化为二进制之后的位数。(如4’d10,表示十进制的10,转换为二进制就是4’b1010,其常量的二进制是4位)
例如4’b1011中的4就是位宽,通俗理解就是4根线。如果没有位宽这一项可以通过常量的值进行推断;例如’b1011可知位宽是4,而’b10010可知位宽为5。
基数:表示常量为什么进制。可以是二进制(b/B)、十进制(d/D)、八进制(o/O)、十六进制(h/H)。如果没有此项,则缺省默认为十进制。例如二进制的4’b1011,可以写成十进制的4’d11,可以写成十六进制的4’hb,可以写成八进制的4’o13,也可以不写基数直接写成11。
常量:由基数决定的一串ASCII码。如果基数为B/b,其常量每一位数值可以为0/1/x/z;如果基数为o/O,其常量每一位数值可以为0-7;如果基数为h/H,其常量每一位数值可以为0-9或a-f;如果基数为d/D,其常量每一位数值可以为0-9。
举例:
4’b12 //错误,二进制每一位只能为0/1/x/z
32’h12 //等同于32’h00000012,即数值未写完整时,高位补0。(32位二进制转换为十六进制就是8位)
4’b1000100 //此时后面常量的位数已经超过了位宽,此时相当于4’b0100,也就是说当常量位数超过位宽时,从后向前保留。
2.不定态&&高阻态
2.1 不定态(X态)
X态,又名不定态,其常用于判断条件,主要目的就是告诉设计者不关心它的电平是多少,是0还是1都可以。
举例: if (din == 4’b10x0)
上述例子可以看出判断条件是din==4’b10x0,该条件等价于din== 4’b1010||din== 4’b1000
注:在自己设计的过程中,不建议使用不定态,容易给自己徒增麻烦。
2.2 高阻态(Z态)
Z态,又名高阻态,表示设计者不驱动这个信号(既不给0又不给1 ),通常用于三态门接口当中。
如下图为三态总线的应用案例,图中的连接总线对于CPU和FPGA来说既为输入又为输出,是双向接口。一般的硬件电路会将该线接上一个上拉电阻(弱上拉)或下拉电阻(弱下拉)。
当CPU和FPGA都不驱动该总线时,A点保持为高电平;当FPGA不驱动该总线而CPU驱动该总线时,A点的值就由CPU决定;当CPU不驱动该总线而FPGA驱动该总线时,A点的值就由FPGA决定。但FPGA和CPU不能同时驱动该总线,否则A点的电平就不确定了,通常FPGA和CPU何时驱动总线是按照事先协商的协议进行工作的。
而FPGA在设计中可以做到“不驱动”这一行为,就是因为其内部存有三态门,其结构如下图所示:
三态门是一个硬件,上图是它的典型结构。三态门有四个接口,如上图所示的写使能wr_en、写数据wr_data、读数据rd_data、与外面器件相连的三态信号data。
需要注意的是写使能信号,当该信号有效时三态门会将wr_data的值赋给三态线data,此时data的值由wr_data决定,即当wr_data为0时data值为0,当wr_data为1时data值为1。而当写使能信号无效时,则无论wr_data 的值是多少都不会对外面的data的值产生影响,也就是不驱动。
在Verilog中以上功能通过如下的代码实现:
assign data = (wr_en==1)?wr_data:1'bz;
assign rd_data = data;
注:在FPGA设计的过程中同样不建议使用高阻态,会徒增麻烦。文章来源:https://www.toymoban.com/news/detail-501504.html
Tip:如果您在阅读的过程中发现任何的问题,欢迎前来指正!!文章来源地址https://www.toymoban.com/news/detail-501504.html
到了这里,关于Verilog HDL中的数字进制(Verilog数字表示方法&&X/Y态解析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!