verilog中的逻辑与逻辑

verilog中的逻辑与逻辑,verilog,logical-operators,Verilog,Logical Operators,我尝试进行数据转换,然后使用255(即11111)进行“逻辑与”。但我在最后一点上得了1分。其他部分没有改变。数据转移是正确的,但“和”运算符有问题。 代码如下: module Data_shiftin( input reset_n, clk, input [31:0] data_in, output [31:0] data_out ); reg [31:0] data_R24; reg [31:0] data_R16; reg [31:0] data_R8; reg [31:0] dat

我尝试进行数据转换,然后使用255(即11111)进行“逻辑与”。但我在最后一点上得了1分。其他部分没有改变。数据转移是正确的,但“和”运算符有问题。 代码如下:

module Data_shiftin(
input reset_n, clk,
input [31:0]    data_in,
output [31:0] data_out
);
reg [31:0] data_R24;
reg [31:0] data_R16;
reg [31:0] data_R8;
reg [31:0] data_R;
reg [31:0] and_R16;
reg [31:0] and_R8;
reg [31:0] and_R;
integer a=255;

always @ (posedge clk)
  begin 
    data_R24[7:0]<=data_in[31:24];
  end

always @ (posedge clk)  
  begin
    data_R16[15:0]<=data_in[31:16];
     and_R16[15:0]<= a[7:0] && data_R16[15:0];
  end

always @ (posedge clk)  
  begin
    data_R8[23:0]<=data_in[31:8];
     and_R8[23:0]<= a[7:0] && data_R8[23:0];
  end  
always @ (posedge clk)  
  begin
    data_R[31:0]<=data_in[31:0];
     and_R[31:0]<= a[7:0] && data_R[31:0];
  end  
endmodule
模块数据\u移位(
输入复位,时钟,
在中输入[31:0]数据,
输出[31:0]数据输出
);
reg[31:0]数据_R24;
reg[31:0]数据_R16;
reg[31:0]数据_R8;
注册[31:0]数据\u R;
reg[31:0]和_R16;
reg[31:0]和_R8;
reg[31:0]和\u R;
整数a=255;
始终@(posedge clk)
开始

数据_R24[7:0]
&&&
是逻辑的和可扩展的<代码>&
是按位的

您确定要逻辑AND吗?将结果存储在16位、24位和32位寄存器中,但逻辑和只有1位输出。它是1位,因为它通常用于if表达式中,必须为真或假,多位值没有任何意义

典型用法:

reg [1:0] a, b;
wire check;
check =  (a==2'b01) && (b==2'b10) ; //1 bit output
always @* begin
  if ( (a==2'b01) && (b==2'b10) ) begin
  //..

//Bitwise
wire [1:0] e;
e = a & b ; //=>2'b00
&&
的结果为1位,布尔表达式的结果为true或false

&
不会改变宽度,它只是依次对每个位进行AND运算

wire [1:0] e;
assign e = a & b ; //=>2'b00
也可以这样做:

e[0] = a[0] && b[0];
e[1] = a[1] && b[1];

这是书上的印刷错误。谢谢它是按位的:)很高兴能帮助@AwaisHussain,如果你能将错误提交给书(出版商)那就太好了,它应该包括在勘误表中!我说他们从不发表我向他们指出的错误。我已经给出版商发了邮件。我希望很快得到回应。