二进制,格雷码

7 篇文章 1 订阅
//========================================================================================================================================================
// Company:
// Engineer:
// Create Date:
// Design Name:
// Module Name:
// Target Device:
// Tool versions:
// Description: 二进制到格林码转换、格林码到二进制转换
// Dependencies:
// Revision:
// Additional Comments:
//========================================================================================================================================================
module code_transfer#(parameter DATA_WIDTH = 8) (
   input		sys_clk,        //系统时钟
   input		reset_n,        //复位信号
   input[DATA_WIDTH-1:0]	gray_code_in,       //格林码输入
   input			gray_code_in_valid, //二进制格林码输入有效标志
   input[DATA_WIDTH-1:0]	binary_code_in,     //二进制输入
   input			binary_code_in_valid, //二进制有效输入
   output[DATA_WIDTH-1:0]	gray_code_out,      //格林码输出
   output			gray_code_out_valid,    //二进制格林码输出有效标志
   output[DATA_WIDTH-1:0]	binary_code_out,        //二进制输出
   output			binary_code_out_valid //二进制有效输出
);
    //========================================================================================================================================================
    //内部变量声明
    //========================================================================================================================================================
    reg[DATA_WIDTH-1:0]	binary2gray_code_r;
    reg[DATA_WIDTH-1:0]	gray2binary_code_r;
    reg						binary2gray_code_valid_r;
    reg						gray2binary_code_valid_r;
    //========================================================================================================================================================
    //二进制码到格林码的转换
    //function:graycode=binarycode^(binarycode>>1)
    //========================================================================================================================================================
    always @(posedge sys_clk)
        begin
        if (!reset_n)
            binary2gray_code_r <= 'd0;
        else if (binary_code_in_valid)
            binary2gray_code_r <= binary_code_in ^ (binary_code_in >> 1);
        else
            binary2gray_code_r <= binary2gray_code_r;
        end

    always @(posedge sys_clk)
        begin
        if (!reset_n)
            binary2gray_code_valid_r <= 'd0;
        else if (binary_code_in_valid)
            binary2gray_code_valid_r <= 1'b1;
        else
            binary2gray_code_valid_r <= 1'b0;
        end
    //========================================================================================================================================================
    //格林码到二进制码转换
	//bianrycod[i]=^gray_code[DATA_WIDTH-1:i];
    //========================================================================================================================================================
    generate
        genvar num;
        for (num = 0; num<=DATA_WIDTH - 1; num = num + 1)
            begin
            always @(posedge sys_clk)
                begin
                if (!reset_n)
                    gray2binary_code_r[num] <= 1'b0;
                else if (gray_code_in_valid)
                    gray2binary_code_r[num] <= ^(gray_code_in >> num);
                else
                    gray2binary_code_r[num] <= gray2binary_code_r[num];
                end
            end
    endgenerate
    always @(posedge sys_clk)
        begin
        if (!reset_n)
            gray2binary_code_valid_r <= 1'b0;
        else if (gray_code_in_valid)
            gray2binary_code_valid_r <= 1'b1;
        else
            gray2binary_code_valid_r <= 1'b0;
        end
    //========================================================================================================================================================
    //输出信号连接
    //========================================================================================================================================================
    assign	binary_code_out = gray2binary_code_r;
    assign 	binary_code_out_valid = gray2binary_code_valid_r;
    assign	gray_code_out = binary2gray_code_r;
    assign	gray_code_out_valid = binary2gray_code_valid_r;
endmodule
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值