module code_crc(clk,reset,data,out);
input clk,reset;
input[7:0] data;
output[15:0] out;
reg[15:0] out;
//变量声明
reg[16:0] s;
integer i;
always@(posedge clk)
begin
if(!reset)
begin
s=17'b0;
out=16'b0;
end
else
begin
s={data[7:0],9'b0};
begin
for(i=7;i>0;i=i-1)
begin
if(s[16]==0) //若第一位为0,左移一位;
s=s<<1;
else begin
s=s^17'b11000000000000101;/*若第一位为1,则与生成多项式进行异或操作;*/
s=s<<1; //左移一位;
end
end
out=s[15:0]; //s的后16位即为校验位;
end
end
end
endmodule
|