verilog语法的基本结构

1、verilog的定义

verilog,一种硬件描述语言,致力于提高数字电路,尤其是大规模数字电路的描述规范。从描述就可以看出,这个语言和C不同,不是高级语言。但是,这个语言也不像汇编。其本身能够完成许多高级语言的功能,比如判断、计算、选择等操作。这就容易让人误以为这是一门高级语言。其实,有人想将高级语言引入硬件设计的,只不过现在还没有成功。高级语言和硬件语言之间的差距还是比较大的。

2、verilog的基本语法

想学一门语言,自然要了解语法。对于高级语言来说,其本身源自人类的逻辑,所以学习者可以更具自身的逻辑来实现功能。但是对于硬件语言来说,必须掌握一套内在的规律才能设计。目前在学习了一些基本的verilog模块后,个人觉得初级的verilog语言遵循的就是信号。verilog实现了信号的输入,处理和输出。每一个信号都必须与设计相关联。对于无关信号编译器会自动排除并发出警告。与此同时,每一个信号都占用着实际的硬件资源,越少的信号使用,硬件的规模就会越小。verilog的语法原则就是信号正确。

3、verilog的基本关键字

想写verilog,首先要做的就是了解关键字,这是开始的材料。

第一个就是module,用于声明硬件主体。在一个verilog代码中写一个module,并且模块名与文件名保持一致。加上endmodule就构成了一个闭合。这里类似与HTML中的标签。

第二个就是input 和 output,前面提到verilog是以处理信号为目标的,那么就会有信号的声明。input和output就是声明这个模块的外部连接信号。当然,还有inout,这里就不做介绍。其他在内部声明的都是内部信号。

第三个就是wire和reg,这部分则是信号的类别。和C语言中的数据类型类似,reg和wire是两种不同类型的变量。

第四个就是assign和always,这两个就是信号的处理函数了,可以对应到C中的printf等等系统函数。

有了这四个部分,实际上就可以设计出具有基本带你路功能的verilog代码了。

4、verilog的基本设计

verilog的设计,我个人习惯从信号的角度入手设计,通过实现描述信号的变化来设计。例如led灯闪烁就可以描述为一个周期变化的信号。依次执行事件1、2、3等就可以描述为状态机信号模型。这里实际上是对应到了数字设计的部分。利用verilog,完全可以设计出一个带有IO、计算器、控制器、存储器的小型处理器。当然,也可以按照事件的发生来设计,这里自己选择就好。

还是附上一段简单的代码吧

module mux(out, a, b, sel);
input a, b, sel;
output out;
reg out;
always @(a or b or sel)
if (!sel) out = a;
else out = b;
endmodule

上面的代码是描述了一个选择器。即sel=0,out=a,否则out=b。

代码的设计大体的思路就是这样,尝试一下就可以快速的理解。

5、仿真文件

前面说的都是设计文件。但是verilog还有一个重要的作用就是数字仿真。学过数电就会知道,电路仿真在软件上实现时需要自己去找合适的激励,这一步不断的调整还是比较费力的。而对于使用verilog的设计而言,虽然可以综合为rtl级电路,但是仿真时不可能将其转化为原理图,这样太费时间了。对于大型项目来说,基本不可能。所以,既然激励源也是由电路构成的,自然而然可以使用verilog去描述。所以这里产生了仿真verilog文件。

和设计时verilog语法不同,仿真时语法更为随意,不对应电路,会有许多系统函数可以使用。具体的设计还是要在实践中理解。

插入一段代码:

module RelationTest;
reg a; reg [1:0]b; reg [5:0] c;
initial begin
a=1'b1; b=2'b00; c=6'b101001;
$displayb({a, b}); //??3?b100
$displayb({c[5:3], a}); // 4?b1011
$displayb({4{a}}); // 4?b1111
end
endmodule

这里就是仿真文件,可以看到设计中多了许多其他的语法。这些语法有时间再讲吧。这里就是了解一下代码结构。

verilog之基本结构的更多相关文章

  1. 简单的Verilog测试模板结构

    这里记录一下曾经用到的简单的测试模板,如下所示: //timescale `timescale 1ns/1ns module tb_module(); //the Internal motivatio ...

  2. Verilog HDL程序设计——基本要素

    Verilog基本上熟悉了,继续整理一下Verilog的学习笔记吧.前面记载了Verilog的结构,写Verilog的结构有了,但是该怎么写呢?在写之前就得了解一下Verilog的一些基本要素了,也就 ...

  3. 至芯FPGA培训中心-1天FPGA设计集训(赠送FPGA开发板)

    至芯FPGA培训中心-1天FPGA设计集训(赠送开发板) 开课时间2014年5月3日 课程介绍 FPGA设计初级培训班是针对于FPGA设计技术初学者的课程.课程不仅是对FPGA结构资源和设计流程的描述 ...

  4. FPGA 概述

    概述 verilog HDL Verilog HDL基本结构 1 Verilog HDL程序是由模块构成的.每个模块嵌套在module和endmodule声明语句中. 2 每个Verilog HDL源 ...

  5. 【黑金原创教程】【Modelsim】【第三章】理想就是美丽

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  6. 【黑金教程笔记之001】veriloghdl 扫盲文—笔记&勘误

    001_veriloghdl 扫盲文—笔记&勘误 2014/10/31 原文作者:akuei2 联系方式:blog.ednchina.con/akuei2 勘误001: Page 3 0.1 ...

  7. VerilogHDL学习

    No.1 Verilog HDL程序结构 Verilog 描述硬件的基本设计单元是模块 module 复杂的电子电路构建主要是通过模块之间的相互连接调用来实现的,在Verilog中将模块包含在关键字 ...

  8. 数电第一周总结_by_yc

    数电第一周总结 重点:Verilog建模方式 结构级建模: 需基于电路原理图 module mux( input data0, input data1, input sel, output out); ...

  9. Verilog HDL基础语法讲解之模块代码基本结构

    Verilog HDL基础语法讲解之模块代码基本结构   本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的 ...

  10. Verilog HDL的程序结构及其描述

    这篇博文是写给要入门Verilog HDL及其初学者的,也算是我对Verilog  HDL学习的一个总结,主要是Verilog HDL的程序结构及其描述,如果有错,欢迎评论指出. 一.Verilog ...

随机推荐

  1. 如何从零实现属于自己的 API 网关?

    序言 上一篇文章:你连对外接口签名都不会知道?有时间还是要学习学习. 有很多小伙伴反应,对外的 API 中相关的加签,验签这些工作可以统一使用网关去处理. 说到网关,大家肯定比较熟悉.市面上使用比较广 ...

  2. Spring源码之容器的功能拓展-ApplicationContext

    目录 一.解析预备 刷新上下文环境 例如对系统属性或者环境变量进行校验和准备 二.初始化 BeanFactory 并进行 Xml 配置文件的读取 三.对BeanFactory 各种功能填充 四.激活以 ...

  3. go build gcc报错 /usr/bin/ld | cannot find -ldl cannot find -lpthread cannot find -lc

    之前一直在kali或者其他ubuntu设备编译sliver, 临时在centos7上编译时报错了 # github.com/bishopfox/sliver/server /usr/local/go/ ...

  4. "explicit" 的使用

    今天在编译项目时,代码审查提示 "Single-parameter constructors should be marked explicit" 于是就在构造函数前加上 expl ...

  5. 【libGDX】使用Mesh绘制立方体

    1 前言 ​ 本文主要介绍使用 Mesh 绘制立方体,读者如果对 Mesh 不太熟悉,请回顾以下内容: 使用Mesh绘制三角形 使用Mesh绘制矩形 使用Mesh绘制圆形 ​ 在绘制立方体的过程中,主 ...

  6. 【Android 逆向】r0zapataNative.apk 破解

    1. apk 安装到手机,需要输入内容,随便输入,提示fail... 2. apk 导入到jadx中查看一下 MainActivity.java String textData = "b2F ...

  7. 数据分析day01

    数据分析三剑客 numpy pandas(重点) matplotlib numpy模块 NumPy(Numerical Python)是Python语言中做科学计算的基础库.重在于数值计算,也是大部分 ...

  8. 【Azure Developer】使用Azure Key Vault 的Key签名后,离线验证的一些参考资料

    问题描述 使用 key Vault 的sign接口,Request Body中的 Value 是要传什么呢? 签名后的内容如何在本地离线验证呢? Azure Key Vault Sign 接口:htt ...

  9. union和union all的区别?

    一. 显示结果不同 union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果集全部显示出来 二.对重复结果的处理不同 union all是直接连接,取到的是所有值,记录可能有的 ...

  10. 解决centos启动zookeeper集群,但是状态显示报错:Error contacting service. It is probably not running 与连接超时,连接被拒绝问题

    安装zookeeper-3.4.10的时候,启动正常没报错,但bin/zkServer.sh status查看状态的时候却出现错误,如下: 这些都是我之前出现的问题,刚开始我出现的问题是连接超时,后来 ...