2014-02-20 2 views
1
module binarytogray #(
parameter PTR=2 
)(
input logic [PTR:0] binary_value, 
output logic [PTR:0] gray_value 
); 

genvar i;  
generate 
for(i=0;i<PTR;i=i+1) begin:for_loop 
    assign gray_value[i]=binary_value[i]^binary_value[i+1]; 
end 
endgenerate 

    assign gray_value[PTR]=binary_value[PTR]; 
endmodule 

Этот код преобразования кода с двоичным кодом в серый код является примером из книги. Может кто-нибудь объяснить:Преобразование двоичных в серый

assign gray_value[i]=binary_value[i]^binary_value[i+1]; 

Я не могу понять эту конкретную операцию XOR для преобразования кода Грея из двоичного.

Пример на EDAplayground.

+1

Я думаю, что это хороший вопрос (пожалуйста, не удаляйте его), но было бы хорошо, если бы вы показали, что вы пробовали. – Morgan

ответ

1

^ является оператором XOR (эксклюзивный или).

A B | Result 
----+------- 
0 0 | 0 
0 1 | 1 
1 0 | 1 
1 1 | 0 

В i «s просто индексы для текущей и последней позиции в цикле.

The (унарный) Xor также может быть использован в качестве оператора восстановления для генерации четности слов:

^4'b0001 => 1'b1 
^4'b0101 => 1'b0 
1

более компактное решение (хотя функционально идентичны) заключается в следующем:

assign gray_value[PTR:0] = binary_value[PTR:0]^{1'b0, binary_value[PTR:1]}; 

Это избегает генерировать блок и петли, но по-прежнему выполняет побитовое XOR во всех битах, кроме MSB.

Где вам нужно петля идет в другом направлении (серого в двоичный):

always_comb begin 
    binary_value[PTR] = gray_value[PTR]; 

    for(int i=PTR-1; i>=0; i--) begin 
    binary_value[i] = gray_value[i]^binary_value[i+1]; 
    end 
end 
0

Это просто способ преобразования работает. Если вы последуете этому изображению, вы увидите в основном ту же операцию, что и ваш код Verilog.

-1

Попробуйте этот код

module B2G (binary_value, gray_value); 
    input [7:0] binary_value; 
    output [7:0] gray_value; 

    genvar i; 
    generate 
    for(i=6; i>=0; i=i-1) 
    begin 

    assign gray_value[i] = binary_value[i+1]^(binary_value[i]); 
    end 
endgenerate 

assign gray_value[7] = binary_value[7]; 
endmodule 
0

Простой Binary к серому данные преобразования потока Модель Verilog код:

module bintogray(input [3:0]bin,output [3:0]gray); 

assign gray[3] = bin[3]; 

assign gray[2] = bin[3]^din[2]; 

assign gray[1] = bin[2]^din[1]; 

assign gray[0] = bin[1]^din[0]; 

endmodule 

 Смежные вопросы

  • Нет связанных вопросов^_^