小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

格雷碼原理與Verilog實(shí)現(xiàn)

 goandlove 2019-03-22

    格雷碼是一個(gè)叫弗蘭克*格雷的人在1953年發(fā)明的,最初用于通信。格雷碼是一種循環(huán)二進(jìn)制碼或者叫作反射二進(jìn)制碼。格雷碼的特點(diǎn)是從一個(gè)數(shù)變?yōu)橄噜彽囊粋€(gè)數(shù)時(shí),只有一個(gè)數(shù)據(jù)位發(fā)生跳變,由于這種特點(diǎn),就可以避免二進(jìn)制編碼計(jì)數(shù)組合電路中出現(xiàn)的亞穩(wěn)態(tài)。格雷碼常用于通信,F(xiàn)IFO或者RAM地址尋址計(jì)數(shù)器中。

    如二進(jìn)制計(jì)數(shù)編碼從0到F的計(jì)數(shù)過程如下:

十進(jìn)制

二進(jìn)制

格雷碼

十進(jìn)制

二進(jìn)制

格雷碼

0

0000

0000

8

1000

1100

1

0001

0001

9

1001

1101

2

0010

0011

10

1010

1111

3

0011

0010

11

1011

1110

4

0100

0110

12

1100

1010

5

0101

0111

13

1101

1011

6

0110

0101

14

1110

1001

7

0111

0100

15

1111

1000

    當(dāng)從7變?yōu)?時(shí),4位二進(jìn)制數(shù)都發(fā)生跳變,這就很可能會發(fā)生亞穩(wěn)態(tài)。而采用格雷碼,就可以編碼4位二進(jìn)制數(shù)都同時(shí)發(fā)生跳變,導(dǎo)致出現(xiàn)的亞穩(wěn)態(tài),就算出現(xiàn)亞穩(wěn)態(tài),最多也就一位出現(xiàn)錯(cuò)誤。

格雷碼轉(zhuǎn)二進(jìn)制

    觀察上表可知,格雷碼轉(zhuǎn)二進(jìn)制是從左邊第二位起,將每位與左邊一位二進(jìn)制碼的值異或,作為該位二進(jìn)制碼后的值(最左邊一位依然不變)。

module gray_to_bin(

gray_in,

bin_out

);

parameter data_width = 4;

input [data_width-1:0] gray_in;

output [data_width-1:0] bin_out;

reg [data_width-1:0] bin_out;

always @(gray_in)

begin

bin_out[3] = gray_in[3];

bin_out[2] = gray_in[2]^bin_out[3];

bin_out[1] = gray_in[1]^bin_out[2];

bin_out[0] = gray_in[0]^bin_out[1];

end

endmodule

二進(jìn)制轉(zhuǎn)格雷碼

    從最右邊一位起,依次將每一位與左邊一位異或(XOR),作為對應(yīng)格雷碼該位的值,最左邊一位不變。

module bin_to_gray(

bin_in,

gray_out

);

parameter data_width = 4;

input [data_width-1:0] bin_in;

output [data_width-1:0] gray_out;

assign gray_out = (bin_in >> 1) ^ bin_in;

endmodule

格雷碼計(jì)數(shù)器原理

    格雷碼計(jì)數(shù)器,采用三個(gè)模塊進(jìn)行設(shè)計(jì),格雷碼轉(zhuǎn)二進(jìn)制、加法器、二進(jìn)制轉(zhuǎn)格雷碼。

格雷碼轉(zhuǎn)二進(jìn)制將格雷碼轉(zhuǎn)換為二進(jìn)制,并將值輸出用于加法器進(jìn)行加法運(yùn)算,然后將加法運(yùn)算結(jié)果通過二進(jìn)制轉(zhuǎn)格雷碼轉(zhuǎn)換為格雷碼,最后將格雷碼進(jìn)行輸出,同時(shí)將結(jié)果輸出到格雷碼轉(zhuǎn)二進(jìn)制作為輸入,形成一個(gè)計(jì)數(shù)功能。

頂層設(shè)計(jì)

module gray_counter(

clk,

reset_n,

// gray_in,

gray_out

);

parameter data_width = 4;

input clk;

input reset_n;

// input [data_width-1:0] gray_in;

output [data_width-1:0] gray_out;

//格雷碼轉(zhuǎn)二進(jìn)制

wire [data_width-1:0] bin_out;

gray_to_bin gray_to_bin_1(

.gray_in (gray_wire),

.bin_out (bin_out)

);

//二進(jìn)制加一

wire [data_width-1:0] bin_add_wire;

assign bin_add_wire = bin_out + 1'b1;

//二進(jìn)制轉(zhuǎn)格雷碼

wire [data_width-1:0] gray_wire;

reg [data_width-1:0] gray_out;

bin_to_gray bin_to_gray_1(

.bin_in (bin_add_wire),

.gray_out (gray_wire)

);

always @(posedge clk or negedge reset_n)

begin

if(reset_n == 1'b0)

begin

gray_out <= {data_width{1'b0}};

end

else

begin

gray_out <= gray_wire;

end

end

endmodule

RTL視圖,與設(shè)計(jì)框圖一致

實(shí)驗(yàn)結(jié)果

    經(jīng)過與上表對比,驗(yàn)證了功能的正確性。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多