Verilog 语言 001 --- 入门级 --- 编写一个半加器电路模块
Verilog 语言编写一个 半加器 电路模块
半加器 的电路结构:
S = A 异或 B
C = A 与 B
1. 程序代码
module h_adder (A, B, SO, CO);
input A, B;
output SO, CO;
assign SO = A ^ B;
assign CO = A & B;
endmodule
2. 解释程序代码
- 关键词
module
与endmodule
就像一个括号({}
),任何一个功能模块的描述都必须放在此 “括号” 里面。 h_adder
是模块的名字,名字自定义。h_adder
后面的括号和括号里的内容叫做:外部端口表。括号里面的内容:A, B, SO, CO
,就是这个模块中所有 外部端口 ,外部端口的名字自定义,类似 C语言 函数的形参。如果将这段程序比喻成一个电路的话,那么外部端口就是这个电路中引出的引脚。- 使用
input
和output
等关键字来定义 外部端口(A, B, SO, CO
)的属性。
input
和output
等关键字叫做:端口关键词。如果 外部端口 是输出引脚,就定义为:output
;如果 外部端口 是输入引脚,就定义为:input
;如果 外部端口 是输入输出引脚,就定义为:inout
。 - 以关键字
assign
引导的语句,是描述这个模块(当前例子的模块名为:h_adder
)的逻辑功能和电路结构。简单的说,实现功能的语句使用关键字assign
来修饰。
这样的一个模块程序,就相当于一个具有某种功能的电路模块硬件。比如:上面这段代码的功能就是 半加器 这个电路的功能。
3. 程序代码中需要注意的几点
- 模块的名字(
h_adder
),在命名的时候,需要注意:名称不能使用数字开头;不能出现中文;不能与EDA软件库中已定义好的关键词或元件名相同,比如:or2
、latch
等。 - 除了
endmodule
语句不需要,其他的每条语句都使用 分号(;
) 做为结束。 - 定义外部端口时,端口关键词(
input
、output
、inout
等)后面可以定义多个外部端口,端口名之间使用逗号(,
)相隔,最后加上 分号(;
)。
4. 程序模板
模块语句的一般格式如下:
module 模块名 外部端口表 ;
定义外部端口属性
模块的功能描述
endmodule
参考:
《EDA技术实用教程 — Verilog HDL版(第五版)》 3.1节 P59
Verilog 语言 001 --- 入门级 --- 编写一个半加器电路模块的更多相关文章
- 用Java语言编写一个简易画板
讲了三篇概博客的概念,今天,我们来一点实际的东西.我们来探讨一下如何用Java语言,编写一块简易的画图板. 一.需求分析 无论我们使用什么语言,去编写一个什么样的项目,我们的第一步,总是去分析这个项目 ...
- C语言的本质(28)——C语言与汇编之用汇编写一个Helloword
为了更加深入理解C语言的本质,我们需要学习一些汇编相关的知识.作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但是非常重要.因为它能够完成许多其它语言所无法完成的功能.就拿 Linux 内核 ...
- 用C语言编写一个简单的词法分析程序
问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...
- 编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url
编写一个C语言函数,要求输入一个url,输出该url是首页.目录页或者其他url 首页.目录页或者其他url 如下形式叫做首页: militia.info/ www.apcnc.com.cn/ htt ...
- 为Python编写一个简单的C语言扩展模块
最近在看pytorh方面的东西,不得不承认现在这个东西比较火,有些小好奇,下载了代码发现其中计算部分基本都是C++写的,这真是要我对这个所谓Python语音编写的框架或者说是库感觉到一丢丢的小失落,细 ...
- 用 C 语言编写一个简单的垃圾回收器
人们似乎觉得编写垃圾回收机制是非常难的,是一种仅仅有少数智者和Hans Boehm(et al)才干理解的高深魔法.我觉得编写垃圾回收最难的地方就是内存分配,这和阅读K&R所写的malloc例 ...
- linux c语言编写一个shell壳
目的:我们要用c语言编写一个shell可以运行在linux机器上的. 介绍:shell所在的层次 我们要做的是操作系统,用于用户与操作系统进行交互的myhsell 思路:用户输入 一行字符串,我们先 ...
- 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)
使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...
- 《用C++语言编写一个程序,求PI的值》
//编写一个C++程序求PI的值 /* PI=16arctan(1/5)-4arctan(1/239) 其中arctan用如下形式的极数计算: arctan=x-(x^3/3)+(x^5/7)-(x^ ...
随机推荐
- (转)android头像设置:从本地照片库或拍照获取并剪裁
本文转载于:http://blog.csdn.net/sheeprunning/article/details/9184021 功能介绍 制作android应用时,用户注册的功能必不可少,往往还需要具 ...
- DP 问题
什么时候使用DP: 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理.(这句话可理解为先将复杂的问题简单化, 达到最简后的解题公式同样可以解复杂情况 ...
- Vue 将样式绑定到一个对象让模板更清晰
Vue 将样式绑定到一个对象让模板更清晰 <div id="app"> <div v-bind:style="styleObject"> ...
- Eclipse jar包源码下载
在使用intelliJ的时候,可以在IDE中直接下载jar包: Eclipse也可以!就是插件Java Source Attacher 这个插件是放在eclipse安装目录的dropins目录下.重启 ...
- 洛谷【P1714】切蛋糕
浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://www.luogu.org/problemnew/show/P1714 ...
- why latches are considered bad?
A "latch" is different from a "Flip-Flop" in that a FF only changes its output i ...
- 容器中跨主机的网络方案-flannel
容器中的网络是建立docker集群的重要内容. 本文将介绍如何用flannel实现容器的多节点互通. 下图是flannel的实现原理,摘自: http://docker-k8s-lab.readthe ...
- Azure Blob存储更改缓存时间
Azure的Blob存储可以作为Http的服务来使用.很多客户已经把Blob作为图片存储的服务,这样稍作代码的修改,解决了图片服务器带宽.性能等多种问题. 但同时问题也出现了:在传统Http的服务中很 ...
- Angular5学习笔记 - 虚拟RestfulApi配置与使用(六)
一.安装json-server功能 #windows cnpm install json-server -g #Mac & Linux sudo npm install json-server ...
- install命令和cp命令的区别
基本上,在Makefile里会用到install,其他地方会用cp命令. 它们完成同样的任务——拷贝文件,它们之间的区别主要如下: 1.最重要的一点,如果目标文件存在,cp会先清空文件后往里写入新文件 ...