精华内容
下载资源
问答
  • 格雷码转二进制

    2014-09-20 10:28:24
    输入格雷码,输出对应二进制码,MATLAB代码
  • 废话不多说,直接上实现:simulus是gray信号发生器的实现:simulus.h:include"base.h"#ifndefSIMULUS#defineSIMULUSconstunsignedintsize=4;SC_MODULE(simulus){//signaldriverssc_out>gray;voidprc_simulus();...

    废话不多说,直接上实现:

    simulus是gray码信号发生器的实现:simulus.h:

    include "base.h"

    #ifndef SIMULUS

    #define SIMULUS

    const unsigned int size=4;

    SC_MODULE(simulus){

    //   signal drivers

    sc_out > gray ;

    void prc_simulus();

    sc_uint convert( sc_uint bin );

    SC_CTOR(simulus){

    SC_THREAD(prc_simulus);

    }

    };

    #endifsimulus.cpp:

    #include "simulus.h"

    //    使用2进制转化为格雷码

    void simulus::prc_simulus(){

    //  signal generates process

    sc_uint temp(0) ;

    for(;;){

    gray = (convert(temp));

    temp++ ;

    wait(100,SC_NS);

    }

    }

    sc_uint simulus::convert( sc_uint bin )

    {

    sc_uint gray ;

    gray = bin^(bin>>1);

    //    在此中所有的方法都不支持,

    //    只有使用逻辑符号进行操作

    return gray ;

    }

    dut是对格雷码转转二进制的实现:dut.h:

    #include "../base.h"

    #ifndef DUT

    #define DUT

    /*********************************

    在这个systemC版本中无法使用模版!!!

    可能是由于下载的版本过老,很多操作

    都没有支持。

    (1)模版无法使用,只有通过常数变量来代替

    (2)sc内置类型的一些方法无法使用,

    只能使用基本的位操作。。。。。

    **********************************/

    const unsigned int gsize = 4 ;       //   gray to bin convertor ....

    SC_MODULE(gb_convertor){

    sc_in >gray;

    sc_out > bin ;

    void prc_gb();

    SC_CTOR(gb_convertor){

    SC_METHOD(prc_gb);

    sensitive<

    };

    };

    #endifdut.cpp:

    #include "dut.h"

    void gb_convertor::prc_gb()

    {

    sc_uint  bin_temp = gray.read(), gray_temp = gray.read() ;

    while(gray_temp>>=1)

    bin_temp ^= gray_temp ;

    bin = bin_temp;

    }

    主要的实现部分已给出,至于其他主函数部分和monitor部分博主就不写了。。。。

    a6ff90256118b9aa6e20d53986820758.png

    展开全文
  • 格雷码二进制的转换 思路 为完成实验内容,可通过查表和格雷码计算两种方式完成,此处使用格雷码直接计算得出结果。 SHL算术左移命令可将二进制数的高位存入CF,直接得出高位数据,通过异或操作从高位到低位逐位...

    实验说明

    实验说明

    格雷码和二进制的转换

    在这里插入图片描述

    思路

    为完成实验内容,可通过查表和格雷码计算两种方式完成,此处使用格雷码直接计算得出结果。
    SHL算术左移命令可将二进制数的高位存入CF,直接得出高位数据,通过异或操作从高位到低位逐位循环8次解出二进制数,最后加上30H即为对应的ASCII码。

    汇编代码

    DATA SEGMENT
    GRA DB ?
    BIN DB ?
    DATA ENDS
    
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
    		MOV AX,DATA
    		MOV DS,AX
    		MOV GRA,1101b
    		MOV BIN,0
    		MOV BL,00h			;record bin
    		MOV DL,00h			;record last gray bit
    		MOV CX,8
    		MOV AL,GRA
    A1:
    		SHL BL,1
    		SHL AL,1
    		MOV DH,0
    		ADC DH,0			;assgin DH = CF 
    		XOR DL,DH
    		ADD BL,DL
    		LOOP A1
    		ADD BL,30h
    		MOV BIN,BL
    		MOV AH,0
    		INT 21h
    CODE ENDS
    END START
    

    流程图

    流程图

    调试检验

    通过MOV GRA,1101b指令设定格雷码的初值。
    调试过程
    通过-u命令查看所需的程序结尾断点的地址 076F:0031 CD21 INT 21
    调试过程
    通过-g 0031调试命令直接运行到程序结尾,可以看到BX=0039,对应了1101格雷码的ASCII码,调试验证成功。

    展开全文
  • 格雷码转二进制 思路: 不知道格雷码的定义是啥(貌似和异或有关)。看懂前面那个递归的定义,然后找找规律写个dfs就可以了。 # include # include # include # define ls rt # define rs...

    NWERC 2016
    Problem H Hamiltonian Hypercube
    Hypercube graphs are fascinatingly regular, hence you have devoted a lot of time studying the mathematics related to them. The vertices of a hypercube graph of dimension n are all binary strings of length n, and two vertices are connected if they differ in a single position. There are many interesting relationships between hypercube graphs and error-correcting code.
    One such relationship concerns the n-bit Gray Code, which is an ordering of the binary strings of length n, defined recursively as follows. The sequence of words in the n-bit code first consists of the words of the (n − 1)-bit code, each prepended by a 0, followed by the same words in reverse order, each prepended by a 1. The 1-bit Gray Code just consists of a 0 and a 1. For example the 3-bit Gray Code is the following sequence:
    000, 001, 011, 010, 110, 111, 101, 100
    Now, the n-bit Gray Code forms a Hamiltonian path in the n-dimensional hypercube, i.e., a path
    that visits every vertex exactly once (see Figure H.1).
    010
    000
    110
    100
    011
    001
    111
    101
    Figure H.1: The 3-dimensional hypercube and the Hamiltonian path corresponding to the 3-bit Gray Code.
    You wonder how many vertices there are between the vertices 0n (n zeros) and 1n (n ones) on that path. Obviously it will be somewhere between 2n−1 − 1 and 2n − 2, since in general 0n is the first vertex, and 1n is somewhere in the second half of the path. After finding an elegant answer to this question you ask yourself whether you can generalise the answer by writing a program that can determine the number of vertices between two arbitrary vertices of the hypercube, in the path corresponding to the Gray Code.
    Input
    The input consists of a single line, containing:
    • one integer n (1 ≤ n ≤ 60), the dimension of the hypercube
    • two binary strings a and b, both of length n, where a appears before b in the n-bit Gray Code.
    NWERC 2016 Problem H: Hamiltonian Hypercube 15
    Output
    NWERC 2016
    Output the number of code words between a and b in the n-bit Gray Code. Sample Input 1 Sample Output 1
    Sample Input 2 Sample Output 2
    3 001 111
    3
    3 110 100
    2

    题意: 格雷码转二进制
    思路: 不知道格雷码的定义是啥(貌似和异或有关)。看懂前面那个递归的定义,然后找找规律写个dfs就可以了。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #define ls rt << 1
    #define rs rt << 1 | 1
    using namespace std;
    typedef long long ll;
    const int maxn = 1e6 + 7;
    
    char a1[105],a2[105],s1[105],s2[105];
    ll p[65];
    
    ll dfs1(ll x)
    {
        if(x == 1)
        {
            if(s1[1] == '0')
                return 1;
            return 2;
        }
    
        ll ans = 1;
        if(s1[x] == '0')
            ans = dfs1(x - 1);
        else 
        {
            ll tmp1 = dfs1(x - 1),tmp2 = p[x - 1];
            ans = tmp1 + (tmp2 - tmp1) * 2 + 1; 
        }
        return ans;
    }
    
    ll dfs2(ll x)
    {
        if(x == 1)
        {
            if(s2[1] == '0')
                return 1;
            return 2;
        }
    
        ll ans = 1;
        if(s2[x] == '0')
        {
            ans = dfs2(x - 1);
        }
        else 
        {
            ll tmp1 = dfs2(x - 1),tmp2 = p[x - 1];
            ans = tmp1 + (tmp2 - tmp1) * 2 + 1; 
        }
        return ans;
    }
    
    int main()
    {
        int n;scanf("%d",&n);
        scanf("%s%s",a1 + 1,a2 + 1);
    
        p[0] = 1;
        for(int i = 1;i <= 61;i++)
            p[i] = p[i - 1] * 2;
        for(int i = 1;i <= n;i++)
        {
            s1[i] = a1[n - i + 1];
            s2[i] = a2[n - i + 1];
        }
        ll ans1 = dfs1(n);
        ll ans2 = dfs2(n);
        printf("%lld\n",abs(ans2 - ans1 - 1));
        return 0;
    }
    
    展开全文
  • 格雷码转二进制二进制转格雷码 代码如下 //gray to bin module gray2bin #(parameter ADDR_WIDTH=8)( input [ADDR_WIDTH-1:0] grayin, output [ADDR_WIDTH-1:0] binout, output reg [ADDR_WIDTH-1:0] ...

    格雷码转二进制码
    二进制码转格雷码
    代码如下

    
    //gray to bin 
    
    module gray2bin #(parameter ADDR_WIDTH=8)(
    	input [ADDR_WIDTH-1:0] grayin,
    	output [ADDR_WIDTH-1:0] binout,
    	output reg [ADDR_WIDTH-1:0] binout1,
    	output [ADDR_WIDTH-1:0] grayout
    	);
    	
    //调用gray2bin实现方式2的函数
    assign binout=gray2bin(grayin);
    
    gray2bin 实现方式1:always组合逻辑块
    integer j;
    always@(*)
    	for(j=0;j<ADDR_WIDTH;j=j+1)
    		binout1[j]= ^(grayin>>j);
    
    //gray2bin  实现方式2:function组合逻辑块
    function  [ADDR_WIDTH-1:0] gray2bin ( input [ADDR_WIDTH-1:0] gray);
    reg [31:0] i;
    for(i=0; i<ADDR_WIDTH;i=i+1)
    	gray2bin[i]=^(gray>> i);
    endfunction
    	
    //二进制转格雷码
    assign grayout=binout1^(binout1>>1);
    
    endmodule
    

    tb(sv)如下

    parameter ADDR_WIDTH=4;
    class datarand;
        rand bit [ADDR_WIDTH-1:0] data;
    endclass
    
    module tb_gray2bin(  );
    logic [ADDR_WIDTH-1:0] grayin,grayout, binout, binout1;
    
    gray2bin #(.ADDR_WIDTH(ADDR_WIDTH)) gray2bin(
        .grayin(grayin),
        .binout(binout),
        .binout1(binout1),
        .grayout(grayout)
        );
    datarand dr;
    integer k;
    initial
        begin
        dr=new();
        for(k=0;k<30;k=k+1)
        begin
        #10
        assert(dr.randomize());
        grayin=dr.data;
        end
        end
    
    endmodule
    
    展开全文
  • 格雷码二进制码的相互转换 (1)最高位相同; (2)从次高位到最低位,每位格雷码数值 Gi 为二进制码的对应位 Bi 与上一位 Bi+1 作比较 的结果:当 Bi与 Bi+1相同时,Gi为 0;相异时,Gi为 1,以此类推得出格雷...
  • 格雷码二进制及为何用格雷码做同步地址的编码1. 格雷码转二进制码2. 二进制转格雷码3. 为什么要选择格雷码作为同步地址的编码 具体转换过程可见上述图片的手推过程 1. 格雷码转二进制码 module gray_to_bi...
  • 格雷码二进制的转换

    万次阅读 多人点赞 2016-06-16 13:02:09
    格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。格雷码的基本特点就是任意两个相邻的...
  • 下图是格雷码转二进制 下面是二进制转格雷码
  • 格雷码二进制相互转换

    千次阅读 2019-04-15 20:41:15
    格雷码二进制相互转换 格雷码(Gray code)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码,...格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,虽然自然二进制码可以直接由数/模转换器...
  • 格雷码转换为二进制码 (i)二进制码的最高位(最左边)与格雷码的最高位相同; (ii) 将产生的每一位二进制码,与下一位相邻的格雷码相加(舍去进位),作为二进制码的下一位。 二进制码转换为格雷码 (i)格雷码的最高位(最...
  • 格雷码二进制之间转换及VHDL实现

    千次阅读 2019-02-11 17:45:58
    格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。格雷码的基本特点就是任意两个相邻的...
  • 格雷码简介及格雷码二进制的转换程序格雷码简介格雷码(英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-EmlleBaudot发明的一种编码[1] ,因Frank Gray于1953年申请专利...
  • 高速模数转换器中格雷码二进制编码对比.
  • 格雷码转换成二进制
  • 该源代码里包含二进制转格雷码 格雷码转二进制 十进制转二进制 二进制转十进制等,在Delphi xe2下通过测试。
  • verilog实现格雷码二进制的转化

    千次阅读 2018-09-27 18:59:52
     自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码二进制码的高位与次高 位相异或,而格雷码其余各位与次高位的求法相类似。   原理: 若二进制码表示为...
  • 四、 将格雷码转换为二进制 1. 将格雷码转换为二进制 2. 根据条件递增二进制值 3. 将二进制转换为格雷码 4. 将计数器的最终格雷码保存至寄存器中 四、由格雷码转换为二进制 公式 例:将格雷码转换为相等的二进制数 ...
  • verilog实现格雷码二进制的转化:

    千次阅读 2019-04-08 20:46:31
    自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码二进制码的高位与次高 位相异或,而格雷码其余各位与次高位的求法相类似。 原理:若二进制码表示为: B[N-1]...
  • #include #include /*格雷码转二进制*/ int grayToBin(int n) { int size = 0; int res[255]; int out = 0; int flag = 0; /*先缓存*/ while (n) { res[size++] = n%2;
  • 格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。格雷码的基本特点就是任意两个相邻的...
  • 基于PLC程序实现格雷码转换成二进制码.pdf《自动化技术与应用》 2017年第36卷第5期 PLC与DCSPLCandDCS基于PLC程序实现格雷码转换成二进制码马东来(中国科学技术馆,北京100012)摘 要:文章介绍了一种解决处理绝对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,929
精华内容 1,571
关键字:

格雷码转二进制