verilog语法实例学习(5)
子电路模块
子电路模块的使用
一个verilog模块能够作为一个子电路包含在另一个模块中。采用这种方式,所有的模块都必须定义在一个文件中,那么verilog编译器就必须被告知每个模块的所属。模块例化的通用形式和门例化语句类似。
modulename [#(parameter overrides)] instance_name(
port_name([expression]) {,port_name([expression])});
instance_name可以是任何合法的verilog标识符,端口连接指定了模块之间的连接方式。在一个设计中,相同的模块可以多次例化,但每个例化名字必须是唯一的。[#(parameter overrides)] 是用来传入子模块内部参数值的,这个在前面讲过。port_name对应子模块的一个端口名,每个expression指定了端口的连接。port_name可以使例化语句列表中的信号顺序不必与子电路模块中的端口顺序一致,在verilog中,这叫做名称端口连接。如果端口排序与子电路相同,那个.port_name就可以省略,这种连接就叫顺序端口连接。
module fulladd(cin, x, y, s, cout);
input cin;//carry in bit
input x;
input y; output s;
output cout;//carryout bit assign s = x^y^cin;
assign cout = (x&y)|(x&cin)|(y&cin); endmodule
/*
通过实例化全加器模块实现四位加法的功能。
输入:cin,进位
x, y 被加数和加数
s 和
cout 进位
*/
module adder4(cin, x, y,s,cout); input cin;
input [3:0] x;
input [3:0] y; output [3:0] s;
output cout;
wire [3:1] c; //内部线网类型信号c,用来存储串行进位 fulladd stage0(.cin(cin),.x(x[0]),.y(y[0]),.s(s[0]),.cout(c[1]));
fulladd stage1(.cin(c[1]),.x(x[1]),.y(y[1]),.s(s[1]),.cout(c[2]));
fulladd stage2(.cin(c[2]),.x(x[2]),.y(y[2]),.s(s[2]),.cout(c[3]));
fulladd stage3(.cin(c[3]),.x(x[3]),.y(y[3]),.s(s[3]),.cout(cout)); endmodule
在上面四位加法器的模块中,我们例化了一位全加器模块四次,每次例化都有不同的例化名字。
子电路的参数
当子电路包含参数时候,参数的默认值可以在例化语句中修改。具体参照下面链接中:verilog中的参数
https://www.cnblogs.com/mikewolf2002/p/10183150.html
生成块
如果要在循环语句中例化模块,则需要使用generate 结构,它的语法如下:
generate
[for loops]
[if-else statements]
[case statements]
[instantiate statements]
endgenerate
这种结构提高了verilog模块的灵活度,因为它允许例化语句包含在for循环和if-else语句内部。如果某一个for循环包含在generate块内,则循环变量必须声明为genvar类型。genvar类似于integer,但是它只能使正数,且只能用在generate块内。
下面的代码中,我们在generate块中用for循环例化了32个全加器子模块。每个for循环中产生的实例名都是一个唯一的由编译器产生的例化名:addbits[0].stage,…,addbits[n-1].stage。
generate块中可hi包括并行语句和过程语句,但是它的主要优点在于for循环内与if-else语句内的门例化和模块例化。
module addern_2(x, y, s, cout);
parameter n=32;
input [n-1:0] x;
input [n-1:0] y;
output [n-1:0] s;
output cout; wire [n:0] c;
genvar k;
assign c[0]=0;
assign cout=c[n]; generate
for(k = 0; k <= n-1; k = k + 1) begin:addbit
fulladd stage(c[k],x[k],y[k],s[k],c[k+1]);
end
endgenerate endmodule
verilog语法实例学习(5)的更多相关文章
- verilog语法实例学习(4)
Verilog模块 Verilog中代码描述的电路叫模块,模块具有以下的结构: module module_name[ (portname {, portname})]; //端口列表 [parame ...
- verilog语法实例学习(1)
本文档中通过verilog实例来学习verilog语法.Verilog是一种硬件描述语言,它具有并发性和时序性.并发性是指不同硬件模块的同时操作,时序性是指信号的赋值或操作在时钟的边沿进行.由于作者本 ...
- verilog语法实例学习(12)
verilog中的综合和不可综合总结 Verilog中综合的概念 综合就是EDA工具或者说综合工具把我们编写的verilog代码转化成具体电路的过程.Verilog中有很多语法,结构,过程,语句,有些 ...
- verilog语法实例学习(6)
函数和任务 函数 https://wenku.baidu.com/view/d31d1ba8dd3383c4bb4cd283.html verilog中函数的目的是允许代码写成模块的方式而不是定义独立 ...
- verilog语法实例学习(2)
Verilog中的信号类型 线网类型 线网类型表示一个或多个门或者其它类型的信号源驱动的硬件连线.如果没有驱动源,则线网的默认值为z.verilog中定义的线网类型有以下几种: wire,tr ...
- verilog语法实例学习(13)
verilog代码编写指南 变量及信号命名规范 1. 系统级信号的命名. 系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号:系统信号以字符串Sys开头. 2. 低电平有效的 ...
- verilog语法实例学习(11)
同步时序电路的一般形式 时序电路由组合逻辑以及一个或多个触发器实现.一般的架构如下图所示:W为输入,Z为输出,触发器中存储的状态为Q.在时钟信号的控制下,触发器通过加在其输入端的组合逻辑输入,使得电路 ...
- verilog语法实例学习(10)
常用的时序电路介绍 T触发器和JK触发器 在D触发器输入端添加一些简单的逻辑电路,可以生成另一种类型的存储元件.比如下图所示的T触发器.该电路有一个上升沿触发的触发器和两个与门,一个或门,以及一个反相 ...
- verilog语法实例学习(9)
常用的时序电路介绍 寄存器 一个触发器可以存储一位数据,由n个触发器组成的电路可以存储n位数据,我们把这一组触发器叫做寄存器.寄存器中每个触发器共用同一个时钟. 下面是n位寄存器的代码,我们通过一个参 ...
随机推荐
- 探索Java的日志世界
探索Java的日志世界 本文的思维导图 一.主题 打开日志的大门,探索的Java日志世界 二.目标 了解常用的日志框架 掌握日志框架的选择和使用以及开发规范 了解日志框架中的一些设计思想 三.内容 1 ...
- java中Optional和Stream流的部分操作
package test9; import java.util.DoubleSummaryStatistics; import java.util.Optional; import java.util ...
- qq sid qq sid 是什么 qq sid 怎么用
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha ======= qq sid qq sid 是什么 qq sid 怎么用 ===== ...
- 「BZOJ 3645」小朋友与二叉树
「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) ...
- Codeforces 986D Perfect Encoding FFT
题意: 给定一个数n,选出m个数使得 $\Pi_{i=1}^m a_i\ge n$,求$\sum_{i=1}^m a_i$的最小值 ,其中$m$的大小不限 $n$的长度$\le 10^6$ 简单的计算 ...
- ICE::Handle 使用崩溃问题
简单例子如下: #include "Ice/Ice.h" #include "IceUtil/IceUtil.h" #include "Printer ...
- Redis如何处理客户端连接
本文主要介绍了 Redis 处理客户端连接的一些内部实现机制,包括连接处理.超时.缓冲区等一系列内容. 注:本文所述内容基于 Redis2.6 及以上版本. 连接的建立 Redis 通过监听一个 TC ...
- 通过WinAPI播放PCM声音
在Windows平台上,播放PCM声音使用的API通常有如下两种. waveOut and waveIn:传统的音频MMEAPI,也是使用的最多的 xAudio2:C++/COM API,主要针对游戏 ...
- golang 引用相对路径package
My $GOPATH is "/Users/peter/goworkspace" Golang 版本是: go version go1.6 darwin/amd64 在这个work ...
- [Winform]js与webbrowser交互
摘要 目前项目中采用的方式是内嵌浏览器的方式,打开本地或者互联网上的h5页面.在开发之前做了一下调研.目前常用的在C#封装的浏览器内核中,Chromium 内核封装有Xilium.Cefglue.Ce ...