/*
边缘检测、滤波等相关模板的移位寄存器
假设在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)
- );