8位数据的奇偶校验verilog程序_zt

利用Verilog语言实现对一个8位数据进行奇偶检验,具体方法如下,
实现奇偶检验的算法就是,如果是偶校验,只要将该8位数据第一位和第二位进行异或,然后将得到的结果和第三位异或,依次下去,直到和第七位异或,
这样得到的最后结果,就是偶校验位;如果是奇校验,将上面的偶校验位取反即可。下面的一段小程序就是实现该功能的代码。

module modelsim_test (even_bit,odd_bit,a);
 input[7:0] a;
 output even_bit,odd_bit;
 assign even_bit = ^a;
 assign odd_bit = ~even_bit;
endmodule

然后利用modelsim测试一下得到波形如下图。

可以看到实现了奇偶校验的效果。但是一直对,assign even_bit = ^a;这段不明白。
^是按位异或,是二目运算符,这里怎么只用一个操作数呢?

其实在verilog中,与,或,非,异或,同或,这5个运算符,除了非以外,其他4个都是二目运算符,也即是需要两个操作数,然后中间加上相应的运算符。

但是这里有一种称作,一元约减运算符,就是说,与,或,异或,同或,这4个运算符可以作为一元约减运算符,也即是只需要一个操作数,例如:even_bit = ^a;
不过运算的过程,和二目运算符不同了,一元约减运算符的运算过程是:首先将操作数 的第一位和第二位进行与、或、非运算;然后再将运算结果和第三位进行与、或、非运算; 依次类推直至最后一位。
就是说,assign even_bit = ^a;等效于 assign even_bit = a[0]^a[1]^a[2]^a[3]^a[4]^a[5]^a[6]^a[7];

最后提到一下C语言 &=^=|=运算符,例如:b^=a;等效于b=b^a;这个和上面提到的,不是同一个东西,注意不要混淆。我第一次看到那个语句的时候,就是利用C语言的方式来理解的,百思不得其解。

时间: 2024-10-11 09:43:46

8位数据的奇偶校验verilog程序_zt的相关文章

sobel流水线操作Verilog程序

sobel算子的verilog实现,采用了流水线操作 1 module sobel_computer ( 2 clock , 3 reset, 4 OrigDataEn, 5 //SobelAluEn, 6 OrigData, 7 SobelData 8 ); 9 input clock ,reset; 10 input OrigDataEn ; 11 //input SobelAluEn ; 12 input [63:0] OrigData ; 13 output reg [63:0] Sob

64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考

最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的遇到了64位进程需要调用32位dll的问题.由于有一些32位dll没有源代码,无法重新编译为64位dll,所以只能想办法解决64位进程调用32位dll问题,这个问题让我很是挠头了几天. 相关资料:微软公司的官方网站针对这个问题描述如下:在64位的windows系统中,一个64位进程不能加载一个32位

一个CORDIC算法在圆周系统下的向量模式下获取角度的Verilog 程序

下面给出一个CORDIC算法在圆周系统下的向量模式下获取角度的Verilog 程序: /*==============================================================================*\        Filename : Cordic.v        Discription : 坐标旋转数字计算方法.通过该算法,对输入的向量坐标进行9次迭代     计算,得到该向量的模值和相角.        \*===============

c语言 对8bit位数据的某位置1或 0

/* 对8bit位数据的某位置1或 0 例:00001010  对第二位制零 00001000 */ #include<stdio.h> #include<stdlib.h> void bit_set_1_0(unsigned char *p_data,unsigned char position,int flag) { if (position > 8||position<1 || p_data == NULL || flag<0 || flag>1) {

经典的MySQL 数据备份校验daemon程序

# vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright 2010 United States Government as represented by the # Administrator of the National Aeronautics and Space Administration. # Copyright 2011 Justin Santa Barbara # All Rights Reserved. # Copyright

基于AVR的串口与PC机通信代码(uart8位数据)

为了以后根据此代码继续改进功能,特意把代码放在此处,也和大家一起学习. /************************************ AVR时钟:8.00MHz *波特率9600(51)8位数据,1位停止,当波特率设置为19200时,UBRR=25,4800=103 *注:波特率设置9600最佳,别的数据不稳定,不同波特率对应的UBRR值参考手册 *PC机向开发板发送一个字符,开发板将其大写字母回写给PC机 ***********************************/

C语言中32位数据平方后开方的程序

uint32_t sqrt_32(uint32_t M){ uint32_t N, i; uint32_t tmp, ttp; if (M == 0) { return 0; } N = 0; tmp = (M >> 30); M <<= 2; if(tmp > 1) { N++; tmp -= N; } for (i = 15; i > 0; i--) { N <<= 1; tmp <<= 2; tmp += (M >> 30);

[C++ Primer Plus] 2、处理数据(一)程序清单

一.程序清单3.1(变量的一些知识点) 1 #include<iostream> 2 #include<climits> 3 using namespace std; 4 5 void main() 6 { 7 cout<<"int is "<<sizeof(int)<<" bytes"<<endl; 8 cout<<"short is "<<size

一个实用的从文本文件读取数据进行排序的程序

程序说明 这是一个十分可靠的程序,这个程序的查错能力非常强悍.程序包含了文件操作,归并排序和字符串输入等多种技术. 程序的功能是从外部读取一个包括int型数据的文本文件,然后将它保存到内部临时数组,对数组进行排序后,以文本形式输出到指定的文件上.因为是int类型的数据,没有很严重的损失精度的问题. 正常运行要求: 包括数据的源文件内不能包括其他任何除数字和空白字符(空格,制表符,换行符)之外的任何字符,源文件最开始必须是数字字符,要保证源文件的数据计数正确.同时保证文件名有效. 完整代码 警告: