概述
reference : http://www.cnblogs.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的位数是奇数还是偶数,是一个便捷的操作。
三、格雷码(Gray code)
格雷码(Gray code)是由贝尔实验室的Frank Gray在1940年提出,用于在PCM(Pusle Code Modulation)方法传送讯号时防止出错,并于1953年三月十七日取得美国专利。格雷码是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一的。
直接排列
以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反覆,即可排列出n个位元的格雷码。
1、自然二进制码转换成二进制格雷码
自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。
2、二进制格雷码转换成自然二进制码
二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。
二进制数转格雷码
(假设以二进制为0的值做为格雷码的0)
格雷码第n位 = 二进制码第(n+1)位+二进制码第n位。不必理会进制。
格雷码转二进制数
二进制码第n位 = 二进制码第(n+1)位+格雷码第n位。因为二进制码和格雷码皆有相同位数,所以二进制码可从最高位的左边位元取0,以进行计算。
*/
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 <= '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分频时钟。
最后
以上就是爱撒娇吐司为你收集整理的异或^的几个应用(verilog)的全部内容,希望文章能够帮你解决异或^的几个应用(verilog)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复