幂幂加油,确实无感呢

是因为我在友好布署C奥迪Q7C模块时遇上许多题材,在网上没有找到一篇具有实际引导意义的篇章,在通过再三仿真修改再仿真之后获得了科学的结果,故愿意在本文中为我们提供全方位安排流程供大家迅速到位设计。本小说重要针对具体的其实使用给出一套亲测可行的贯彻格局,给出设计代码并提供虚假结果,供各位参考。

希望三生三世十里桃花收视率爆棚,作者会继续看下去的。么么哒。↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗↖(^ω^)↗加油

泪点在从London公安分局出来时候吵架时朱莉的那句“shut
up”~其余无感~三观什么的~本人默默扶正吧 ~(*^__^*) (*^__^*)
(*^__^*) (*^__^*) (*^__^*) (*^__^*) (*^__^*)
(*^__^*) (*^__^*) (*^__^*) (*^__^*) (*^__^*)
(*^__^*) (*^__^*) (*^__^*) (*^__^*) (*^__^*)
(*^__^*) (*^__^*) (*^__^*) (*^__^*)

             作者的想望与震撼都在里边了
         
                         ^_^

一.CRC概述
CSportageC(Cyclic Redundancy
Check),循环冗余校验,是一种数字通讯中的常用查错校验码。其性情是音信段和校验字段的长短能够自由选定。
校验方法为发送方对消息数量实施约定好除数的二进制除法总结,并将获取的余数附在帧的背后,发送给接收方;接收方也实施类似的算法,两侧相比结果的余数,相同则注解接收音讯完全且不易,以保险数据传输的不错和完整性。
具体来讲,在K位音讯码后再拼接CRUISER位的校验码,整个编码长度为N位,由此,那种编码也叫码。对于七个加以的码,能够表明存在三个最高次幂为N-K=讴歌MDX的多项式G能够生成K位音讯的校验码,而G叫做那些C大切诺基C码的成形多项式。
校验码的切切实实变化进程为:假设要发送的消息用多项式C表示,将C左移昂Cora位2RAV4),那样C的动手就会空出奥德赛位,那便是校验码的职责。用
C
2牧马人 除以生成多项式G得到的余数正是校验码FCS(Frame Check Series)。
 任意三个由二进制位串组成的代码都足以和二个周详仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111应和的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。
CEscortC校验依照所选择的变越多项式差别分为很多不一的正儿八经,常见的有:
名称 生成多项式 简记式 应用举例

© 本文版权归小编  三生有缘
 全部,任何款式转发请联系作者。

CRC-4 x4+x+1 3 ITU G.704

CRC-8 x8+x5+x4+1 31 DS18B20
CRC-12 x12+x11+x3+x2+x+1 0x80F
CRC-16 x16+x15+x2+1 0x8005 IBM SDLC
CRC-ITU x16+x12+x5+1 0x1021 ISO HDLC, ITU
CRC-32 x32+x26+x23+…+x2+x+1 0x04C11DB7 ZIP, RAR
CRC-32c x32+x28+x27+…+x8+x6+1 0x1EDC6F41 SCTP
表达:简记式最高位应为1,此处都简短了;

二.落真实意况势
本小说所要讲的正统为C陆风X8C-ITU(CCITT-Xmodem),即生成多项式为0x1021
0x1021 = 0x11021 = 1,0001,0000,0010,0001

在此提供三个在线总计C大切诺基C校验网站,方便进行求证

源代码根据供给在源码网站开始展览转变,后基于自身的要求进行修改,仿真验证;
现提供生李松益码的步调:
STEP1:
STEP2:
依照实际须要选取输入数据位宽和出口校验码位宽,C福特ExplorerC校验标准为自定义恐怕可选的两种;
澳门新葡萄京娱乐 1
STEP3: 若选用User
defined,则进入第贰页选拔自定义的多项式,本仿真采纳CCITT标准,即生成多项式为x16+x12+x5+1,此处只须求选中1,x5,x12即可,因为x16为1是暗许的;
澳门新葡萄京娱乐 2
STEP4: 对转移的Verilog大概VHDL语言代码实行改动,应用到实际个中;

三.实际使用仿真
现基于小编实际采纳场景实行三个有血有肉的C陆风X8C校验设计与虚假,当中,always
模块里的C奥德赛C校验总括进程不要求精通,若必要精晓,能够下载该网站提交的篇章
A Practical Parallel CRC Generation Method
常用的C奥迪Q5C校验方法有素来总计二进制除法,查表法,具体育项目测验算原理见下链接

代码如下:

module CRC(
input clk,//输入时钟
input reset,//总体复位信号
input crc_en,//选拔是或不是举行下一步C本田UR-VC运算
input [63:0] data_in,//输入数据为陆拾肆位
output [15:0] crc_out//输出多少即CCRUISERC校验结果为拾二人
);
reg [15:0] lfsr_q,lfsr_c;
wire reset;
assign crc_out = lfsr_c;

always @ begin
lfsr_c[0] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[3] ^ lfsr_q[4]
^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[10] ^ lfsr_q[15] ^
data_in[0] ^ data_in[4] ^ data_in[8] ^ data_in[11] ^
data_in[12] ^ data_in[19] ^ data_in[20] ^ data_in[22] ^
data_in[26] ^ data_in[27] ^ data_in[28] ^ data_in[32] ^
data_in[33] ^ data_in[35] ^ data_in[42] ^ data_in[48] ^
data_in[49] ^ data_in[51] ^ data_in[52] ^ data_in[55] ^
data_in[56] ^ data_in[58] ^ data_in[63];
lfsr_c[1] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[4] ^ lfsr_q[5]
^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[11] ^ data_in[1] ^
data_in[5] ^ data_in[9] ^ data_in[12] ^ data_in[13] ^
data_in[20] ^ data_in[21] ^ data_in[23] ^ data_in[27] ^
data_in[28] ^ data_in[29] ^ data_in[33] ^ data_in[34] ^
data_in[36] ^ data_in[43] ^ data_in[49] ^ data_in[50] ^
data_in[52] ^ data_in[53] ^ data_in[56] ^ data_in[57] ^
data_in[59];
lfsr_c[2] = lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[5] ^ lfsr_q[6]
^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[12] ^ data_in[2] ^
data_in[6] ^ data_in[10] ^ data_in[13] ^ data_in[14] ^
data_in[21] ^ data_in[22] ^ data_in[24] ^ data_in[28] ^
data_in[29] ^ data_幂幂加油,确实无感呢。in[30] ^ data_in[34] ^ data_in[35] ^
data_in[37] ^ data_in[44] ^ data_in[50] ^ data_in[51] ^
data_in[53] ^ data_in[54] ^ data_in[57] ^ data_in[58] ^
data_in[60];
lfsr_c[3] = lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[6] ^ lfsr_q[7]
^ lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[13] ^ data_in[3] ^
data_in[7] ^ data_in[11] ^ data_in[14] ^ data_in[15] ^
data_in[22] ^ data_in[23] ^ data_in[25] ^ data_in[29] ^
data_in[30] ^ data_in[31] ^ data_in[35] ^ data_in[36] ^
data_in[38] ^ data_in[45] ^ data_in[51] ^ data_in[52] ^
data_in[54] ^ data_in[55] ^ data_in[58] ^ data_in[59] ^
data_in[61];
lfsr_c[4] = lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[7] ^ lfsr_q[8]
^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[14] ^ data_in[4] ^
data_in[8] ^ data_in[12] ^ data_in[15] ^ data_in[16] ^
data_in[23] ^ data_in[24] ^ data_in[26] ^ data_in[30] ^
data_in[31] ^ data_in[32] ^ data_in[36] ^ data_in[37] ^
data_in[39] ^ data_in[46] ^ data_in[52] ^ data_in[53] ^
data_in[55] ^ data_in[56] ^ data_in[59] ^ data_in[60] ^
data_in[62];
lfsr_c[5] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[3] ^ lfsr_q[4]
^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[9] ^
lfsr_q[10] ^ lfsr_q[12] ^ lfsr_q[13] ^ data_in[0] ^
data_in[4] ^ data_in[5] ^ data_in[8]澳门新葡萄京娱乐, ^ data_in[9] ^
data_in[11] ^ data_in[12] ^ data_in[13] ^ data_in[16] ^
data_in[17] ^ data_in[19] ^ data_in[20] ^ data_in[22] ^
data_in[24] ^ data_in[25] ^ data_in[26] ^ data_in[28] ^
data_in[31] ^ data_in[35] ^ data_in[37] ^ data_in[38] ^
data_in[40] ^ data_in[42] ^ data_in[47] ^ data_in[48] ^
data_in[49] ^ data_in[51] ^ data_in[52] ^ data_in[53] ^
data_in[54] ^ data_in[55] ^ data_in[57] ^ data_in[58] ^
data_in[60] ^ data_in[61];
lfsr_c[6] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[4]
^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[8] ^
lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[13] ^ lfsr_q[14] ^
data_in[1] ^ data_in[5] ^ data_in[6] ^ data_in[9] ^
data_in[10] ^ data_in[12] ^ data_in[13] ^ data_in[14] ^
data_in[17] ^ data_in[18] ^ data_in[20] ^ data_in[21] ^
data_in[23] ^ data_in[25] ^ data_in[26] ^ data_in[27] ^
data_in[29] ^ data_in[32] ^ data_in[36] ^ data_in[38] ^
data_in[39] ^ data_in[41] ^ data_in[43] ^ data_in[48] ^
data_in[49] ^ data_in[50] ^ data_in[52] ^ data_in[53] ^
data_in[54] ^ data_in[55] ^ data_in[56] ^ data_in[58] ^
data_in[59] ^ data_in[61] ^ data_in[62];
lfsr_c[7] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[5]
^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[9] ^
lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[14] ^ lfsr_q[15] ^
data_in[2] ^ data_in[6] ^ data_in[7] ^ data_in[10] ^
data_in[11] ^ data_in[13] ^ data_in[14] ^ data_in[15] ^
data_in[18] ^ data_in[19] ^ data_in[21] ^ data_in[22] ^
data_in[24] ^ data_in[26] ^ data_in[27] ^ data_in[28] ^
data_in[30] ^ data_in[33] ^ data_in[37] ^ data_in[39] ^
data_in[40] ^ data_in[42] ^ data_in[44] ^ data_in[49] ^
data_in[50] ^ data_in[51] ^ data_in[53] ^ data_in[54] ^
data_in[55] ^ data_in[56] ^ data_in[57] ^ data_in[59] ^
data_in[60] ^ data_in[62] ^ data_in[63];
lfsr_c[8] = lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[6]
^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[10] ^
lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[15] ^ data_in[3] ^
data_in[7] ^ data_in[8] ^ data_in[11] ^ data_in[12] ^
data_in[14] ^ data_in[15] ^ data_in[16] ^ data_in[19] ^
data_in[20] ^ data_in[22] ^ data_in[23] ^ data_in[25] ^
data_in[27] ^ data_in[28] ^ data_in[29] ^ data_in[31] ^
data_in[34] ^ data_in[38] ^ data_in[40] ^ data_in[41] ^
data_in[43] ^ data_in[45] ^ data_in[50] ^ data_in[51] ^
data_in[52] ^ data_in[54] ^ data_in[55] ^ data_in[56] ^
data_in[57] ^ data_in[58] ^ data_in[60] ^ data_in[61] ^
data_in[63];
lfsr_c[9] = lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[7]
^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[11] ^
lfsr_q[13] ^ lfsr_q[14] ^ data_in[4] ^ data_in[8] ^
data_in[9] ^ data_in[12] ^ data_in[13] ^ data_in[15] ^
data_in[16] ^ data_in[17] ^ data_in[20] ^ data_in[21] ^
data_in[23] ^ data_in[24] ^ data_in[26] ^ data_in[28] ^
data_in[29] ^ data_in[30] ^ data_in[32] ^ data_in[35] ^
data_in[39] ^ data_in[41] ^ data_in[42] ^ data_in[44] ^
data_in[46] ^ data_in[51] ^ data_in[52] ^ data_in[53] ^
data_in[55] ^ data_in[56] ^ data_in[57] ^ data_in[58] ^
data_in[59] ^ data_in[61] ^ data_in[62];
lfsr_c[10] = lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[6] ^
lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[11] ^
lfsr_q[12] ^ lfsr_q[14] ^ lfsr_q[15] ^ data_in[5] ^
data_in[9] ^ data_in[10] ^ data_in[13] ^ data_in[14] ^
data_in[16] ^ data_in[17] ^ data_in[18] ^ data_in[21] ^
data_in[22] ^ data_in[24] ^ data_in[25] ^ data_in[27] ^
data_in[29] ^ data_in[30] ^ data_in[31] ^ data_in[33] ^
data_in[36] ^ data_in[40] ^ data_in[42] ^ data_in[43] ^
data_in[45] ^ data_in[47] ^ data_in[52] ^ data_in[53] ^
data_in[54] ^ data_in[56] ^ data_in[57] ^ data_in[58] ^
data_in[59] ^ data_in[60] ^ data_in[62] ^ data_in[63];
lfsr_c[11] = lfsr_q[0] ^ lfsr_q[5] ^ lfsr_q[6] ^
lfsr_q[7] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[11] ^
lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[15] ^ data_in[6] ^
data_in[10] ^ data_in[11] ^ data_in[14] ^ data_in[15] ^
data_in[17] ^ data_in[18] ^ data_in[19] ^ data_in[22] ^
data_in[23] ^ data_in[25] ^ data_in[26] ^ data_in[28] ^
data_in[30] ^ data_in[31] ^ data_in[32] ^ data_in[34] ^
data_in[37] ^ data_in[41] ^ data_in[43] ^ data_in[44] ^
data_in[46] ^ data_in[48] ^ data_in[53] ^ data_in[54] ^
data_in[55] ^ data_in[57] ^ data_in[58] ^ data_in[59] ^
data_in[60] ^ data_in[61] ^ data_in[63];
lfsr_c[12] = lfsr_q[0] ^ lfsr_q[3] ^ lfsr_q[4] ^
lfsr_q[6] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[13] ^
lfsr_q[14] ^ lfsr_q[15] ^ data_in[0] ^ data_in[4] ^
data_in[7] ^ data_in[8] ^ data_in[15] ^ data_in[16] ^
data_in[18] ^ data_in[22] ^ data_in[23] ^ data_in[24] ^
data_in[28] ^ data_in[29] ^ data_in[31] ^ data_in[38] ^
data_in[44] ^ data_in[45] ^ data_in[47] ^ data_in[48] ^
data_in[51] ^ data_in[52] ^ data_in[54] ^ data_in[59] ^
data_in[60] ^ data_in[61] ^ data_in[62] ^ data_in[63];
lfsr_c[13] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[4] ^
lfsr_q[5] ^ lfsr_q[7] ^ lfsr_q[12] ^ lfsr_q[13] ^
lfsr_q[14] ^ lfsr_q[15] ^ data_in[1] ^ data_in[5] ^
data_in[8] ^ data_in[9] ^ data_in[16] ^ data_in[17] ^
data_in[19] ^ data_in[23] ^ data_in[24] ^ data_in[25] ^
data_in[29] ^ data_in[30] ^ data_in[32] ^ data_in[39] ^
data_in[45] ^ data_in[46] ^ data_in[48] ^ data_in[49] ^
data_in[52] ^ data_in[53] ^ data_in[55] ^ data_in[60] ^
data_in[61] ^ data_in[62] ^ data_in[63];
lfsr_c[14] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[5] ^
lfsr_q[6] ^ lfsr_q[8] ^ lfsr_q[13] ^ lfsr_q[14] ^
lfsr_q[15] ^ data_in[2] ^ data_in[6] ^ data_in[9] ^
data_in[10] ^ data_in[17] ^ data_in[18] ^ data_in[20] ^
data_in[24] ^ data_in[25] ^ data_in[26] ^ data_in[30] ^
data_in[31] ^ data_in[33] ^ data_in[40] ^ data_in[46] ^
data_in[47] ^ data_in[49] ^ data_in[50] ^ data_in[53] ^
data_in[54] ^ data_in[56] ^ data_in[61] ^ data_in[62] ^
data_in[63];
lfsr_c[15] = lfsr_q[0] ^ lfsr_q[2] ^ lfsr_q[3] ^
lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[9] ^ lfsr_q[14] ^
lfsr_q[15] ^ data_in[3] ^ data_in[7] ^ data_in[10] ^
data_in[11] ^ data_in[18] ^ data_in[19] ^ data_in[21] ^
data_in[25] ^ data_in[26] ^ data_in[27] ^ data_in[31] ^
data_in[32] ^ data_in[34] ^ data_in[41] ^ data_in[47] ^
data_in[48] ^ data_in[50] ^ data_in[51] ^ data_in[54] ^
data_in[55] ^ data_in[57] ^ data_in[62] ^ data_in[63];
end
//此段代码为C哈弗C具体的揣度进程,基于LFSPAJERO(线性反馈移位寄存器);

always @(posedge clk, negedge reset) begin
if begin
lfsr_q <= {16{1’b0}};
//CCITT_XModem开头值为16‘h0;其余协商依据具体情况修改;
end
else begin
lfsr_q <= crc_en ? lfsr_c :
lfsr_q;//此处crc_en设为0,只计算一回即出口CQashqaiC校验结果,不然会持续不断开始展览演算
end
end
endmodule

编纂testbench文件对该模块举办虚假:

module crc_simul;
reg [63:0] data_in;
reg crc_en;
reg reset;
reg clk;
wire [15:0] crc_out;
crc uut(
.data_in,
.crc_en,
.crc_out,
.reset,
.clk;
initial begin
data_in = 64’d0;
crc_en = 1’b0;
reset=1’b0;
clk = 1’b0;
#9;
reset=1’b1;
#200;
data_in =
{8’hFF,8’hFF,8’hAA,8’h55,8’h00,8’h01,16’h13EC};//结果应为3DC3;
#500;
data_in =
{8’hFF,8’hFF,8’hAA,8’h55,8’h00,8’h01,16’h01F4};//结果应为CBEB;
end

always #1 clk = ~clk;
endmodule

虚假结果如下
澳门新葡萄京娱乐 3

能够印证,仿真结果正确,在其实使用中也得以正确运转;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图