⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc.v

📁 用于10M
💻 V
字号:
module crc(
		rst,
		clk,
		din,  //input data
		vin,  //input data valid flag
		dout, //output data
		vout  //output data valid flag
		);
input		rst;
input		clk;
input[7:0]	din;
input		vin;
output[7:0]	dout;
output		vout;

reg[7:0]	dout;
reg		vout
reg[31:0]	crcreg; //CRC register


reg[2:0] current;
reg[2:0] next;
reg[2:0] counter;
wire[7:0] crctemp;

parameter IDLE=1, DTP=2, CTP=4; 
//DTP: DATA Transmitt Process; CTP: CRC DATA Transmitt Process

always@(current or vin or counter)
begin
	next=3'bxxx;
	case(current)
	IDLE: begin
		if(vin)
		next=DTP;
		else
		next=ILDE;
	end
	DTP: begin
		if(!vin)
		next=CTP;
		else
		next=DTP;
	end
	CTP: begin
		if(counter==4)
		next=IDLE;
		else
		next=CTP;
	end
	default: next=IDLE;
	endcase
end

always@(posedge clk or negedge rst)
begin
	if(!rst) current<=IDLE;
	else current<=next;
end

always@(posedge clk or negedge rst)
begin
	if(!rst) counter<=3'b000;
	else begin
		if(next==CTP)
		counter<=counter+1;
		else
		conter<=3'b000;
	end
end

always@(posedge clk or negedge rst)
begin
	if(!rst) vout<=1'b0;
	else begin
		case(next)
		DTP,
		CTP: vout<=1'b1;
		default: vout<=1'b0;
		endcase
	end
end

always@(posedge clk or negedge rst)
begin
	if(!rst) dout<=8'h00;
	else begin
		case(next)
		DTP: dout<=din;
		CTP: dout<=crctemp;
		default: dout<=8'h00;
		endcase
	end
end

assign crctemp={crcreg[24],crcreg[25],crcreg[26],crcreg[27],crcreg[28],crcreg[29],crcreg[30],crcreg[31]}^8'hff;    
always@(posedge clk or negedge rst)
begin
	if(!rst)crcreg<=32'hffffffff;
	else begin
		case(next)
		DTP: begin
			crcreg[0] <= crcreg[30] ^ din[7] ^ crcreg[24] ^ din[1];
			crcreg[1] <= crcreg[30] ^ crcreg[31] ^ din[6] ^ din[7] ^ crcreg[24] ^ din[0] ^ crcreg[25] ^ din[1];
			crcreg[2] <= crcreg[30] ^ crcreg[31] ^ din[5] ^ din[6] ^ din[7] ^ crcreg[24] ^ crcreg[25] ^ crcreg[26] ^ din[0] ^ din[1];
			crcreg[3] <= din[4] ^ crcreg[31] ^ din[5] ^ din[6] ^ crcreg[25] ^ crcreg[26] ^ crcreg[27] ^ din[0];
			crcreg[4] <= crcreg[30] ^ din[4] ^ din[5] ^ din[7] ^ crcreg[24] ^ crcreg[26] ^ crcreg[27] ^ crcreg[28] ^ din[1] ^ din[3];
			crcreg[5] <= crcreg[30] ^ din[4] ^ crcreg[31] ^ din[6] ^ din[7] ^ crcreg[24] ^ crcreg[25] ^ crcreg[27] ^ crcreg[28] ^ crcreg[29] ^ din[0] ^ din[1] ^ din[2] ^ din[3]; 
			crcreg[6] <= crcreg[30] ^ crcreg[31] ^ din[5] ^ din[6] ^ crcreg[25] ^ crcreg[26] ^ crcreg[28] ^ crcreg[29] ^ din[0] ^ din[1] ^ din[2] ^ din[3]; 
			crcreg[7] <= din[4] ^ din[5] ^ crcreg[31] ^ din[7] ^ crcreg[24] ^ crcreg[26] ^ crcreg[27] ^ crcreg[29] ^ din[0] ^ din[2]; 
			crcreg[8] <= din[4] ^ din[6] ^ din[7] ^ crcreg[24] ^ crcreg[25] ^ crcreg[27] ^ crcreg[28] ^ crcreg[0] ^ din[3];
			crcreg[9] <= din[5] ^ din[6] ^ crcreg[25] ^ crcreg[26] ^ crcreg[28] ^ crcreg[29] ^ din[2] ^ crcreg[1] ^ din[3];
			crcreg[10] <= din[4] ^ din[5] ^ din[7] ^ crcreg[24] ^ crcreg[26] ^ crcreg[27] ^ crcreg[29] ^ din[2] ^ crcreg[2];
			crcreg[11] <= din[4] ^ crcreg[3] ^ din[6] ^ din[7] ^ crcreg[24] ^ crcreg[25] ^ crcreg[27] ^ crcreg[28] ^ din[3]; 
			crcreg[12] <= crcreg[30] ^ din[5] ^ crcreg[4] ^ din[6] ^ din[7] ^ crcreg[24] ^ crcreg[25] ^ crcreg[26] ^ crcreg[28] ^ crcreg[29] ^ din[1] ^ din[2] ^ din[3]; 
			crcreg[13] <= din[4] ^ crcreg[30] ^ crcreg[31] ^ din[5] ^ din[6] ^ crcreg[5] ^ crcreg[25] ^ crcreg[26] ^ crcreg[27] ^ crcreg[29] ^ din[0] ^ din[1] ^ din[2];
			crcreg[14] <= din[4] ^ crcreg[30] ^ din[5] ^ crcreg[31] ^ crcreg[6] ^ crcreg[26] ^ crcreg[27] ^ crcreg[28] ^ din[0] ^ din[1] ^ din[3]; 
			crcreg[15] <= din[4] ^ crcreg[31] ^ crcreg[7] ^ crcreg[27] ^ crcreg[28] ^ crcreg[29] ^ din[0] ^ din[2] ^ din[3]; 
			crcreg[16] <= din[7] ^ crcreg[24] ^ crcreg[8] ^ crcreg[28] ^ crcreg[29] ^ din[2] ^ din[3];
			crcreg[17] <= crcreg[30] ^ din[6] ^ crcreg[25] ^ crcreg[9] ^ crcreg[29] ^ din[1] ^ din[2];
			crcreg[18] <= crcreg[30] ^ din[5] ^ crcreg[31] ^ crcreg[26] ^ din[0] ^ din[1] ^ crcreg[10];
			crcreg[19] <= din[4] ^ crcreg[31] ^ crcreg[27] ^ din[0] ^ crcreg[11];
			crcreg[20] <= crcreg[12] ^ crcreg[28] ^ din[3]; 
			crcreg[21] <= crcreg[13] ^ crcreg[29] ^ din[2];
			crcreg[22] <= crcreg[14] ^ din[7] ^ crcreg[24];
			crcreg[23] <= crcreg[30] ^ din[6] ^ din[7] ^ crcreg[24] ^ crcreg[15] ^ crcreg[25] ^ din[1];
			crcreg[24] <= crcreg[31] ^ din[5] ^ din[6] ^ crcreg[25] ^ crcreg[16] ^ crcreg[26] ^ din[0];
			crcreg[25] <= din[4] ^ din[5] ^ crcreg[26] ^ crcreg[17] ^ crcreg[27];
			crcreg[26] <= crcreg[30] ^ din[4] ^ din[7] ^ crcreg[24] ^ crcreg[27] ^ crcreg[18] ^ crcreg[28] ^ din[1] ^ din[3];
			crcreg[27] <= crcreg[31] ^ din[6] ^ crcreg[25] ^ crcreg[28] ^ crcreg[19] ^ crcreg[29] ^ din[0] ^ din[2] ^ din[3];
			crcreg[28] <= crcreg[30] ^ din[5] ^ crcreg[26] ^ crcreg[29] ^ din[1] ^ din[2] ^ crcreg[20];
			crcreg[29] <= din[4] ^ crcreg[30] ^ crcreg[21] ^ crcreg[31] ^ crcreg[27] ^ din[0] ^ din[1]; 
			crcreg[30] <= crcreg[31] ^ crcreg[22] ^ crcreg[28] ^ din[0] ^ din[3]; 
			crcreg[31] <= crcreg[23] ^ crcreg[29] ^ din[2];
		end
		CTP: begin
			crcreg[7:0]<=8'hff;
			crcreg[15:8]<=crcreg[7:0];
			crcreg[23:16]<=crcreg[15:8];
			crcreg[31:24]<=crcreg[23:16];
		end
		default: crcreg<=32'hffffffff;
		endcase
	end
end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -