📄 shift_reg.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 + -