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. 吴X凡绯闻女友小怡同学被骂到清空社交平台?各大平台连敏感词库都没有的吗?

    敏感词都没有的平台 最近某加拿大籍贯的 rapper 被曝私生活不检点,且极有可能涉及诱X未成年少女,成为一个 raper. 当然至于是否属实,其实一个人是否是海王,微信.QQ 聊天记录里面记得清清楚 ...

  2. Keil MDK STM32系列(十) Ubuntu下的PlatformIO开发环境

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  3. 【Unity3D】人物跟随鼠标位置

    1 游戏对象 ​ 2D动画和人体模型及动画中介绍了 Aniamtion.Animator.人体模型.人体骨骼.人体动画等基础知识,本文将通过 "人物跟随鼠标位置" 案例加强对 Un ...

  4. 【Android】使用Exoplayer播放视频

    1 前言 ​ ExoPlayer 是 google 开源的应用级媒体播放器,github源码 → https://github.com/google/ExoPlayer.相较于 MediaPlayer ...

  5. Js中Proxy对象

    Js中Proxy对象 Proxy对象用于定义基本操作的自定义行为,例如属性查找.赋值.枚举.函数调用等. 语法 const proxy = new Proxy(target, handler); ta ...

  6. win32 - 找出占用文件的进程id和name

    日常文件操作的时候,在删除或者移动某个文件的时候,发现它被某些进程占用了. 那么下面的代码就可以帮助我们找出这些进程的id和name. 原理: 将资源注册到Restart Manager会话.重新启动 ...

  7. APISIX介绍

    APISIX是什么 Apache APISIX是Apache软件基金会下的云原生API网关,它兼具动态.实时.高性能等特点,提供了负载均衡.动态上游.灰度发布(金丝雀发布).服务熔断.身份认证.可观测 ...

  8. 遭遇DDOS攻击忍气吞声?立刻报警!首都网警重拳出击,犯罪分子无所遁形

    公元2024年2月24日18时许,笔者的个人网站突然遭遇不明身份者的DDOS攻击,且攻击流量已超过阿里云DDos基础防护的黑洞阈值,服务器的所有公网访问已被屏蔽,由于之前早已通过Nginx屏蔽了所有国 ...

  9. 硬件开发笔记(十六):RK3568底板电路mipi摄像头接口原理图分析、mipi摄像头详解

    前言   本篇继续分析底板原理图mipi电路原理图.mipi摄像头输入硬件接口详解.   RK3568芯片摄像头接口   查看RK3568的芯片手册,摄像头接口并不支持直接sensor模拟信号输入,只 ...

  10. MVVM框架模式

    MVC框架模式 MVP框架模式 MVVM框架模式 MVVM模式即: 1.Model:数据层.网络数据操作,file文件操作,本地数据库操作: 2.View:视图层.布局加载,ui交互. 3.ViewM ...