FPGA知识大梳理(二)verilogHDL语法入门(1)
此文是写给0基础学习者,也是对自己知识点总结水平的考验。
对于有C基础的人来说,学习verilog应该是轻而易举 —— 类比法学习。
第一步:格式。
对于C来说我们前面会写
‘include“stdio.h”
int main {.....};
直接转化到verilog中是
module module_name (....);
........
endmodule
对于C 的意思就是告诉编辑器,我要在有这个库的前提下,建立这么一个函数,它实现的功能是......。而对于Verilog来说就是告诉编辑器,我要建立一个数字模块,这个模块实现..... 功能。OK 我们再讨论省略部分的内容。
第二步:运算符
大家知道HDL 是数字电路的描述性语言,所以需要一点点数字电路的基础就行了,数字电路中三个最小最基本的逻辑是 与,或,非。在verilog中的运算符就是 &,|,! 。OK ,知道这么多就可以开始我们的verilog程序设计了。
现在我们要实现一个下图所示的电路功能,这是一个a和b输入,c输出,内部实现与功能的电路图

设计开始和C一样先写格式,取一个工程的名字叫project_a .
module project_a ();
endmodule
好了,我们要想想看,我们拿到一个芯片做top view的时候我们看到的是什么? 是pin脚。所以我们要把pin脚的信息告诉编辑器,那么代码就变成了
module project_a (
input a,
input b,
output c
);
endmodule
格式很灵活,还可以是
module project_a (
a,
b,
c
);
input a ;
input b;
output c ; endmodule
或者是将6,7 两行合并成 input a ,b ;
个人比较推荐第二种,原因以后再说。格式问题,不用纠结。只是要注意一下哪里是 “;” 哪里是 “,” 就可以了。
现在整个top view 已经做完了,现在要说说具体实现了。在C语言中赋值是直接给的,在Verilog中赋值要借助两个关键字 always 和assign才可以把值赋过去。先说assign 的格式
assign c = a&b ;
意思就是左边变量c 这根线上的信号结果等于右边信号运算的结果。那么最终的程序就是
module digtal_HDL_test (
a ,
b ,
c
);
input a;
input b ;
output c ; assign c = a&b ; endmodule
再看always ,因为语法要求always里面所有赋值等式左边的变量都必须是reg,所以得把c的类型改一下,就是在always的前面加上一条语句 : reg c ;那么最终的程序就是
module digtal_HDL_test (
a ,
b ,
c
);
input a;
input b ;
output c ; reg c ; always @ (a or b)
c = a&b ; endmodule
第12行的意思是 “经常(always)在(@) a或者b (a or b)发生变化的时候去执行下面的语句”
好了,现在我们程序设计就完毕了。现在让我们来回顾一下我们的程序包含了哪些东西
1,模块的结构和端口。端口还有inout 双向口(这个高级一点,http://www.cnblogs.com/sepeng/p/5126424.html 里面有介绍,可以先不追究)
2,运算符。verilog的运算符分为单目运算和双目运算符,以及三目运算符。部分和C的是一样的。
3,常量及变量。分为,数字,参数,变量(wire,reg ,memory)
4,连续赋值语句assign 以及过程赋值语句always。
具体说明就是念书了,请参照 夏宇闻老师的《Verilog数字系统设计教程》
练习流水灯实验,熟悉设计流程以及工具的使用,下板看到效果才行。
(流水灯实验中要贯穿,三目运算符,拼接移位操作,数字,常量,变量)
作业:硬件抽奖小模型。
一共有16个号码,其中有两个号码是中奖号码(具体号码是机密,程序内部定义),输入一个数字,按下使能键。如果不正确两个灯一直是亮的,如果正确,对应的那个灯就会灭。
附加功能:1,如果必须先中第一个才能中第二个该如何设计
2,如果先中了第一个,后中了第二个。第三盏灯亮。如果是先中第二个,后中第一个第四盏灯亮。
(提示行为建模,号码输入使用key,使能使用button。)
FPGA知识大梳理(二)verilogHDL语法入门(1)的更多相关文章
- FPGA知识大梳理(四)FPGA中的复位系统大汇总
		本文整合特权(吴厚航)和coyoo(王敏志)两位大神的博文.我也很推崇这两位大神的书籍,特权的书籍要偏基础一下,大家不要一听我这么说就想买coyoo的.我还是那一句话,做技术就要step by ste ... 
- FPGA知识大梳理(一)对FPGA行业的一点感言
		今天想开始把这FPGA行业的知识点做一个大整理,从个人感想,到语法,到器件基础,难点攻克,到项目应用.把自己这几年接触到的知识做一个全面的回顾,看看自己这几年走过的路. 人生无常,几年的跌跌撞撞勉强算 ... 
- FPGA知识大梳理(三)verilogHDL语法入门(2)知识汇总
		1,时序逻辑.将上次的练习修改成时序逻辑会如何设计. always @ (posedge clock) 2,block 与unblocking A,有clock的always中通常使用nonbloc ... 
- Golang 基础之基础语法梳理 (二)
		大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第二章节 Golang 基础之基础语法梳理 (一) Gol ... 
- [独孤九剑]持续集成实践(二)– MSBuild语法入门
		本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ... 
- SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world
		摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ... 
- Java基础语法入门01
		Java基础语法入门01 学习java你要先进行去了解JDK,JRE,JVM JDK Java开发工具包 JRE Java语言开发的运行环境 JVM Java虚拟机,用于Java语言的跨平台所用. 当 ... 
- 贝叶斯公式由浅入深大讲解—AI基础算法入门
		1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定 ... 
- Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题
		简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ... 
随机推荐
- VS2010/MFC对话框:向导对话框的创建及显示
			向导对话框的创建及显示 本节将为大家演示如何创建向导对话框. 仍然以前面的“加法计算器”的例子为基础,在其中加入向导对话框,我们可以用它来说明加法计算器的使用方法,一步一步引导用户操作,这也是比较常见 ... 
- swift菜鸟入门视频教程-03-字符串和字符
			本人自己录制的swift菜鸟入门,欢迎大家拍砖.有什么问题能够在这里留言. 主要内容: 字符串字面量 初始化空字符串 字符串可变性 字符串是值类型 使用字符 计算字符数量 连接字符串和字符 字符串插值 ... 
- 苹果 App 转移图文详解
			目前公司在做App转移操作,在网上搜索相关资料加上自己的亲自操作,整理成一个文档,希望能给你提供帮助. 如转载请添加出处. 此文章只是为了记录一个Apple ID下的APP,转移到另外一个Apple ... 
- CSS learnning...
			"Whenever this property changes, apply that change slowly." The property transition: width ... 
- zoj 1409 Communication System
			/*如果要一个物体的多种属性,最好用结构体,不要用二维数组或者多维数组.用多维数组进行关键字排序很不稳定 */ /*给每个设备的所有价格排序,每个设备选取恰好比已知带宽大的价格(这个时候的比例最大) ... 
- HTML静态网页的格式与布局(position:(fixed、absolute、relative)、分层、float(left、right))
			一.position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角的弹出窗口. 示例: 二.position:absolute 1.外层没有position:absolute(或r ... 
- p95 3.5、3.8
			3.5 有一农夫带一条狼,一只羊和一筐菜欲从河的左岸乘船到右岸,但受下列条件限制:(1)船太小,农夫每次只能带一样东西过河:(2)如果没有农夫看管,则狼要吃羊,羊要吃菜.请设计一个过河方案,是的农夫 ... 
- C++的常量折叠(三)
			背景知识 在开始之前先说一下符号表,这个编译器中的东西.下面看一下百度百科中的描述: 符号表是一种用于语言翻译器中的数据结构.在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如 ... 
- Snap.svg中transform旋转值的“r+数组”表现形式
			Snap.svg中transform的值还可以写为类似以下这种形式: transform:'r'+[100,[50,50]]; 这种写法的意思是,让元素以(50,50)为旋转中心点,然后旋转100度. ... 
- Oracle "Job定时"
			今天需要做个定时器,定时到别的库导入数据用到了Job,第一次使用记录下来,如果有第一次操作的可以借鉴一下 1.首先,使用Toad新建job,进入配置页面 
