verilog之基本结构
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之基本结构的更多相关文章
- 简单的Verilog测试模板结构
这里记录一下曾经用到的简单的测试模板,如下所示: //timescale `timescale 1ns/1ns module tb_module(); //the Internal motivatio ...
- Verilog HDL程序设计——基本要素
Verilog基本上熟悉了,继续整理一下Verilog的学习笔记吧.前面记载了Verilog的结构,写Verilog的结构有了,但是该怎么写呢?在写之前就得了解一下Verilog的一些基本要素了,也就 ...
- 至芯FPGA培训中心-1天FPGA设计集训(赠送FPGA开发板)
至芯FPGA培训中心-1天FPGA设计集训(赠送开发板) 开课时间2014年5月3日 课程介绍 FPGA设计初级培训班是针对于FPGA设计技术初学者的课程.课程不仅是对FPGA结构资源和设计流程的描述 ...
- FPGA 概述
概述 verilog HDL Verilog HDL基本结构 1 Verilog HDL程序是由模块构成的.每个模块嵌套在module和endmodule声明语句中. 2 每个Verilog HDL源 ...
- 【黑金原创教程】【Modelsim】【第三章】理想就是美丽
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
- 【黑金教程笔记之001】veriloghdl 扫盲文—笔记&勘误
001_veriloghdl 扫盲文—笔记&勘误 2014/10/31 原文作者:akuei2 联系方式:blog.ednchina.con/akuei2 勘误001: Page 3 0.1 ...
- VerilogHDL学习
No.1 Verilog HDL程序结构 Verilog 描述硬件的基本设计单元是模块 module 复杂的电子电路构建主要是通过模块之间的相互连接调用来实现的,在Verilog中将模块包含在关键字 ...
- 数电第一周总结_by_yc
数电第一周总结 重点:Verilog建模方式 结构级建模: 需基于电路原理图 module mux( input data0, input data1, input sel, output out); ...
- Verilog HDL基础语法讲解之模块代码基本结构
Verilog HDL基础语法讲解之模块代码基本结构 本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的 ...
- Verilog HDL的程序结构及其描述
这篇博文是写给要入门Verilog HDL及其初学者的,也算是我对Verilog HDL学习的一个总结,主要是Verilog HDL的程序结构及其描述,如果有错,欢迎评论指出. 一.Verilog ...
随机推荐
- 如何从零实现属于自己的 API 网关?
序言 上一篇文章:你连对外接口签名都不会知道?有时间还是要学习学习. 有很多小伙伴反应,对外的 API 中相关的加签,验签这些工作可以统一使用网关去处理. 说到网关,大家肯定比较熟悉.市面上使用比较广 ...
- Spring源码之容器的功能拓展-ApplicationContext
目录 一.解析预备 刷新上下文环境 例如对系统属性或者环境变量进行校验和准备 二.初始化 BeanFactory 并进行 Xml 配置文件的读取 三.对BeanFactory 各种功能填充 四.激活以 ...
- 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/ ...
- "explicit" 的使用
今天在编译项目时,代码审查提示 "Single-parameter constructors should be marked explicit" 于是就在构造函数前加上 expl ...
- 【libGDX】使用Mesh绘制立方体
1 前言 本文主要介绍使用 Mesh 绘制立方体,读者如果对 Mesh 不太熟悉,请回顾以下内容: 使用Mesh绘制三角形 使用Mesh绘制矩形 使用Mesh绘制圆形 在绘制立方体的过程中,主 ...
- 【Android 逆向】r0zapataNative.apk 破解
1. apk 安装到手机,需要输入内容,随便输入,提示fail... 2. apk 导入到jadx中查看一下 MainActivity.java String textData = "b2F ...
- 数据分析day01
数据分析三剑客 numpy pandas(重点) matplotlib numpy模块 NumPy(Numerical Python)是Python语言中做科学计算的基础库.重在于数值计算,也是大部分 ...
- 【Azure Developer】使用Azure Key Vault 的Key签名后,离线验证的一些参考资料
问题描述 使用 key Vault 的sign接口,Request Body中的 Value 是要传什么呢? 签名后的内容如何在本地离线验证呢? Azure Key Vault Sign 接口:htt ...
- union和union all的区别?
一. 显示结果不同 union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果集全部显示出来 二.对重复结果的处理不同 union all是直接连接,取到的是所有值,记录可能有的 ...
- 解决centos启动zookeeper集群,但是状态显示报错:Error contacting service. It is probably not running 与连接超时,连接被拒绝问题
安装zookeeper-3.4.10的时候,启动正常没报错,但bin/zkServer.sh status查看状态的时候却出现错误,如下: 这些都是我之前出现的问题,刚开始我出现的问题是连接超时,后来 ...