FPGA学习笔记(二)模块建立及变量连接
Verilog所写的工程是由一个一个的模块连接起来的,每个文件代表一个模块,模块的名字和文件名要保持一致,一个模块的基本声明方法为:
//FileName:main_module
module main_module(
CLK, RSTn, IO_In, IO_Out
);
input CLK;
input RSTn;
input IO_In;
output IO_Out; endmodule
对于顶层文件,所有声明的input、output变量都可分配引脚。所谓的input和output是相对于自己来说的,如果要利用此变量读入内容,则声明为input,要利用此变量输出内容,则声明为output。
为了捕获顶层文件的CLK,RSTn,IO_In,同时处理后输出IO_Out,需要另外建立一个模块(文件),如下:
//File_Name:io_changer
module io_changer(
myCLK, myRSTn, myIO_In, myIO_Out;
);
input myCLK;
input myRSTn;
input myIO_In;
output myIO_Out; endmodule
要连接这两个模块,也就是顶层main_module连接到io_changer,则需要在顶层文件内做如下声明:
wire Out_Receiver;
io_changer U1(
.myCLK( CLK ),
.myRSTn( RSTn ),
.myIO_In( IO_In ),
.myIO_Out( Out_Receiver )
);
由于前三个变量都声明为了input,因此会将顶层的三个变量值传入,而第四个变量声明为了output,因此会将io_changer中的myIO_Out的值传入顶层的wire变量Out_Receiver。这类似于C++中的类内赋值,可以想象为.前面有一个this指针,在io_changer类内,this.myCLK就是io_changer的myCLK变量,括号是一种赋值手段,当然这里也增加了输出的功能。
当建立起这样的两个模块并且完成编译后,会自动完成文件连接,将io_changer作为main_module的子文件。
在模块io_changer内,要改变myIO_Out的值,一般采用assign赋值
在always循环结构内,一般使用reg变量而不能是wire变量,假设存在一个计数器Counter的值由0到50000000代表1秒,要使得IO_Out每500ms翻转一次,则要如下书写:
reg rIO_Out;
always @ (posedge myCLK or negedge myRSTn) if (!myRSTn)
rIO_Out = 1'b0;
else if(Counter >= 2500_0000)
rIO_Out = 1'b1;
else
rIO_Out = 1'b0;
assign myIO_Out = rIO_Out
为了将变化回传到顶层,还需要在顶层内将接收到的Out_Receiver赋值到IO_Out引脚,如下:
assign IO_Out = Out_Receiver;
FPGA学习笔记(二)模块建立及变量连接的更多相关文章
- CMake学习笔记二:cmake 常用变量和常用环境变量
		
1 cmake 变量引用的方式 使用 ${} 进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过 ${} 取值. 2 cmake 自定义变量的方式 主要有隐式定义和显式定义两种,举一个隐式定 ...
 - [Spring Data MongoDB]学习笔记--建立数据库的连接
		
1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoD ...
 - Go语言学习笔记二: 变量
		
Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...
 - AJax 学习笔记二(onreadystatechange的作用)
		
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
 - amazeui学习笔记二(进阶开发4)--JavaScript规范Rules
		
amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...
 - JDBC学习笔记二
		
JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...
 - MongoDB学习笔记二- Mongoose
		
MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...
 - [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
		
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
 - Django学习笔记二
		
Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...
 
随机推荐
- ML学习分享系列(1)_计算广告小窥[上]
			
原作:面包包包包包包 修改:寒小阳 && 龙心尘 时间:2016年1月 出处: http://blog.csdn.net/breada/article/details/50572914 ...
 - SpringMVC常用配置
			
关于Spring.SpringMVC我们前面几篇博客都介绍了很多,但是还不够,这些框架中涉及到的注解.配置非常多,那么我们今天再来介绍一个SpringMVC的基本配置,灵活的使用这些配置,可以让我们在 ...
 - SQLite 数据类型(http://www.w3cschool.cc/sqlite/sqlite-data-types.html)
			
SQLite 数据类型 SQLite 数据类型是一个用来指定任何对象的数据类型的属性.SQLite 中的每一列,每个变量和表达式都有相关的数据类型. 您可以在创建表的同时使用这些数据类型.SQLite ...
 - FFmpeg源代码简单分析:configure
			
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
 - Hibernate进阶知识点必备
			
hibernate.cfg.xml的常用的配置 hibernate.show_sql:是否把Hibernate运行时的SQL语句输出到控制台,编码阶段便于测试,为true的好 -hibernate.f ...
 - centos7安装jdk,tomcat,msyql(MariaDB)
			
操作系统版本 CentOS Linux release 7.2.1511 (Core) 安装jdk 下载jdk-8u66-linux-x64.rpm上传到linux上 先改用户权限 然后 rpm -i ...
 - Android进阶(八)Can't create handler inside thread that has not called Looper.prepare()
			
Error:Can't create handler inside thread that has not called Looper.prepare() 原代码: //利用Handler消息传递机制 ...
 - Android进阶(五)在Eclipse中关联Gson源码
			
1)获得相应的jar包gson-2.2.4-sources.jar与gson-2.2.4-javadoc.jar. 2)在libs目录下新建src包和docs包,将相应jar包放入相应文件夹内. 3) ...
 - Java实现二叉树的创建和遍历操作(有更新)
			
博主强烈建议跳过分割线前面的部分,直接看下文更新的那些即可. 最近在学习二叉树的相关知识,一开始真的是毫无头绪.本来学的是C++二叉树,但苦于编译器老是出故障,于是就转用Java来实现二叉树的操作.但 ...
 - iOS中 UICollectionView UI_19
			
UICollectionView 是UITableView加强版 UITableView 和UICollectionView的设计思想: 1.布局: UITableView 的布局可以由UITable ...