此文是写给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)的更多相关文章

  1. FPGA知识大梳理(四)FPGA中的复位系统大汇总

    本文整合特权(吴厚航)和coyoo(王敏志)两位大神的博文.我也很推崇这两位大神的书籍,特权的书籍要偏基础一下,大家不要一听我这么说就想买coyoo的.我还是那一句话,做技术就要step by ste ...

  2. FPGA知识大梳理(一)对FPGA行业的一点感言

    今天想开始把这FPGA行业的知识点做一个大整理,从个人感想,到语法,到器件基础,难点攻克,到项目应用.把自己这几年接触到的知识做一个全面的回顾,看看自己这几年走过的路. 人生无常,几年的跌跌撞撞勉强算 ...

  3. FPGA知识大梳理(三)verilogHDL语法入门(2)知识汇总

    1,时序逻辑.将上次的练习修改成时序逻辑会如何设计. always @ (posedge clock) 2,block 与unblocking  A,有clock的always中通常使用nonbloc ...

  4. Golang 基础之基础语法梳理 (二)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第二章节 Golang 基础之基础语法梳理 (一) Gol ...

  5. [独孤九剑]持续集成实践(二)– MSBuild语法入门

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  6. SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  7. Java基础语法入门01

    Java基础语法入门01 学习java你要先进行去了解JDK,JRE,JVM JDK Java开发工具包 JRE Java语言开发的运行环境 JVM Java虚拟机,用于Java语言的跨平台所用. 当 ...

  8. 贝叶斯公式由浅入深大讲解—AI基础算法入门

    1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定 ...

  9. Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

随机推荐

  1. Android面试笔试集锦

    前19题为常考题目 1. Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各 ...

  2. ios中的GCD

    前面我们说了block中提到它用于多线程,而gcd则是其用于多线程的典型.gcd其全称(Grand Central Dispatch) 那到底什么叫gcd,官方的解释如下: Grand Central ...

  3. HDU 4740 The Donkey of Gui Zhou (模拟)

    由于一开始考虑的很不周到,找到很多bug.....越改越长,不忍直视. 不是写模拟的料...................... 反正撞墙或者碰到已经走过的点就会转向,转向后还碰到这两种情况就会傻站 ...

  4. hdu acm 2154(多解取一解)

    //题目中结果有一条限制就是最后必须跳回A,如果我们的思想框在这个条件上就很容易卡住,因为这样的条件下的路径很难有规律的罗列,然而我们说这个图形中有三个区域,我们算出每个区域的第n-1次的种类数,然后 ...

  5. iOS 用UISearchDisplayController实现查找功能

    UISearchDisplayController是iOS中用于处理搜索功能的控制器,此控制器需要和UISearchBar结合使用 示例代码如下: // // WKRootViewController ...

  6. 浅谈Struts2(一)

    一.Struts2引言 1.Struts2框架的概念 解决的MVC开发过程中,控制器(Controller)的通用问题. a.什么是MVC开发 MVC开发是一种编程思想,由设计者人为的把一个项目,划分 ...

  7. Hadoop MultipleOutputs 结果输出到多个文件夹 出现数据不全,部分文件为空

    如题:出现下图中的情况(设置reduceNum=5) 感觉很奇怪,排除了很久,终于发现是一个第二次犯的错误:丢了这句 this.mOutputs.close(); 加上这句,一切恢复正常!

  8. java 读文件 解析

    [Java]读取文件方法大全   1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile {     /**     ...

  9. Python学习之路——初识Python

    一.第一个程序Hello World: 1.打印输出Hello World: Python2打印方法: >>> print "hello world"hello ...

  10. python10min系列之面试题解析:python实现tail -f功能

    同步发布在github上,跪求star 这篇文章最初是因为reboot的群里,有人去面试,笔试题有这个题,不知道怎么做,什么思路,就发群里大家讨论 我想了一下,简单说一下我的想法吧,当然,也有很好用的 ...