此文是写给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. POJ 3294 Life Forms(后缀数组+二分答案)

    [题目链接] http://poj.org/problem?id=3294 [题目大意] 求出在至少在一半字符串中出现的最长子串. 如果有多个符合的答案,请按照字典序输出. [题解] 将所有的字符串通 ...

  2. 夜未央Test1

    积木游戏(block.pas)   [题目描述] 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,最高的积木的最终需要达到h. 在搭建开始之前,没有任何积木(可以看成n ...

  3. sicily-1029 Rabbit

    一.      题意(0.04s) 每一对成熟的兔子可以生一对兔子,兔子在m个月之后成熟,假设兔子都不会死,计算d个月后一共有多少只兔子. 二.      要高精度加法(用string) 三.     ...

  4. S3C6410嵌入式应用平台构建(一)

    [2014-4/8~4/10]目前我们已经积累一定的嵌入式相关知识,对嵌入式的架构及开发过程有了大体了解,唯一缺的就是实践,通过自己的分析搭建自己的嵌入式系统.下面,我将从此处开始记录我和我同学一起分 ...

  5. ASPxGridView-如何在客户端缓存数据

    有时候我们可以直接从后台生成一些值缓存到客户端,在用到的时候无需在进行callback进行取值,减少和服务器的交互.下面的例子缓存列"title_id"和"title&q ...

  6. 【JAVA】导出jar包时,Class files on classpath not found

    是因为\META-INF\MANIFEST.MF文件里面配置错误 错误版本 Manifest-Version: 1.0Class-Path: 正确版本 Manifest-Version: 1.0Cla ...

  7. window.parent与window.opener的区别与使用

    window.parent 是iframe页面调用父页面对象 举例: a.html 如果我们需要在b.html中要对a.html中的username文本框赋值(就如很多上传功能,上传功能页在ifrma ...

  8. BZOJ 1601: [Usaco2008 Oct]灌水( MST )

    MST , kruskal 直接跑 ---------------------------------------------------------------------- #include< ...

  9. [LeetCode]题解(python):108-Convert Sorted Array to Binary Search Tree

    题目来源: https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 题意分析: 给出一个排好序的数组,根据这 ...

  10. 深入剖析哪些服务是Oracle 11g必须开启的

    这篇文章主要介绍了哪些服务是Oracle 11g必须开启的以及这些服务的详细介绍,需要的朋友可以参考下   成功安装Oracle 11g数据库后,你会发现自己电脑运行速度会变慢,配置较低的电脑甚至出现 ...