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

📄 shift_reg.v

📁 基于QUARTUSII软件 实现FPGA(ATERA CYCLONE II系列)与SD卡SD模式通信源码
💻 V
字号:
/**************************************************

 函数名:shift_reg
 功  能:实现数据的并行输入串行输出
 参数说明:clk 时钟
           busy 忙信号,1时忙不能写入数值
                        0时可以写入新的数值
           data_in 输入的数据
           data_out 输出的数据
           en       使能信号,1时有效

***************************************************/

module shift_reg(clk,data_in,data_out,en,cmd_1_en,cmd_1_end);

parameter len=48;

input clk,en,cmd_1_en,cmd_1_end;
input [len-1:0]data_in;
output data_out;

integer i,j;
reg  [len-1:0]temp;
reg  busy=0,data_out;


always @(posedge clk)
	begin
	if(cmd_1_en==1'b1 && cmd_1_end==1'b0)
		data_out<=1'b1;
	else if(cmd_1_en==1'b1 && cmd_1_end==1'b1)
		begin
		if(en==1'b1)
			begin
			if(busy==0)                  //如果busy为0并且en为1写入新的数据 
				begin
				busy<=1'b1;
				temp<=data_in;
				end
			else
				begin                   //由于在一个时钟周期内不能对同一个变量进行两次
				j<=j+1;                 //赋值,所以j会多计算出一个时钟
				data_out<=temp[len-1];
				for(i=0;i<len-1;i=i+1)
					temp[len-1-i]<=temp[len-2-i];
			
				temp[0]<=1'b1;
				if (j==48)              //j只计算48个时钟
					begin
					busy<=1'b0;
					j<=0;
					end
				end
			end
		else
			begin
			j<=0;
			busy<=1'b0;
			temp<=48'H000000000000;      
			end
		end
	end

endmodule

⌨️ 快捷键说明

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