移位寄存器使用

/*
边缘检测、滤波等相关模板的移位寄存器
假设在rom中文件夹下以wod中的数据存放,列加行的值作为该 数的地址
现在每次取出3列数据为一组,如第一列abc,第二例def,第三列ghi
使用shifter_register ip核来实现这种功能,可以利用这种方法实现流水线操作

*/

 

module left_right_register(
	input				clk,
	input				rst_n,
	output [7:0] shiftout0,
	output [7:0] shiftout1,
	output [7:0] shiftout2
);
wire shift_en;
wire  [7:0] cnt;
wire [7:0] in;
counter counter(
	.clk(clk),
	.rst_n(rst_n),
	.shift_en(shift_en),//输出使能信号
	.cnt(cnt)//给rom地址信号
);
my_rom  my_rom(
	.address(cnt),
	.clock(clk),
	.q(in)
	);
shift_register shift_register(
	.clk(clk),
	.rst_n(rst_n),
	.in(in),
	.	shift_en(shift_en),
	.shiftout0(shiftout0),
	.shiftout1(shiftout1),
	.shiftout2(shiftout2)
);
	
endmodule

 

module counter(
	input				clk,
	input				rst_n,
	output	reg		shift_en,
	output reg [7:0]cnt
	
);

always@(posedge clk or negedge rst_n)
	if(!rst_n)
		begin
			cnt<=0;
			shift_en<=0;
		end
	else begin
		if(cnt>=16)//表示移位寄存器中的两个fifo值已经移入
			begin
				cnt<=cnt+1;
				shift_en<=1;
			end
		else
				cnt<=cnt+1;
	end

endmodule

 

module shift_register(
	input				clk,
	input				rst_n,
	input			[7:0] in,
	output						shift_en,
	output [7:0] shiftout0,
	output [7:0] shiftout1,
	output [7:0] shiftout2
);

wire [15:0] taps;
assign shiftout0=shift_en?in:0;
assign shiftout1=shift_en?taps[7:0]:0;
assign shiftout2=shift_en?taps[15:8]:0;


my_shift  my_shift(
	.clock(clk),
	.shiftin(in),//rom提供的初始数据
	.shiftout(),
	.taps(taps)
	);

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值