源地址: http://www.cn blogs.com/danh/archive/2010/12/24/1915810.html一,不使用第三个参数交换两个整数的值
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;
二.奇偶判断
^a操作是指逐位异或a中的各位。 例如,如果a=4'b1010,则b=1^0^1^0=0。 由此,可以判断a中的1位是奇数还是偶数,是方便的操作。
三、格雷码(格雷码) )。
格雷码(Graycode )由贝尔实验室的FrankGray于1940年提出,它防止了以脉冲编码调制(PCM )方式发送信号时的错误,并于1953年3月17日获得了美国专利。 格雷码是数列的集合,相邻两个数之间只变一个位,没有数字权限,且格雷码顺序不唯一。
直接排列
设二进制为0的值的格雷码在第0项中,第1项改变最右边的比特,第2项改变从右边起第一个是1的比特的左边比特。 第3、4项的方法与第1、2项相同,这样反转,可以排列n位的格雷码。
1、自然二进制码到二进制格雷码的转换
自然二进制代码转换为二进制格雷码。 其规律是将自然二进制代码的最高有效位保持为格雷码的最高有效位。 另一方面,二阶高阶格雷码的高阶位与二阶高阶位不同或不同,但格雷码的其馀位类似于二阶高阶位的求法相。
2、将二进制格雷码转换为自然二进制码
二进制格雷码转换为自然二进制码。 其规律是将格雷码的最高有效位保持为自然二进制码的最高有效位。 另外,第二高级自然二进制码与第二高级自然二进制码不同或不同,自然二进制码的其馀位类似于第二高级自然二进制码的求法相。
二进制数转格雷码
(假设格雷码的0为二进制0 )
格雷码第n位=二进制码第(n 1)位二进制码第n位。 没有必要无视进制。
Verilog代码:gray=(binary1) ^binary;
格雷码转二进制数二进制码第n位=二进制码第(n 1 )位格雷码第n位。 二进制代码和格雷码有相同的位数,所以二进制代码可以从最高有效的左位中取0进行计算。 verilog代码://----reg[n-1]gray,binary; integer i; for(I=0; i=n-1; i=i 1) binary[I]=^(grayi )//gray移位后,自身按位异或放置代码,这仅供参考:/* logictoconvertbinarynumbersintograycodedbivity
*/http://www.Sina.com/binary2gray (;moduleclk;regrstn; 3358 www.Sina.com/[ 5:0 ] counter _ binary,counter_binary_reg,counter_gray,counter_gray_reg;regcount,file_wr;
/* initialblocktogenerateclockandreset */http://www.Sina.com/http://www.Sina.com /
clk=0; rstn=0; #100rstn=1;
http://www.Sina.com/http://www.Sina.com /
#10clk=! clk;
http://www.Sina.com/http://www.Sina.com /
/* synchronouslogicforregisteringthedataandincrementingthecounterforbinarydata */http://www.Sina.com/@ 6533http://www.Sina
regrstn )integer
br> counter_binary_reg <= 'b0;counter_gray_reg <= 'b0; end
else begin
counter_binary_reg <= counter_binary + 1;
counter_gray_reg <= counter_gray;
$display("binary number= 6'b%b : gray en-coded binary number = 6'b%b", counter_binary_reg, counter_gray_reg); end end
/* Logic is to get Gray code from Binary code */
function[5:0] binary2gray ;
input[5:0] value;
integer i;
begin
binary2gray[5] = value[5];
for (i=5; i>0; i = i - 1)
binary2gray[i-1] = value[i] ^ value[i - 1];
end
endfunction
/* Get gray encoded output */
always @(*)
begin
counter_gray = counter_gray_reg;
counter_binary = counter_binary_reg;
counter_gray = binary2gray(counter_binary_reg); end
endmodule
四、奇数分频
奇数分频电路:
奇数分频电路常用的是错位“异或”法的原理。如进行三分频,通过待分频时钟的上升沿触发计数器进行模三技术,当计数器计数到邻近值进行两次翻转。比如计数器在计数到1时,输出时钟进行翻转,计数到2时再进行翻转,即在邻近的1和2时刻进行两次翻转。这样实现的三分频占空比为1/3或2/3.如果要实现占空比为50%的三分频时钟,可通过待分频的时钟上升沿触发计数器和下降沿触发计数器进行三分频,然后将上升沿和下降沿产生的三分频时钟进行相或预算,即可得到占空比为50%的三分频时钟。
错位“异或”法推广:
对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发的模N计数,计数到某一选定值时,进行输出时钟翻转,然后进过(N-1)/2再次进行翻转得到一个占空比非50%的技术分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同时,进行输出时钟翻转,同样经过(n-1)/2时,输出时钟再次翻转生成占空比非50%的奇数N分频时钟。两个占空比非50%的时钟相或运算,得到占空比为50%的奇数N分频时钟。