shift_reg.v
来自「基于QUARTUSII软件 实现FPGA(ATERA CYCLONE II系列)」· Verilog 代码 · 共 64 行
V
64 行
/**************************************************
函数名: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 + =
减小字号Ctrl + -
显示快捷键?