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

📄 crc7.v

📁 crc7 calculation for SDIO mode
💻 V
字号:
module crc7 (
		clk,
		reset_n,
		reset_s,
		go,
		done,
		byte_in,
		crc_in,
		crc_out
	);
	
input clk;
input reset_n;	
input reset_s;
input go;
output done;

input [7:0]		byte_in;
input [7:0]		crc_in;
output [7:0]	crc_out;

parameter 
	ST_IDLE		= 8'h00,
	ST_INIT		= 8'h01,
	ST_LP_E0		= 8'h02,
	ST_LP_E1		= 8'h03,
	ST_FINZ		= 8'h04,
	ST_DONE		= 8'h05;
	
reg [7:0] state, next;

always @(posedge clk or negedge rst_n)
	if (!reset_n || reset_s) state <= ST_IDLE;
	else state <= next;
	
always @(state or go or i)
	begin
	next = 'bx;
	case (state)
		ST_IDLE	:	if (go) 	next = ST_INIT;
							else  next = ST_IDLE;
							
		ST_INIT	:				next = ST_LP_E0;
		ST_LP_E0	:				next = ST_LP_E1;
		ST_LP_E1	:	if (i<8'h08)
									next = ST_LP_E0;
						else		next = ST_DONE;
						
		ST_DONE  : 	if (!go) next = ST_IDLE;	
							else  next = ST_DONE;
	endcase
	end

always @(posedge clk or negedge rst_n)
	if (!reset_n || reset_s)
	begin
		done_r <= 1'b1;
	end	else 
	case (next)
		ST_INIT	:	begin	
						crc <= crc_in;
						done_r <= 1'b0;
						b <= byte_in;
						i <= 8'h00;
						end;
		ST_LP_E0	:	crc <= (crc << 1);
		ST_LP_E1	:	begin
						i <= i + 8'h01;
						if((crc ^ b) & 8'h80)
							crc <= (crc ^ 8'h09);
						b <= (b << 1);
						end;
		ST_DONE  :	done_r <= 1'b1;
	endcase

assign crc_out  = (crc & 8'h7f);
assign done = done_r && !go;

endmodule

⌨️ 快捷键说明

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