sobel流水线操作Verilog程序
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程序的更多相关文章
- C#----操作应用程序配置文件App.config
对配置文件的一些疑问: 在应用程序的目录下,有两处值得注意的地方,一个是应用程序根目录下的App.config文件,和bin\debug\name.exe.config 或者 bin\Release\ ...
- 最大堆的插入/删除/调整/排序操作(图解+程序)(JAVA)
堆有最大堆和最小堆之分,最大堆就是每个节点的值都>=其左右孩子(如果有的话)值的完全二叉树.最小堆便是每个节点的值都<=其左右孩子值的完全二叉树. 设有n个元素的序列{k1,k2,..., ...
- IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架
每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换 ...
- python之商品操作小程序
要求:写一个添加商品的程序,商品信息写入txt文件中,以二维字典形式比如:{‘小米’:{‘价格’:‘1999元’,‘数量’:10}} 1.添加商品 #商品名称 #价格 #数量 2.查看商品 3.删除商 ...
- 超大数据量操作 java程序优化[转载]
一个表中有1000万以上的数据,要对其进行10万次以上的增删查改的操作,请问如何优化java程序对数据库的操作? 通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化. ...
- 流水线cpu —Verilog HDL
一.准备工作 先看看书(<计算机原理与设计 Verilog HDL版>),搞懂一点原理.然后照着书上的代码写一写(用8.4的就可以了,不用8.6的). 注意mux2x32,mux4,cla ...
- 阅读verilog程序总结
1.写程序先直接写出时钟信号 //-----------------产生串行时钟scl,为输入时钟的二分频--------- always@(negedge clk)//二分频表示频率小了,周期大了 ...
- C# 通过进程名/进程Id 操作窗口/程序
1. 判断窗口是否存在 private bool IsWindowExist(IntPtr handle) { ) != IntPtr.Zero) && IsWindowVisible ...
- 第一个Verilog程序:通用加法器
Verilog作为一门硬件描述语言,快速掌握它的方法就是不断的练习,反复动手实践,通过例子掌握隐藏在语句背后的硬件电路.下面是第一个需要学习的Verilog例子: )( :] a, :] b, inp ...
随机推荐
- The introduction to Web.config of ASP.NET #Reprinted#
花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...
- 斯坦福 IOS讲义 课件总结 一
1,引入文件, #import <Foundation/Foundation.h> IOS7 中可以这样写 @import Foundation; 2,在.h文件引入的是公用的,在.m文件 ...
- eclipse设置web项目发布到tomcat根目录下
如果已经将项目绑定到服务器了,那就先删除服务器. 重新添加项目进服务器,双击 修改下面Server Locations到tomcat目录下 顺带可以修改下右上角的超时设置 再点击下方 这样就可以了.
- IAR Embedded Workbench for ARM 6.50.6 & 6.60.1 破解补丁
IAR EWARM 6.50.6 & 6.60.1 破解 破解原理和方法见:http://blog.csdn.net/chivalrys/article/details/8564568 IAR ...
- Noip2009提高组总结
Noip2009的题目还是有一定难度的,主要是搜索和最短路都是我的弱项,不检查第一遍下来只做了150分,还是这句话,素质和读题的仔细程度决定了分数.仔细想想,我们化学老师说的话没错,或许题目你都会做, ...
- JavaScript推断E-mail地址是否合法
编写自己定义的JavaScript函数checkEmail(),在该函数中首先推断E-mail文本框是否为空,然后在应用正則表達式推断E-mail地址是否合法,假设不合法提示用户 <script ...
- mysql基本总结
创建数据库 creat table test( #整数通常使用int test_id int, #小数通常使用decimal test_price decimal, #普通文本通常使用,并使用Defa ...
- [LeetCode]题解(python):065-Valid Number
题目来源: https://leetcode.com/problems/valid-number/ 题意分析: 输入一个字符串,判断这个字符串表示的是不是一个有效的数字.比如: "0&quo ...
- 通过Qt样式表定制程序外观(比较通俗易懂)
1. 何为Qt样式表[喝小酒的网摘]http://blog.hehehehehe.cn/a/10270.htm2. 样式表语法基础3. 方箱模型4. 前景与背景5. 创建可缩放样式6. 控制大小7. ...
- android 获取本机号码需要root吗?
首先要明白,有的手机是获取不到自身的手机号的, 查了些资料,有以下两种方式可以获取到: 1. 通过对方给你发短信,打电话获取本机号码: 2. 还有一个就是通过APN来查询,但是这 ...