Verilog作为一门硬件描述语言,快速掌握它的方法就是不断的练习,反复动手实践,通过例子掌握隐藏在语句背后的硬件电路。下面是第一个需要学习的Verilog例子:

module adderN #(parameter N=)(
input[N-:] a,
input[N-:] b,
input cin,
output cout,
output[N-] sum
);
assign{cout,sum)=a+b+cin;
endmodule

1、该例子描述了一个4位加法器,从例子可以看出整个模块是以module开始,endmodule结束。每一个module都是一个完整的电路描述,其余都只能认为是电路片段。一个模块就是一个完整的电路,如果有N个模块,这N个模块将通过某种机制结合起来,组成一个大的电路,但这N个模块都是独立运行的,而且是并行执行的。

2、a,b前面有一个[N-1:0],这个表示a与b的位宽为N,最高位为第N-1位,最低位为0位,而cin没有位宽设定,则表示1位,对于任何有意义的逻辑变量(wire/reg,输入输出端口等),必须指定其位宽,如果没有显示的指定,位宽默认位1.

3、parameter类型用来定义全局符号常量,等效于C语言的参数设定。还有一个符号常量localparam,它和parameter的区别在于,parameter可以被外部调用模块改变,而localparam仅在本模块内部有效。

4、assign语句是连续赋值的意思。加法器是一个组合电路,当输入变化时,输出立即响应,而且这个过程是持续不断的。

5、对于{cout,sum}的理解:这是一种对两个变量合并赋值的简化描述,HDL语法解析器和综合器按照下面的理解对上述描述进行解析,并生成电路:

wire[N:] adder_temp;
//假设assgin {cout,sum}=adder_temp[N:0];
assign cout=adder_temp[N];
assign sum[N-:]=adder_temp[N-:];

第一个Verilog程序:通用加法器的更多相关文章

  1. 一个平时写程序通用的Makefile样例

    //需要目标名和程序名字相同 .PHONY:clean all //伪目标 CC=gcc CFLAGS=-Wall -g BIN= //目标 all:$(BIN) %.o:%.c $(CC) $(CF ...

  2. 一个简单的通用Makefile实现

    一个简单的通用Makefile实现   Makefile是Linux下程序开发的自动化编译工具,一个好的Makefile应该准确的识别编译目标与源文件的依赖关系,并且有着高效的编译效率,即每次重新ma ...

  3. 第一个Servlet程序及分析

    第一个Servlet程序: package cc.openhome; import java.io.IOException; import java.io.PrintWriter; import ja ...

  4. Spark认识&环境搭建&运行第一个Spark程序

    摘要:Spark作为新一代大数据计算引擎,因为内存计算的特性,具有比hadoop更快的计算速度.这里总结下对Spark的认识.虚拟机Spark安装.Spark开发环境搭建及编写第一个scala程序.运 ...

  5. .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时

    .Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...

  6. .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时(翻译)

    .Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...

  7. Servlet笔记2--模拟Servlet本质、第一个Servlet程序、将响应结果输出到浏览器中

    以下代码均非IDE开发,所以都不规范,仅供参考 模拟Servlet本质: 模拟Servlet接口: /* SUN公司制定的JavaEE规范:Servlet规范 Servlet接口是Servlet规范中 ...

  8. K8S集群入门:运行一个应用程序究竟需要多少集群?

    如果你使用Kubernetes作为应用程序的操作平台,那么你应该会遇到一些有关使用集群的方式的基本问题: 你应该有多少集群? 它们应该多大? 它们应该包含什么? 本文将深入讨论这些问题,并分析你所拥有 ...

  9. 一个老牌程序员说:做Java开发,怎么可以不会这 20 种类库和 API

随机推荐

  1. Discuz常见小问题-如何修改顶部导航

    1 除了主导航,我们还有一些其他的导航菜单需要设置,比如顶部导航栏,注意系统内置的最好不要修改,如果我不想显示系统内置的,则取消勾选即可.下面我自己做了两个新的顶部导航超链接,分别指向新的站外的地址. ...

  2. jQuery停止动画finish和stop函数区别

    stop()函数直接停止动画,finish()也会停止动画同时所有排队的动画的CSS属性跳转到他们的最终值. 示例代码: <html> <head> <meta char ...

  3. MVC MVP MVVM 图解

    1.MVC (1)图解 解释: 视图(View):用户界面. 控制器(Controller):业务逻辑 模型(Model):数据保存 各部分之间的通信方式如下: View 传送指令到 Controll ...

  4. Ubuntu系统安装VMware Tools的简单方法

    不少网友反映在VMWare虚拟机下安装Ubuntu系统后无法安装VMware Tools,这里给出一个简单方法,只需要几步即可解决. 第一步:进入系统后,点击虚拟机上的安装vmware tools,回 ...

  5. Java多线程系列目录(共43篇)(转)

    Java多线程系列目录(共43篇) http://www.cnblogs.com/skywang12345/p/java_threads_category.html

  6. kafka具体解释一、Kafka简单介绍

    背景:      当今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临例如以下几个挑战: 怎样收集这些巨大的信息 怎样分析它 怎样及时做到如上两点 ...

  7. 使用c:forEach 控制5个换行

    今天做项目的时候碰到一个问题,我须要显示不确定数目的图片在网页上(图片是从数据库查出来的),用的是<c:forEach>循环取值的.就须要做成一行显示固定个数的图片.代码例如以下(我这里是 ...

  8. 【laravel5.4】关键字【use】使用

    1.在namespace 和 class 之间使用,是引入类文件的意思,命名空间过长或者类文件同名,可以使用[as]区别 2.在class 类里面使用[use],是导入trait  类的意思,多继承的 ...

  9. 【JS】一款好用的JS日历选择插件【bootstrap-datetimepicker.js】

    1.插件名称:bootstrap-datetimepicker.js,下载地址:上Github下载或者下面链接 2.效果图: 3.使用方法:里面有Demo 链接: https://pan.baidu. ...

  10. PHP生成缩略图、加水印

    <?php class ThumbWaterImages{ /** * 生成缩略图/加水印 * classname ThumbWaterImages * datetime:2015-1-15 * ...