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.提高代码的可维护性 提高代码性能 提高 ...
随机推荐
- java web 开发之 office(excel、doc等)文件转pdf
一.开发工具:office 16.jacob-1.18-M2.jboss 1.6 二.开发配置: 1.解压缩---> 2.配置jacob: A C:\Windows\System32 jacob ...
- 【hdu1007】最近点对
http://acm.hdu.edu.cn/showproblem.php?pid=1007 分治法的经典应用,复杂度可以证明为nlognlogn #include <iostream> ...
- bootstrap基本页面
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- bcdedit 替代easybcd 编辑grub
bcdedit这个命令是win7下,继续安装xubuntu时遇到的.当时xubuntu的语言设置为en-us,时区改为HK,可是仍有很多不太适应的地方.于是,删了xubuntu,重装它.同时,grub ...
- 横向滚动div
<div id="shelf"> <div class="books"><div> <div class=" ...
- Django分页之应用案例
项目文件: models.py(建表) from django.db import models # Create your models here. class Book(models.Model) ...
- Web安全工程师(网易微专业Web安全学习笔记)
本篇笔记的配套视频:网易云课堂,微专业/web安全工程师. 一.WEB基础知识 1.1 Web简介 1.1.1 Web介绍 1)web的发展 web1.0:以内容为中心,网站提供内容信息,用户进行访问 ...
- JavaScript事件坐标区别(offset,client,page)
学习笔记. 1. offset:其定位原点是当前元素左上角 2. client:其定位原点是当前窗口左上角 3. page:其定位原点是当前页面左上角 下面来验证一下. 先上代码: <!doct ...
- 设置TextField的响应View和toolBar
inputView 设置用于展示的响应View 类似于键盘的展示方式 inputAccessoryView 用于设置响应View上面的ToolBar 使用方式: inputView设置为响应View ...
- 【Java】几种典型的内存溢出案例,都在这儿了!
写在前面 作为程序员,多多少少都会遇到一些内存溢出的场景,如果你还没遇到,说明你工作的年限可能比较短,或者你根本就是个假程序员!哈哈,开个玩笑.今天,我们就以Java代码的方式来列举几个典型的内存溢出 ...