Verilog设计技巧实例及实现

1 引言

最近在刷HDLBits的过程中学习了一些Verilog的设计技巧,在这里予以整理。部分操作可能降低代码的可读性和Debug的难度,请大家根据实际情况进行使用。

2 目录

2.1 casez

例:创建八位输入信号的优先编码器。给定一个8位向量,输出向量中第一个为1的位。如果输入向量没有高位,则报告0。例如,输入8'b10010000应该输出3'd4。

这里我们若用case语句来实现,共有256个case,可以用脚本生成,但在这里我们介绍一种基于casez的解决方案,可以将256个case降低为9个item。在casez中,值为z的位将被忽视比较。因此一些输入(例如4'b1111)将匹配多个case item,选择第一个匹配项。同时,也可以用?代表忽视比较的项,意义与z相同。代码如下:

module top_module (
input [7:0] in,
output reg [2:0] pos ); always@(*)begin
casez(in)
8'bzzzzzzz1:begin//z不予比较
pos = 3'd0;
end
8'bzzzzzz10:begin
pos = 3'd1;
end
8'bzzzzz100:begin
pos = 3'd2;
end
8'bzzzz1000:begin
pos = 3'd3;
end
8'bzzz10000:begin
pos = 3'd4;
end
8'bzz100000:begin
pos = 3'd5;
end
8'bz1000000:begin
pos = 3'd6;
end
8'b10000000:begin
pos = 3'd7;
end
default:begin
pos = 3'd0;
end
endcase
end
endmodule

图1 结果时序图

2.2 generate for实例化重复模块

例:已有名为bcd_fadd的一位BCD全加器模块,它将两个BCD数字a[3:0],b[3:0]加起来并产生和sum[3:0]及进位cout。现需实例化100个bcd_fadd以创建100位BCD全加器,实现将两个100位BCD数字a[99:0],b[99:0]以及进位信号cin相加,产生一个100位的和sum[99:0]及进位cout。

在这里我们可以分割为一个以cin为进位的全加器以及99个重复的以cout_inter为进位的全加器模块,因此可以用generatefor生成重复模块。代码如下:

module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum ); wire [99:0] cout_inter;//中间进位值cout generate
genvar i;
for(i = 0; i <= 99; i++)begin:adder//adder指的是自定义的模块名
if(i==0)begin
bcd_fadd u_bcd_fadd(
.a (a[3:0]),
.b (b[3:0]),
.cin (cin),
.cout (cout_inter[0]),
.sum (sum[3:0])
);
end
else begin
bcd_fadd ui_bcd_fadd(
.a (a[4*i+3:4*i]),
.b (b[4*i+3:4*i]),
.cin (cout_inter[i-1]),
.cout (cout_inter[i]),
.sum (sum[4*i+3:4*i])
);
end
end
endgenerate assign cout = cout_inter[99]; endmodule

2.3 &、|及^的使用

例:建立一个四输入(in[3:0])的组合电路,有3个输出:4位输入信号的与out_and、4位输入信号的或out_or及4位输入信号的异或out_xor

这里我们可以规约运算符简单实现,代码如下:

module top_module(
input [3:0] in,
output out_and,
output out_or,
output out_xor
);
assign out_and = &in;
assign out_or = |in;
assign out_xor = ^in;
endmodule

图2 结果时序图

3 结果显示

---

参考资料:HDLBits

Verilog设计技巧实例及实现的更多相关文章

  1. Java中组合 设计技巧 实例

    关于组合 和 集成 先放两篇文章:这两篇文章写的太好了. http://blog.csdn.net/u013905744/article/details/51752044    Java的组合(持有对 ...

  2. .NET框架设计(常被忽视的C#设计技巧)

    阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...

  3. .NET框架设计(常被忽视的框架设计技巧)

    阅读目录: 1.开篇介绍 2.元数据缓存池模式(在运行时构造元数据缓存池) 2.1.元数据设计模式(抽象出对数据的描述数据) 2.2.借助Dynamic来改变IOC.AOP动态绑定的问题 2.3.元数 ...

  4. objc@interface的设计哲学与设计技巧

    blog.sunnyxx.com 我是前言 学习objc时,尤其是先学过其他编程语言再来看objc时,总会对objc的类声明的关键字interface感到有点奇怪,在其它面向对象的语言中通常由clas ...

  5. .NET框架设计—常被忽视的框架设计技巧

    阅读目录: 1.开篇介绍 2.元数据缓存池模式(在运行时构造元数据缓存池) 2.1.元数据设计模式(抽象出对数据的描述数据) 2.2.借助Dynamic来改变IOC.AOP动态绑定的问题 2.3.元数 ...

  6. .NET框架设计—常被忽视的C#设计技巧

    .NET框架设计—常被忽视的C#设计技巧 阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你 ...

  7. 【转载】 .NET框架设计—常被忽视的C#设计技巧

    阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...

  8. 【前端阅读】——《活用PHP、MySQL建构Web世界》摘记之设计技巧

    二.设计技巧 Programming的习惯因人而异,这里只提供一些经验,可以参考. 1.利用Include模块化你的程序代码 Include函数基本上说:就像是把另一个文件(HTML或者PHP程序)读 ...

  9. Testbench代码设计技巧

    Testbench代码设计技巧 " There are many ways " to code a test case, it all depens on the creativi ...

随机推荐

  1. k8s标签label

    1.给节点设置标签 一遍pod部署选择 kubectl label node 节点名 disktype=ssd kubectl label node master1 disktype=ssd 效果 [ ...

  2. linux下部署Elasticsearch6.8.1版本的集群

    一.准备工作 安装包的下载:elasticsearch-6.8.1.tar.gz 集群服务器:A     B 一.单节点elasticsearch的安装部署 a.进入es的下载目录home:解压tar ...

  3. 一文让你快速入门pytest框架

    pytest是什么 官方文档描述: pytest is a framework that makes building simple and scalable tests easy. Tests ar ...

  4. 关于cgroup的几个核心名词及其关系

    子​​​系​​​统​​​(subsystem) 所谓子系统可以理解为操作系统里的各种资源(组件),如CPU,内存,磁盘,网卡(带宽) 层​​​级(Hierarchies) 所谓层级就是子系统的集合,又 ...

  5. linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql解决方案

    在Linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql,提示如下: 而导致连接错误的原因是MYSQL没有开启远程登录权限. 解决方案: 在mysql命令中执 ...

  6. P4884-多少个1?【BSGS】

    正题 题目链接:https://www.luogu.com.cn/problem/P4884 题目大意 求一个最小的\(n\)使得\(n\)个连续的\(1\)其在模\(m\)意义下等于\(k\). \ ...

  7. 题解 AVL 树

    link Description 给出一个 \(n\) 个点的 AVL 树,求保留 \(k\) 个点使得字典序最小. \(n\le 5\times 10^5\) Solution 因为我很 sb ,所 ...

  8. 题解 CF1119H Tripe题解

    题目传送门 题目大意 给出\(n,t,x,y,z\),值域\(\le 2^t\),给出\(n\)个三元组\((a_i,b_i,c_i)\),表示有\(x\)个\(a_i\),\(y\)个\(b_i\) ...

  9. Java(44)JDK新特性之函数式接口

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201667.html 博客主页:https://www.cnblogs.com/testero ...

  10. fastjson反序列化-JdbcRowSetImpl利用链

    fastjson反序列化-JdbcRowSetImpl利用链 JdbcRowSetImpl利用链 fastjson反序列化JdbcRowSetImpl - Afant1 - 博客园 (cnblogs. ...