sobel算子的verilog实现,采用了流水线操作

 module sobel_computer (
clock ,
reset,
OrigDataEn,
//SobelAluEn,
OrigData,
SobelData
);
input clock ,reset;
input OrigDataEn ;
//input SobelAluEn ;
input [:] OrigData ;
output reg [:] SobelData ; reg [:] prev_row, curr_row, next_row ;
reg [:] data_state ;
reg [:]abs_D ;
//*****************OrigDataEn 维持三个周期,将数据保存到三个reg 中****************
always @ (posedge clock or negedge reset )
if(!reset)
begin
data_state <= 'b00 ;
prev_row <= 'd0 ;
curr_row <= 'd0 ;
next_row <= 'd0 ;
end
else if(OrigDataEn)
begin
case (data_state)
'b00 :
begin
prev_row <= OrigData ;
data_state <= 'b01 ;
end
'b01 :
begin
curr_row <= OrigData ;
data_state <= 'b10 ;
end
'b10 :
begin
next_row <= OrigData ;
//data_state <= 2'b01 ;
end
endcase
end
else
begin
data_state <= 'b00 ;
prev_row <= prev_row << ;
curr_row <= curr_row << ;
next_row <= next_row << ;
end
//----------------------------------------------------------------
//function : 函数名= 内部reg,并返回。不包含 # @ wait,至少一个输入参数
function [:] abs (input signed[:] data);
abs = data[]? (~data[:]+): data[:];
endfunction reg signed [:] Dx,Dy ; //8'b1111_1111 * 6 = 11'd1530 所以采用11bit的Dx 和Dy
reg [:]Orig [-:][-:]; /*
分段方式:[63:56] [55:48] [47:40] [39:32] [31:24] [23:16] [15:8] [7:0]
sobel Dx -1 0 +1
-2 0 +2
-1 0 +1 Dy +1 +2 +1
0 0 0
-1 -2 -1
*/
//**************************************************************
always @ (posedge clock or negedge reset)
if(!reset)
begin
abs_D <= 'd0 ;
Dx <= 'd0 ;
Dy <= 'd0 ;
SobelData <= 'd0 ;
end
else if(!OrigDataEn) //if(SobelAluEn )
begin
Dx <= $signed (~{'b000,Orig[-1][-1]}+1) // * -1
+ $signed(~({'b00,Orig[0][-1]}<<1)+1) // * -2
+ $signed(~{'b000,Orig[1][-1]}+1) // * -1 + $signed({'b000,Orig[-1][1]}) // * 1
+ $signed({'b00,Orig[0][1]}<<1) // * 2
+ $signed ({'b000,Orig[1][1]}) ; // * 1 Dy <= $signed ({'b000,Orig[-1][-1]}) // * 1
+ $signed ({'b00,Orig[-1][0]}<<1) // * 2
+ $signed({'b000,Orig[-1][1]}) // * 1 + $signed(~{'b000,Orig[1][-1]}+1) // * -1
+ $signed(~({'b00,Orig[1][0]}<<1)+1) // * -2
+ $signed(~{'b000,Orig[1][1]}+1) ; // * -1 abs_D <= (abs(Dx) + abs(Dy))>> ;
SobelData <= {SobelData[:],abs_D}; Orig[-][-] <= Orig[-][]; Orig[-][] <= Orig[-][]; Orig[-][] <= prev_row[:];
Orig[][-] <= Orig[][]; Orig[][] <= Orig[][]; Orig[][] <= curr_row[:];
Orig[][-] <= Orig[][]; Orig[][] <= Orig[][]; Orig[][] <= next_row[:];
end endmodule

sobel流水线操作Verilog程序的更多相关文章

  1. C#----操作应用程序配置文件App.config

    对配置文件的一些疑问: 在应用程序的目录下,有两处值得注意的地方,一个是应用程序根目录下的App.config文件,和bin\debug\name.exe.config 或者 bin\Release\ ...

  2. 最大堆的插入/删除/调整/排序操作(图解+程序)(JAVA)

    堆有最大堆和最小堆之分,最大堆就是每个节点的值都>=其左右孩子(如果有的话)值的完全二叉树.最小堆便是每个节点的值都<=其左右孩子值的完全二叉树. 设有n个元素的序列{k1,k2,..., ...

  3. IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架

    每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换 ...

  4. python之商品操作小程序

    要求:写一个添加商品的程序,商品信息写入txt文件中,以二维字典形式比如:{‘小米’:{‘价格’:‘1999元’,‘数量’:10}} 1.添加商品 #商品名称 #价格 #数量 2.查看商品 3.删除商 ...

  5. 超大数据量操作 java程序优化[转载]

        一个表中有1000万以上的数据,要对其进行10万次以上的增删查改的操作,请问如何优化java程序对数据库的操作? 通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化. ...

  6. 流水线cpu —Verilog HDL

    一.准备工作 先看看书(<计算机原理与设计 Verilog HDL版>),搞懂一点原理.然后照着书上的代码写一写(用8.4的就可以了,不用8.6的). 注意mux2x32,mux4,cla ...

  7. 阅读verilog程序总结

    1.写程序先直接写出时钟信号 //-----------------产生串行时钟scl,为输入时钟的二分频--------- always@(negedge clk)//二分频表示频率小了,周期大了 ...

  8. C# 通过进程名/进程Id 操作窗口/程序

    1. 判断窗口是否存在 private bool IsWindowExist(IntPtr handle) { ) != IntPtr.Zero) && IsWindowVisible ...

  9. 第一个Verilog程序:通用加法器

    Verilog作为一门硬件描述语言,快速掌握它的方法就是不断的练习,反复动手实践,通过例子掌握隐藏在语句背后的硬件电路.下面是第一个需要学习的Verilog例子: )( :] a, :] b, inp ...

随机推荐

  1. 10min系列之二日志可视化进阶

    10min系列之二日志可视化进阶(作者原创,同步发布在github) 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 本文所有的demo,都是浏览器下展示的 原创 ...

  2. GC算法之串行并行并发

    串行收集器: 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高.但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器.当然,此收集器也可以用在小数据量(100M左右)情况下的多 ...

  3. Android开发中怎样调用系统Email发送邮件(多种调用方式)

    在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...

  4. Foundation Sorting: Single List Insertion Sort

    /* List Insertion Sorting. * Implementation history:. * 2013-09-15, Mars Fu, first version. */ #incl ...

  5. cocos2d-x 源代码 :可以循环CCScrollView (,代码已被重构连接使用)

    cocos2d-x来源合计文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.准备工作 想弄懂可循环的CCscrollView ...

  6. wpf全局异常

    在App.xaml文件中 添加DispatcherUnhandledExceptionEventArgs 新增对应事件

  7. tomcat配置没啥难的啊

    总体上就是: 1.下载jdk并安装. 2.下载tomcat 3.分别设置好环境变量. 4.cmd java -version 如果成功,证明java jdk配置OK startup.bat 如果成功 ...

  8. C/C++ 笔试、面试题目大汇总(转)

    这些东西有点烦,有点无聊.如果要去C++面试就看看吧.几年前网上搜索的.刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善. 转自fangyukuan,地址http://www.cnbl ...

  9. java.util.concurrent BlockingQueue

    BlockingQueue 它实现了Queue接口.它是A BlockingQueue with one thread putting into it, and another thread taki ...

  10. 在word中批量制作条形码

    条码打印软件可以批量生成条形码然后直接打印,但是有些客户不需要直接打印,而是想将生成的条形码在word中进行排版,发给自己的客户或者下属部门来打印.那么如何实现在word中批量制作条形码呢? 操作很简 ...