Embedded 1和1之间的差异';Verilog中的b1

Embedded 1和1之间的差异';Verilog中的b1,embedded,verilog,system-verilog,iverilog,Embedded,Verilog,System Verilog,Iverilog,在verilog代码中只给出1和给出1'b1有什么区别 1的宽度为32位,因此相当于32'b0000000\u00000000\u00000000\u00000001 1'b1有一点宽 有几个地方应该注意长度的差异,但最有可能让您注意到的是连接{} reg [ 7:0] A; reg [ 8:0] B; assign A = 8'b10100101; assign B = {1'b1,A}; // B is 9'b110100101 assign B = {1,A};

在verilog代码中只给出1和给出1'b1有什么区别

1的宽度为32位,因此相当于
32'b0000000\u00000000\u00000000\u00000001

1'b1有一点宽


有几个地方应该注意长度的差异,但最有可能让您注意到的是连接<代码>{}

reg [ 7:0] A;
reg [ 8:0] B;
   assign A = 8'b10100101;
   assign B = {1'b1,A};  // B is 9'b110100101
   assign B = {1,A};     // B is 9'b110100101
   assign B = {A,1'b1};  // B is 9'b101001011
   assign B = {A,1};     // B is 9'b000000001 !!!!

那么,比如说

logic [7:0] count;
...
count <= count + 1'b1;
这是:

count <= (count * 255) >> 8;
count>8;

会有不同的表现。在第一种情况下,8位将用于乘法(在
>8
8
的宽度是无关的),因此乘法将溢出;在第二种情况下,乘法将使用32位,因此一切正常

1'b1
是一个二进制、无符号、1位宽的整数值。在最初的verilog规范中,
1
的类型与
integer
的类型相同。它是有签名的,但它的宽度没有指明。工具可以根据其主机实现的
int
类型选择宽度


自Verilog 2001和SystemVerilog 2005以来,
integer
int
的宽度固定为32位。但是,由于这个原始的未指定宽度,以及许多人编写
0
1
时没有意识到它现在是32位宽的事实,该标准不允许您在串联中使用无基文本<代码>{A,1}是非法的

那么32是默认的位长度吗?@yashwantgopinath在Verilog中所谓的无基文本(例如
1
)是32位的有符号数字。我给出这个答案是因为我对你的问题的理解超过了你的预期。我从你对另一个答案的评论中看到,你只是想知道在一个所谓的无基文本中有多少位。无论如何,这个答案可能会引起未来谷歌用户的兴趣。欢迎来到Stackoverflow。请参阅和。把你面临的问题的更多细节写出来。包括您到目前为止尝试过的相关代码片段。@NJInamdar我想以前有人问过很多次,但事实上,这是一个好问题。@NJInamdar,
1
1'b1
是相关代码。请注意,在普通的旧Verilog中,未指定大小的数字或整数变量的大小至少为32位(所有内容都在V-2005之前)。下面的声明正好是32位是不正确的。
count <= (count * 8'd255) >> 8;
count <= (count * 255) >> 8;