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位寄存器的代码,我们通过一个参 ...
随机推荐
- 002.Git日常基础使用
一 获取git仓库 1.1 初始化仓库 [root@git ~]# cd /mystudy/ [root@git mystudy]# git init [root@git mystudy]# git ...
- .NET工作准备--04ASP.NET
(已过时) ASP.NET 1.开发基础 *asp.net以什么形式运行?.net宿主的概念,ISAPI的概念,ASP.NET基本运行机制; .net宿主的概念:CLR被实现为一个标准的COM服务器组 ...
- Java日期时间类
日期时间类有三种: 一.java.util.Date:一般用于声明日期时间类型的变量. 二.java.sql.Date:一般用于数据库日期时间的映射. 三.java.util.Calendar:一般用 ...
- 日志回滚:python(日志分割)
日志回滚:python 什么是日志回滚? 答: 将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会越来越庞大,进而影响系统的性能.因此,有必要对日志文件按某种条件进行切分,要切分日 ...
- spring 状态机
前言:“状态机”见名知意,用状态去管理业务操作,打个比方:0~1岁(出生状态),1~3岁(认知状态),3~6岁(启蒙状态),6~22岁(学习状态),22~60(工作状态),60以后(退休状态),那么人 ...
- [AHOI2013]作业
[AHOI2013]作业 题目大意: 给定一个长度为\(n(n\le10^5)\)的数列\(A(1\le A_i\le n)\).\(m(m\le10^6)\)次询问,每次询问区间\([l,r]\)内 ...
- 硬盘img镜像备份工具
linux下使用dd,Windows下使用WinImage,不过dd使用的比较多.
- C#Winform将WebBowser控件替换为Chrome内核
摘要 由于最近要做一个浏览器式的软件,其中有不少地方需要使用到jQuery和BootStrap,但是在C#中,默认的WebBrowser控件默认使用的是IE的core,而低版本的IE在JS加载上总是容 ...
- phonegap helloworld 之android
一 phonegap cordova: http://cordova.apache.org/phonegap: http://phonegap.com PhoneGap 是Cordova的一个开源的发 ...
- .NET 开源Protobuf-net从入门到精通
<.NET 开源Protobuf-net从入门到精通>课程包含以下两个部分: 一..NET 开源Protobuf-net组件[数据存储篇] 本次分享课程包含以下干货知识点: 1.什么是Pr ...