数电ModelSim作业2

自然二进制码 转换为 格雷码

一、新建Project

具体可以参考 “数电ModelSim作业1”

二、程序代码

自然二进制码:二进制:以2为基数的记数系统

格雷码:在一组数的编码中,任意两个相邻的代码只有一位二进制数不同

image-20211024231152457

实现原理( 自然二进制转换成格雷码 ):

​ 二进制码转换成二进制格雷码,其法则是:

​ 1、保留二进制码的最高位作为格雷码的最高位

​ 2、格雷码其余各位为二进制码这一位与二进制码高一位异或。

代码如下:

1
2
3
4
5
6
7
8
9
10
module Bin_to_Gray  #( parameter NUM = 8 )
( input [ NUM-1 : 0 ] bin ,
output [ NUM-1 : 0 ] gray ) ;
genvar i ;
assign gray[NUM-1] = bin[NUM-1];
generate for (i = 0; i < NUM-2; i = i+1)
begin : GF_GRAY_TO_BIN
assign gray[i] = ^bin[i+1 : i];
end
endmodule

三、测试代码

为测试所有8位信号,更改 xxx_tb.v内容如下后保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
`timescale 1ns/100ps
module Bin_to_Gray_tb ;
parameter NUM = 8 ;
reg [NUM-1:0] bin ;
wire [NUM-1:0] gray ;
integer i;
initial begin
for ( i = 0; i < 2**8; i = i+1 )
#50 bin = i;
end
Bin_to_Gray #( NUM )
DUT (
.bin (bin ) ,
.gray (gray ) );
endmodule

四、运行结果

image-20211023195038437