基础知识:
1.波特率:模拟线路信号的速率,也叫调制速率,未压缩的话就是每秒钟传输的数据位数。如果压缩了每秒钟传输的数据位数大于调制速率。如果彼此之间通信,就要求波特率一致,高波特率器件会向低波特率器件向下兼容。
2.比特率:是数字信号的速率,每秒传输多少二进制代码的有效位,b/s,kb/s,mb/s。这里的换算倍数是1000,区别于计算器存储单元的1024倍。
比特率=波特率*单个调制状态对应的二进制位数。两相调制(单个调制状态对应1个二进制位)的比特率等于波特率;四相调制(单个调制状态对应2个二进制位)的比特率为波特率的两倍;八相调制(单个调制状态对应3个二进制位)的比特率为波特率的三倍;依次类推。
3偶校验:当发送的数据段中1的个数为偶数的时候,校验位为0,否则为1
奇校验:当发送的数据段中1的个数为奇数的时候,校验位为0,否则为1
举个简单的例子,A发送数据0x35到B,后面紧跟一个奇校验位J, 0x35的二进制= 0011 0101,可以看出8个数据位中一共有4个‘1’,那此时硬件会根据“1”的个数来设置J,这里会将奇校验位J调整为“1”,为什么呢? 因为数据位的“1”的个数是偶数,而我们用的是奇校验,所以为了达到有奇数个“1”的目的,调整奇偶校验位J为“1”,那么这9个位发出去就有奇数个“1”啦,当B接收的时候,B的硬件同样会对接收到“数据+J”中“1”的个数进行计数判断,如果是奇数个“1”,则认为数据接收正确,否则认为数据错误。而当A发送数据0x25( 0010 0101)到B的时候,则J应该就是“0”了,因为要保证发送出去的数据位+J位一共有奇数个“1”。
反正一句话,对于发送方就是这个位就是来调整的,对于接收方局势数据加上这位来算是否是奇数或者偶数来判断是否传输错误。
wire类型相当于物理连线,默认值为z,高阻态 reg类型相当于触发器,默认值为x,不定态
wire只能被assign连续赋值,reg只能在initial和always中赋值。
4.校验码和校验位的区别
校验码就是数据帧中的第n位,是一个位的概念
假如是偶校验,数据段中含有偶数个1,这个时候就要通过^data操作来算出校验位上的数字等于多少,这个数用来修正整体数据帧的奇偶,此时应该为0;如果数据段传了奇数个1,则为了保证整体数据帧1的个数为偶数,校验码为1。
5。assign even_bit = ^data; assign odd_bit = ~even_bit
论述:Verilog中的奇偶校验_永恒的止水的博客-优快云博客
6.阻塞赋值和非阻塞赋值
(1)当用always块来描述组合逻辑(combinational logic)时,应当使用阻塞赋值。
(2)对于时序逻辑(sequential logic)的描述和建模,应当使用非阻塞赋值。
(3)在同一个always模块中,最好不要混合使用阻塞赋值和非阻塞赋值,对同一变量
既进行阻塞赋值,又进行非阻塞赋值,在综合时会出错。所以always中要么全部使用非
阻塞赋值,要么把阻塞赋值和非阻塞赋
值分在不同的always中书写。
(4)尽量不要再在多个不同的always块中对同一变量赋值。
(5)使用$strobe显示使用非阻塞赋值的变量。