verilog代码求助
时间:10-02
整理:3721RD
点击:
求助如下代码中20行和22行两行的具体含义?为啥可以完成gray码与二进制码的转换?
麻烦仔细说明一下那两行代码
- `define width 4
- module graycounter(clk,rst,gray);
- input clk ;
- input rst ;
- output reg [`width-1:0] gray ;
- reg [`width-1:0] gnxt,bnxt,bin;
- integer i;
-
- always@(posedge clk or negedge rst) //寄存器输出
- if(!rst)
- gray <= 0;
- else
- gray <=gnxt; //gray码寄存器
- always@(gray)
- begin
- for(i = 0;i<`width;i= i+1)
- bin[i] = ^(gray>>i); //gray_to_bin
- bnxt = bin+1;
- gnxt = (bnxt>>1) ^ bnxt; //bin_to_gray
- end
- endmodule
-
-
-
-
你自己带几个值进去试试就知道能不能了
不是,我是不理解他那两行代码的原理,跟我在书上看到的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]”等价么?
我尝试带一个数进去 发现结果不一样啊!
你列一下真值表,一清二楚,,,
