2015-01-28 2 views
0

데이터를 이동 한 다음 255로 11111111과 함께 "논리적 인"및 "논리적"으로 처리하려고합니다.하지만 마지막 비트에서 1을 얻고 있습니다. 다른 비트는 변경되지 않습니다. 데이터 이동이 올바르지 만 "and"연산자에 문제가 있습니다.논리적이고 Verilog로

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 

답변

2

&& 논리적 인 AND : 여기서 코드이다. &은 비트 단위입니다.

논리 AND를 원하십니까? 결과를 16, 24 및 32 비트 레지스터에 저장하지만 논리적이며 1 비트 출력 만 있습니다. true 또는 false 여야하는 if 식에서 일반적으로 사용되는 1 비트이므로 다중 비트 값은 아무 의미도 없습니다.

일반적인 사용 : &&에서

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 비트, 부울 식의 결과가 참 또는 거짓입니다.

& 너비가 변경되지 않으면 간단히 각 비트가 차례대로 반복됩니다.

wire [1:0] e; 
assign e = a & b ; //=>2'b00 

도 할 수 : 그것은 책에서 실수를 인쇄하는

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

. 감사! 그것은 bitwise과 :) –

+0

@ AwaisHussain, 당신이 책 (발행인)에 실수를 제출할 수 있다면 좋을 것이 다행, 그리고 그것은 정오표에 포함되어야합니다! 그들이 내가 그들에게 지적한 실수를 결코 출판하지 않는다고 말한다. – Morgan

+0

게시자에게 메일을 보냈습니다. 나는 곧 반응을 얻기를 희망한다. –