微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog代码求助

verilog代码求助

时间:10-02 整理:3721RD 点击:

求助如下代码中20行和22行两行的具体含义?为啥可以完成gray码与二进制码的转换?
麻烦仔细说明一下那两行代码

  1. `define width 4
  2. module graycounter(clk,rst,gray);

  3.   input     clk       ;
  4.   input     rst       ;
  5.   output  reg  [`width-1:0] gray         ;

  6.    reg  [`width-1:0]  gnxt,bnxt,bin;
  7.    integer i;
  8.    
  9. always@(posedge clk or negedge rst) //寄存器输出
  10. if(!rst)
  11. gray <= 0;
  12. else
  13. gray <=gnxt;        //gray码寄存器

  14. always@(gray)
  15. begin
  16.         for(i = 0;i<`width;i= i+1)
  17.         bin[i] = ^(gray>>i);  //gray_to_bin
  18.         bnxt = bin+1;
  19.         gnxt = (bnxt>>1) ^ bnxt; //bin_to_gray
  20. end

  21. endmodule

  22.         
  23.         
  24.         
  25.         

复制代码

你自己带几个值进去试试就知道能不能了



不是,我是不理解他那两行代码的原理,跟我在书上看到的gray转二进制码的原理不太一致,书上是bin=gray^gray[i+1]^...^gray[n-1]而代码中是通过移位来实现的



  这个代码应该是对的 抄书上的 就不是太理解怎么人通过移位来实现的?

这个是格雷码与二进制码互转啊

^(gray>>i)  等同于
(gray>>i)[0]^(gray>>i)[1]^...(gray>>i)[n-1]
还是不明白的话 可以度娘一下 网上很多讲解Graytobin的原理



   你说的这个“bin=^(gray>>i)  等同于bin=(gray>>i)[0]^(gray>>i)[1]^...(gray>>i)[n-1] ”我能理解   
但是我查的资料上graytobin的转换公式是这样的“bin=gray^gray[i+1]^...^gray[n-1]”

请问"(gray>>i)[0]^(gray>>i)[1]^...(gray>>i)[n-1]" 跟 “gray^gray[i+1]^...^gray[n-1]”等价么?
我尝试带一个数进去 发现结果不一样啊!

你列一下真值表,一清二楚,,,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top