Verilog 中的 ^ 的用法 | 您所在的位置:网站首页 › coverslips是什么意思 › Verilog 中的 ^ 的用法 |
复习函数和任务中总遇到^,让我疑惑, cal_parity = ^address; 这个不是异或吗?怎么可以这么用呢? 难道意思是:cal_parity = cal_parity ^ address(类似于C语言),事实还真不是! 这里就来总结下^的用法: (1)奇偶判断 ^a操作就是将a中的每一位按位逐一进行异或,例如a=4'b1010,则b=1^0^1^0=0,由此可以判断a中为1的位数是奇数还是偶数,是一个便捷的操作。 开头遇到的问题就是这个问题,是按位异或。 (2)交换两个整数的值而不必用第三个参数 a = 9; b = 11; a=a^b; 1001^1011=0010 b=b^a; 1011^0010=1001 a=a^b; 0010^1001=1011 a = 11; b = 9; 这种用法就是两个数的异或。 (3)格雷码(Gray code) 格雷码(Gray code)是由贝尔实验室的Frank Gray在1940年提出,用于在PCM(Pusle Code Modulation)方法传送讯号时防止出错,并1953年三月十七日取得美国专利。格雷码是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一的。直接排列以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反覆,即可排列出n个位元的格雷码。 1、自然二进制码转换成二进制格雷码 自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。 二进制数转格雷码 (假设以二进制为0的值做为格雷码的0) 格雷码第n位 = 二进制码第(n+1)位+二进制码第n位。不必理会进制。 Verilog 代码:gray=(binary>>1)^binary; 格雷码转二进制数 二进制码第n位 = 二进制码第(n+1)位+格雷码第n位。因为二进制码和格雷码皆有相同位数,所以二进制码可从最高位的左边位元取0,以进行计算。 verilog 代码://------假设 reg [n-1] gray,binary; integer i; for(i=0;i>i) //gray移位后,自身按位异或 放一段代码这,用于参考: /*Logic to convert binary numbers into Gray coded binary numbers is implemented in the following Verilog Code. */module binary2gray();reg clk;reg rstn;reg [5:0] counter_binary, counter_binary_reg, counter_gray, counter_gray_reg;integer count, file_wr; /* Initial block to generate clock and reset */ initial begin clk = 0; rstn = 0; #100 rstn = 1; forever begin #10 clk = !clk; end end /* Synchronous Logic for registering the data and incrementing the counter for binary data */always @ (posedge clk or negedge rstn)begin if (!rstn) begin counter_binary_reg |
CopyRight 2018-2019 实验室设备网 版权所有 |