Verilog - ABS代码重构
https://mp.weixin.qq.com/s/-KUviTzO3Hdir_mI57L24g
module ABS
#(
parameter DATA_WIDTH =
)
(
input [DATA_WIDTH-:] din,
output reg [DATA_WIDTH-:] dout
); always @(*) begin
if (din[DATA_WIDTH-] == 'b1) begin // negative data
if (din[DATA_WIDTH-:] == {(DATA_WIDTH-){'b0}}) begin // Max
dout = {'b0,{(DATA_WIDTH-1){1'b1}}};
end
else begin
dout = {'b0,((~din[DATA_WIDTH-2:0])+1'b1)};
end
end
else begin
dout = din;
end
end endmodule
module ABS
#(
parameter DATA_WIDTH =
)
(
input [DATA_WIDTH-:] din,
output reg [DATA_WIDTH-:] dout
); localparam W = DATA_WIDTH;
localparam MSB = DATA_WIDTH - ; always @(*) begin
if (din[MSB] == 'b1) begin // negative data
if (din[W-:] == { (W-){'b0} }) begin // Max
dout = {'b0,{(W-1){1'b1}}};
end
else begin
dout = {'b0,((~din[W-2:0])+1'b1)};
end
end
else begin
dout = din;
end
end endmodule
module ABS
#(
parameter DATA_WIDTH =
)
(
input [DATA_WIDTH-:] din,
output reg [DATA_WIDTH-:] dout
); localparam W = DATA_WIDTH;
localparam MSB = DATA_WIDTH - ; wire din_sign = din[MSB];
wire [W-:] din_data = din[W-:];
wire [W-:] pad0 = { (W-){'b0} };
wire [W-:] pad1 = { (W-){'b1} }; always @(*) begin
if (din_sign == 'b1) begin // negative data
if (din_data == pad0) begin // Max
dout = {'b0, pad1};
end
else begin
dout = {'b0,((~din_data)+1'b1)};
end
end
else begin
dout = din;
end
end endmodule
module ABS
#(
parameter DATA_WIDTH =
)
(
input [DATA_WIDTH-:] din,
output reg [DATA_WIDTH-:] dout
); localparam W = DATA_WIDTH;
localparam MSB = DATA_WIDTH - ; wire din_sign = din[MSB];
wire [W-:] din_data = din[W-:];
wire [W-:] pad1 = { (W-){'b1} }; always @(*) begin
if (din_sign == 'b1) begin // negative data
if (din_data == ) begin // Max
dout = {'b0, pad1};
end
else begin
dout = {'b0,((~din_data)+1'b1)};
end
end
else begin
dout = din;
end
end endmodule
module ABS
#(
parameter DATA_WIDTH =
)
(
input [DATA_WIDTH-:] din,
output reg [DATA_WIDTH-:] dout
); localparam W = DATA_WIDTH;
localparam MSB = DATA_WIDTH - ; wire din_sign = din[MSB];
wire [W-:] din_data = din[W-:];
wire [W-:] pad1 = { (W-){'b1} }; always @(*) begin
if (din_sign == 'b1) begin // negative data
if (din_data == ) begin // Max
dout = ~din;
end
else begin
dout = {'b0,((~din_data)+1'b1)};
end
end
else begin
dout = din;
end
end endmodule
module ABS
#(
parameter DATA_WIDTH =
)
(
input [DATA_WIDTH-:] din,
output reg [DATA_WIDTH-:] dout
); localparam W = DATA_WIDTH;
localparam MSB = DATA_WIDTH - ; wire din_sign = din[MSB];
wire [W-:] din_data = din[W-:]; always @(*) begin
if (din_sign == 'b1) begin // negative data
if (din_data == ) begin // Max
dout = ~din;
end
else begin
dout = ~din + ;
end
end
else begin
dout = din;
end
end endmodule
module ABS
#(
parameter DATA_WIDTH =
)
(
input [DATA_WIDTH-:] din,
output reg [DATA_WIDTH-:] dout
); localparam W = DATA_WIDTH; wire din_sign = din[W-];
wire [W-:] din_data = din[W-:]; always @(*) begin
if (din_sign == 'b1) begin // negative data
if (din_data == ) begin // Max
dout = ~din;
end
else begin
dout = ~din + ;
end
end
else begin
dout = din;
end
end endmodule
Verilog - ABS代码重构的更多相关文章
- Android Studio在代码重构中的妙用
代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...
- 让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较
重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提 ...
- C++代码重构——从C global到C++ template
在学数据结构的时候,我常有这样目标--写出能够最大程度复用的代码(算法正确,封装优秀).我常想--如何能在短时间内达成"算法正确,封装优秀"这样的目标.经过一段时间的摸索,我的结论 ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十二) 代码重构使用反射工厂解耦(一)缓存切换
前言 上一篇中,我们用了反射工厂来解除BLL和UI层耦合的问题.当然那是最简单的解决方法,再复杂一点的程序可能思路相同,但是在编程细节中需要考虑的就更多了,比如今天我在重构过程中遇到的问题.也是接下来 ...
- CSS代码重构与优化之路
作者:@狼狼的蓝胖子 网址:http://www.cnblogs.com/lrzw32/p/5100745.html 写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多, ...
- NET代码重构
记一次.NET代码重构 好久没写代码了,终于好不容易接到了开发任务,一看时间还挺充足的,我就慢慢整吧,若是遇上赶进度,基本上直接是功能优先,完全不考虑设计.你可以认为我完全没有追求,当身后有鞭子使 ...
- 代码重构 & 常用设计模式
代码重构 重构目的 相同的代码最好只出现一次 主次方法 主方法 只包含实现完整逻辑的子方法 思维清楚,便于阅读 次方法 实现具体逻辑功能 测试通过后,后续几乎不用维护 重构的步骤 1 新建一个方法 ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十一) 代码重构使用反射工厂解耦
前言 自从此博客发表以及代码开源以来,得到了许多人的关注.也没许多吧,反正在我意料之外的.包括几位大牛帮我做订阅号推广,真的很感谢他们.另外,还有几个高手给我提了一些架构上的问题.其实本身这个项目是没 ...
- CSS代码重构
CSS代码重构的目的 我们写CSS代码时,不仅仅只是完成页面设计的效果,还应该让CSS代码易于管理,维护.我们对CSS代码重构主要有两个目的:1.提高代码性能2.提高代码的可维护性 提高代码性能 提高 ...
随机推荐
- Educational Codeforces Round 77 (Rated for Div. 2) C. Infinite Fence
C. Infinite Fence 题目大意:给板子涂色,首先板子是顺序的,然后可以涂两种颜色,如果是r的倍数涂成红色,是b的倍数涂成蓝色, 连续的k个相同的颜色则不能完成任务,能完成任务则输出OBE ...
- springboot设置过滤器、监听器、拦截器
其实这篇文章算不上是springboot的东西,我们在spring普通项目中也是可以直接使用的 设置过滤器: 以前在普通项目中我们要在web.xml中进行filter的配置,但是只从servlet 3 ...
- JSP+Servlet+JDBC+C3P0实现的人力资源管理系统
项目简介 项目来源于:https://github.com/ruou/hr 本系统基于JSP+Servlet+C3P0+Mysql.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级: ...
- 我的第一个UWP程序
1.为什么喜欢UWP 本人无悔入网易云音乐,各种设备上都少不了这个红色图标的软件 从win10发布,网易做了UWP版本的云音乐 应用轻巧.简洁.功能全,接着又下了许多UWP的应用 都给人不一样的感觉, ...
- 初探Redis-基础类型Hash
Redis存在五种基础类型:字符串(String).队列(List).哈希(Hash).集合(Set).有序集合(Sorted Set).本次列举出Hash的常用操作. Redis官网:https:/ ...
- Web的Cookies,Session,Application
Cookies:客户端(浏览器)存储信息的地方 Session:服务器的内置对象,可以在这里存储信息.按用户区分,每个客户端有一个特定的SessionID.存储时间按分钟计. Application: ...
- python实现三级菜单源代码
8月4号早晨天气晴,继续学习‘Alex’的python视频,写了用字典实现三级菜单的代码,都是循环和判断比较lower,废话不多说直接贴码: #!/user/bin/env python #-*-co ...
- 实战!我用 Wireshark 让你“看得见“ TCP
每日一句英语学习,每天进步一点点: 前言 为了让大家更容易「看得见」 TCP,我搭建不少测试环境,并且数据包抓很多次,花费了不少时间,才抓到比较容易分析的数据包. 接下来丢包.乱序.超时重传.快速重传 ...
- 使用gitHub和git进行团队合作开发
1.创建仓库(项目)-----组织者(Leader)和团队成员 1)Leader在gitHub上创建一个新组织(New organization),然后邀请成员加入 2)Leader在该组织下创建一个 ...
- 10 分离式web框架
10 分离式web框架 wsgiref模块: 将http请求封装成以键值对的形式封装成字典environ: "PATH_INFO"对应的值为请求文件路径, “QUERY_STRIN ...