verilog语法基础-移位寄存器

概述:

移位寄存器在数字电路设计中广泛被使用,列如SPI通讯中的串行输入并行输出,并行输出串行输出,FIR滤波器中作为数据的延迟链,边沿检测中的数据延迟链等等。本节针对移位寄存器的基本应用场景给出基本的模版,并观测FPGA综合后的结构图。

内容:

  1. 一位分立移位寄存器

  2. 串行输入,并行输出延迟链

  3. 循环移位寄存器

  4. 并行输入串行输出延迟链

  5. 总线并行延迟链

1. 一位分立移位寄存器

代码

复制代码
module regtest(
	input clk , // system clock 50Mhz on board
	input rst_n, // system rst, low active 
	input a , 
	output[3:0] y1  // output signal
    );
reg a_dly1 ;
reg a_dly2 ;
reg a_dly3 ;
assign y1={a_dly3,a_dly2,a_dly1,a}; //穿行输入,并行输出
always @ (posedge clk or negedge rst_n ) begin
	if (rst_n == 1'b0) begin 
		a_dly1 <= 1'b0 ;
		a_dly2 <= 1'b0 ;
		a_dly3 <= 1'b0 ;
	end else begin 
		a_dly1 <= a ;
		a_dly2 <= a_dly1 ;
		a_dly3 <= a_dly2 ;
	end
end

endmodule

RTL结构图,移位寄存器的结构通过FDC触发器串联构成。

技术原理图

2. 串行输入并行输出

代码

复制代码
module regtest(
	input clk , // system clock 50Mhz on board
	input rst_n, // system rst, low active 
	input a , 

	output[3:0] y1  // output signal

 
    );
reg[3:0] abus ;
assign y1=abus; 
always @ (posedge clk or negedge rst_n ) begin
	if (rst_n == 1'b0) begin 
		abus <= 1'b0 ;
	end else begin 
		abus <= {abus[2:0],a} ;
	end
end

endmodule

RTL结构图

技术原理图,总线结构移位寄存器更加简洁,但是实现的电路结构是一样的。

3. 循环移位寄存器

代码

复制代码
module regtest(
	input clk , // system clock 50Mhz on board
	input rst_n, // system rst, low active 
	input[3:0] a , 

	output[3:0] y1  // output signal

    );
reg[3:0] abus ;
assign y1=abus; 
always @ (posedge clk or negedge rst_n ) begin
	if (rst_n == 1'b0) begin 
		abus <= 1 ;
	end else begin 
		abus <= {abus[2:0],abus[3]} ;
	end
end

endmodule

RTL结构图

技术原理图

4. 并行输入,串行输出

代码

复制代码
module regtest(
	input clk , // system clock 50Mhz on board
	input rst_n, // system rst, low active 
	input[3:0] a , 
	input load_signal,
	input clock_enable,
	output reg y1  // output signal

    );
reg[3:0] abus ;

always @ (posedge clk or negedge rst_n ) begin
	if (rst_n == 1'b0) begin 
		abus <= 4'b0 ;
	end else if (load_signal) begin 
		abus <= a ;
	end else if (clock_enable) begin 
		abus <= {1'b0,abus[3:1]};
		y1 <=abus[0];
	end
end

endmodule

RTL结构图

技术原理图

5. 总线并行延迟链

代码

复制代码
module regtest(
	input clk , // system clock 50Mhz on board
	input rst_n, // system rst, low active 
	input[3:0] a , 
	input load_signal,
	input clock_enable,
	output [3:0] y1  // output signal

    );
reg[3:0] abus [5:0];
integer i;
assign y1 = abus[5];
always @ (posedge clk or negedge rst_n ) begin
	if (rst_n == 1'b0) begin 
		for (i=0;i<6;i = i+1)begin 
			abus[i] <= 4'b0;
		end
	end else  begin 
		for (i=1;i<6;i = i+1)begin 
			abus[i] <= abus[i-1];
		end
		abus[0] <= a;
	end
end

endmodule

RTL结构图

技术原理图,总线延迟链中使用了SRL16移位寄存器来实现数据延迟,这是LUT内部的移位寄存器,他可以节省flip_flop的使用。

  1. 总结

  2. 移位寄存器广泛用于通讯的输入输出端口输出,FIR滤波的延迟,以及随机数生成等场景

  3. FPGA内部使用flip_flop触发器来实现移位寄存器

  4. 对于大量的移位操作,FPGA可以使用LUT4的SRL16移位寄存器来实现。

相关推荐
XINVRY-FPGA1 天前
XC95288XL-10TQG144I Xilinx AMD CPLD
arm开发·单片机·嵌入式硬件·mcu·fpga开发·硬件工程·fpga
i道i1 天前
Verilog 利用伪随机,时序,按键消抖等,实现一个(打地鼠)游戏
游戏·fpga开发·verilog
奋斗的牛马1 天前
OFDM理解
网络·数据库·单片机·嵌入式硬件·fpga开发·信息与通信
ThreeYear_s1 天前
【FPGA+DSP系列】——PWM电平光耦转换电路实验分析----电路原理分析,器件选型
单片机·嵌入式硬件·fpga开发
FPGA_小田老师2 天前
FPGA语法基础(一):Verilog 数组清零方法详解
fpga开发·verilog语法·数组清零·verilog数组清零
奋斗的牛马2 天前
FPGA--zynq学习 PS与PL交互(二) HP接口
单片机·嵌入式硬件·学习·fpga开发·信息与通信
ThreeYear_s2 天前
【FPGA+DSP系列】——CCS联合proteus仿真DSP工程,以TMS320f28027芯片为例,LED闪烁仿真。
单片机·fpga开发·proteus
LCMICRO-133108477462 天前
长芯微LPS5820完全P2P替代NCP51820,LPS5820 是一款高速半桥驱动器,可用来驱动半 桥功率拓扑的 GaN 功率管。
stm32·单片机·嵌入式硬件·fpga开发·硬件工程
云雾J视界3 天前
预测电流控制在光伏逆变器中的低延迟实现:华为FPGA加速方案与并网稳定性验证
华为·fpga开发·dsp·光伏逆变器·mpcc
国科安芯3 天前
核电厂执行器控制系统中的抗辐照MCU选型:为什么需要150krad(Si) TID指标?
服务器·单片机·嵌入式硬件·fpga开发·架构