zoukankan      html  css  js  c++  java
  • xilinx fpga 生成3*3窗口

           在写滤波程序的时候在网上看了好几篇大佬的笔记,都有提到使用3*3窗口,由于小白一个,看到复杂的理论就惧怕的不行。但是现在不得不上,自己调用移位寄存器ip核然后做了个3*3窗口出来,自己动手作出来忽然感觉到也不难嘛。

           先贴一张ip核模块的接口参数图

    生成3*3窗口需要两个寄存器,参数设置为数据宽度8,深度一个为4,另一个为3,选sclr端口

    然后把两个移位寄存器串联起来就可以了

    仿真的时候写好激励就行

    放上最后仿真图

    两条线那会是不是3*3矩阵呀,然后往右推就行。

    顶层模块

     1 module shift3by3(
     2 clk,
     3 rst_n,
     4 datain,
     5 dataout
     6 );
     7 input clk;
     8 input rst_n;
     9 input [7:0] datain;
    10 output [7:0] dataout;
    11 
    12 wire [7:0] d_in;
    13 wire sclr;
    14 
    15 
    16 shiftip shift2(
    17         .clk(clk), 
    18         .sclr(~rst_n),
    19         .d(datain), 
    20         .q(d_in)
    21 );
    22 
    23 shift3 shift3(
    24     .clk(clk),
    25     .sclr(~rst_n), 
    26         .d(d_in), 
    27         .q(dataout)
    28 );
    29 
    30 endmodule
    View Code

    tesrbench

     1 module shiftiptb;
     2 
     3     // Inputs
     4     reg clk;
     5     reg [7:0] d;
     6 
     7     // Outputs
     8     wire [7:0] q;
     9 
    10     // Instantiate the Unit Under Test (UUT)
    11     shiftip uut (
    12         .clk(clk), 
    13         .d(d), 
    14         .q(q)
    15     );
    16 initial clk=1;
    17 always #10 clk=!clk;
    18     initial begin
    19         // Initialize Inputs
    20         #20 d=11;
    21         #20 d=22;
    22         #20 d=33;
    23         #20 d=44;
    24         #20 d=55;
    25         #20 d=66;
    26         #20 d=77;
    27         #20 d=88;
    28         #20 d=99;
    29         
    30         
    31 
    32         // Wait 100 ns for global reset to finish
    33         #100;
    34         
    35         // Add stimulus here
    36 
    37     end
    38       
    39 endmodule
    View Code

     之前没有将矩阵里的9个元素列出来,现在将9个元素列出来,

    赋值代码如下:

     1 always @(posedge clk or negedge rst_n)
     2     if(!rst_n)
     3       begin
     4         {a11,a12,a13} <= {8'b0,8'b0,8'b0};
     5         {a21,a22,a23} <= {8'b0,8'b0,8'b0};
     6         {a31,a32,a33} <= {8'b0,8'b0,8'b0};
     7         row <= 8'b0;
     8       end
     9     else
    10       begin
    11           row <= row3;//row3就是datain,这里延迟一个时钟
    12         {a11,a12,a13} <= {a12,a13,row};
    13         {a21,a22,a23} <= {a22,a23,row2};//row2是d_in
    14         {a31,a32,a33} <= {a32,a33,row1};//row1是dataout
    15       end
    View Code

    仿真图像如下图所示:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    页面状态加载.... JS
    创建windows服务&监控SQL数据运行状态(原)
    为图片添加锚点
    当jquery遇上了json 哇哈哈
    关于SVN源代码管理
    最新最全的ASP.NET学习资源大全
    .NET开发人员必知的八个网站
    关于回车执行(回车触发事件)
    DIV+CSS布局
    优化Linux下的内核TCP参数来提高服务器负载能力
  • 原文地址:https://www.cnblogs.com/danielwc/p/9053126.html
Copyright © 2011-2022 走看看