二进制转格雷码的Verilog代码

十进制数自然二进制数格雷码
000000000
100010001
200100011
300110010
401000110
501010111
601100101
701110100
810001100
910011101
1010101111
1110111110
1211001010
1311011011
1411101001
1511111000

格雷码转换二进制码的逻辑关系为:
bin[0]=gray[3]^gray[2] ^gray[1] ^gray[0]
bin[1]=gray[3]^gray[2] ^gray[1]
bin[2]=gray[3]^gray[2]
bin[3]=gray[3]

设计代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2020/07
// Design Name: 
// Module Name: Test1103
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
//


module Test1103(gray,bin,clk,inc,rst_n);
parameter size=4;
output [size-1:0] gray,bin;
input clk,inc,rst_n;
reg [size-1:0] gnext,gray,bnext,bin;
integer i;
///
always @(posedge clk or negedge rst_n)
   if(!rst_n)
      gray<=0;
   else
      gray<=gnext;
///
always @(gray or inc)
   begin
      for(i=0;i<size;i=i+1)
         bin[i]= ^(gray>>i);
         bnext=bin+inc;
         gnext=(bnext>>1) ^ bnext;
   end

endmodule

测试代码(Testbench)

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2020/07
// Design Name: 
// Module Name: Test1110
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description:  
//


module Test1110;
reg clk;
reg rst_n;
reg inc;
wire [3:0] gray,bin;
always begin
   #10 clk=0;
   #10 clk=1;
end

initial begin
   clk=0;
   inc=0;
   rst_n=0;
   #100;
   rst_n=1;
   #20;
   inc=1;
end
Test1103 x1(.gray (gray ),
            .bin  (bin  ),
            .clk  (clk  ),
            .inc  (inc  ),
            .rst_n(rst_n));
endmodule

仿真波形如下
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值