0.前

抽象模型分级:

• 系统级(system):用高级语言结构实现设计模块的外部性能的模型。
• 算法级(algorithm):用高级语言结构实现设计算法的模型。
• RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型。
• 门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。
• 开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。

1.最基本的数据类型

reg型、wire型、integer型、parameter型

在数字电路中,x代表不定值,z代表高阻值。

一个数字可以被定义为负数,只需在位宽表达式前加一个减号,减号必须写在数字定义表达式的最前面。

在一个模块中改变另一个模块的参数时,需要使用defparam命令。

wire型数据常用来表示用于以assign关键字指定的组合逻辑信号。

reg型数据常用来表示用于“always”模块内的指定信号,常代表触发器。

reg型数据的缺省初始值是不定值。

memory型数据是通过扩展reg型数据的地址范围来生成的。举例说明:
  reg [n-1:0] mema[m-1:0];
这个例子定义了一个名为mema的存储器,该存储器有m个n位的存储器。

注意:对存储器进行地址索引的表达式必须是常数表达式。

对memory中的存储单元进行读写操作,必须指定该单元在存储器中的地址。下面的写法是正确的:
  mema[3]=0; //给memory中的第3个存储单元赋值为0。

2.运算符及表达式

1) 算术运算符(+,-,×,/,%)
2) 赋值运算符(=,<=)
3) 关系运算符(>,<,>=,<=)
4) 逻辑运算符(&&,||,!)
5) 条件运算符(?:)
6) 位运算符(~,|,^,&,^~):
  a) ~ //取反
  b) & //按位与
  c) | //按位或
  d) ^ //按位异或
  e) ^~ //按位同或(异或非)
7) 移位运算符(<<,>>)
8) 拼接运算符({ })
9) 其它:
  缩减运算符(reduction operator):例如:
    reg [3:0] B;
    reg C;
    C = &B;
    相当于:
    C =( (B[0]&B[1]) & B[2] ) & B[3];

3.关键词

4.赋值语句和块语句

1)赋值语句

在Verilog HDL语言中,信号有两种赋值方式:
  (1).非阻塞(Non_Blocking)赋值方式( 如 b <= a; )
    1) 块结束后才完成赋值操作。
    2) b的值并不是立刻就改变的。
    3) 这是一种比较常用的赋值方法。(特别在编写可综合模块时)
  (2).阻塞(Blocking)赋值方式( 如 b = a; )
    1) 赋值语句执行完后,块才结束。
    2) b的值在赋值语句执行完后立刻就改变的。
    3) 可能会产生意想不到的结果。

2)块语句
块语句通常用来将两条或多条语句组合在一起,使其在格式上看更象一条语句。块语句有两种,一种是begin_end语句,通常用来标识顺序执行的语句,用它来标识的块称为顺序块。一种是fork_join语句,通常用来标识并行执行的语句,用它来标识的块称为并行块。

  a)顺序块
  顺序块有以下特点:
    1) 块内的语句是按顺序执行的,即只有上面一条语句执行完后下面的语句才能执行。
    2) 每条语句的延迟时间是相对于前一条语句的仿真时间而言的。
    3) 直到最后一条语句执行完,程序流程控制才跳出该语句块。
  顺序块的格式如下:
  begin
    语句1;
    语句2;
    ......
    语句n;
  end

  b.并行块
  并行块有以下四个特点:
    1) 块内语句是同时执行的,即程序流程控制一进入到该并行块,块内语句则开始同时并行地执行。
    2) 块内每条语句的延迟时间是相对于程序流程控制进入到块内时的仿真时间的。
    3) 延迟时间是用来给赋值语句提供执行时序的。
    4) 当按时间时序排序在最后的语句执行完后或一个disable语句执行时,程序流程控制跳出该程序块。
  并行块的格式如下:
  fork
    语句1;
    语句2;
    .......
    语句n;
  join

5.条件语句

1)if_else语句
if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。
Verilog HDL语言提供了三种形式的if语句。
  (1).if(表达式)语句
  (2).if(表达式) 语句1
    else 语句2
  (3).if(表达式1) 语句1;
    else if(表达式2) 语句2;
    else if(表达式3) 语句3;
    ........
    else if(表达式m) 语句m;
    else 语句n;

若为0,x,z,按“假”处理,若为1,按“真”处理

2)case语句
case语句是一种多分支选择语句,if语句只有两个分支可供选择,而实际问题中常常需要用到多分支选择,Verilog语言提供的case语句直接处理多分支选择。case语句通常用于微处理器的指令译码,它的一般形式如下:
  1) case(表达式) <case分支项> endcase
  2) casez(表达式) <case分支项> endcase
  3) casex(表达式) <case分支项> endcase
  case分支项的一般格式如下:
    分支表达式: 语句
    缺省项(default项): 语句
其中casez语句用来处理不考虑高阻值z的比较过程,casex语句则将高阻值z和不定值都视为不必关心的情况。

由于使用条件语句不当在设计中生成了原本没想到有的锁存器:如果用到if语句,最好写上else项。如果用case语句,最好写上default项。遵循上面两条原则,就可以避免发生这种错误,使设计者更加明确设计目标,同时也增强了Verilog程序的可读性。

6.循环语句

四种类型的循环语句,用来控制执行语句的执行次数。
  1) forever 连续的执行语句。
  2) repeat 连续执行一条语句 n 次。
  3) while 执行一条语句直到某个条件不满足。如果一开始条件即不满足(为假),则语句一次也不能被执行。
  4) for通过以下三个步骤来决定语句的循环执行。
    a) 先给控制循环次数的变量赋初值。
    b) 判定控制循环的表达式的值,如为假则跳出循环语句,如为真则执行指定的语句后,转到第三步。
    c) 执行一条赋值语句来修正控制循环变量次数的变量的值,然后返回第二步。

7.结构说明语句
Verilog语言中的任何过程模块都从属于以下四种结构的说明语句。
  1) initial说明语句
  2) always说明语句
  3) task说明语句
  4) function说明语句

8.编译预处理

1)宏定义 `define
  用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为:
    `define 标识符(宏名) 字符串(宏内容)

2)“文件包含”处理`include
  所谓“文件包含”处理是一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。Verilog   HDL语言提供了`include命令用来实现“文件包含”的操作。其一般形式为:
    `include “文件名”
  “文件包含”命令是很有用的,它可以节省程序设计人员的重复劳动。可以将一些常用的宏定义命令或任务(task)组成一个文件,然后用`include命令将这些宏定义包含到自己所写的源文件中,相当于工业上的标准元件拿来使用。

3)时间尺度 `timescale
  `timescale命令用来说明跟在该命令后的模块的时间单位和时间精度。`timescale 命令的格式如下:
      `timescale<时间单位>/<时间精度>
  在这条命令中,时间单位参量是用来定义模块中仿真时间和延迟时间的基准单位的。

4)条件编译命令`ifdef、`else、`endif
  条件编译命令有以下几种形式:
    1) `ifdef 宏名 (标识符)
        程序段1
      `else
        程序段2
      `endif
它的作用是当宏名已经被定义过(用`define命令定义),则对程序段1进行编译,程序段2将被忽略;否则编译程序段2,程序段1被忽略。
    2) `ifdef 宏名 (标识符)
        程序段1
      `endif

Verilog HDL的语法与C语言的语法有许多类似的地方,但也有许多不同的地方。

Verilog笔记.1.基本语法的更多相关文章

  1. python笔记之中缀语法和管道实现

    python笔记之中缀语法和管道实现 你知道什么是中缀语法吗?你知道python中的中缀操作是什么吗?那你知道操作python也是可以像unix的管道符一样方便吗?那么,废话不说了,直接上代码. cl ...

  2. django2笔记:路由path语法

    django2笔记:路由path语法 9月23,Django 发布了2.0a1版本,这是一个 feature freeze 版本,如果没有什么意外的话,2.0正式版不会再增加新的功能了.按照以往的规律 ...

  3. python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样

    python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样,IDLE shell编辑器,快捷键:ALT+p,上一个历史输入内容,ALT+n 下一个历史输入 ...

  4. Python:笔记(1)——基础语法

    Python:笔记(1)——基础语法 我很抱歉有半年没有在博客园写过笔记了,客观因素有一些,但主观原因居多,再多的谴责和批判也都于事无补,我们能做的就是重振旗鼓,继续出发! ——写在Python之前 ...

  5. C#快速入门笔记(1)——基础语法

    C#快速入门笔记(1)——基础语法 总体框架:

  6. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  7. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  8. Java学习笔记之---基础语法

    Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...

  9. CUBRID学习笔记 41 sql语法之select

    cubrid的中sql查询语法 SELECT [ ] [{TO | INTO} ][FROM ] [WHERE ][GROUP BY {col_name | expr} [ASC | DESC], . ...

随机推荐

  1. linux下面Zookeeper的单机模式(standalone)

    1.下载 zk下载地址 http://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 我用的是http://mirrors.tuna.tsinghua.e ...

  2. 【数据库】百万级数据库SQL优化大总结

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...

  3. 【Python】python操作mysql

    pymysql模块对mysql进行 import pymysql # 创建连接 conn = pymysql.connect(host=, user='root', passwd='root', db ...

  4. 【bzoj4372】烁烁的游戏 动态点分治+线段树

    题目描述 给一颗n个节点的树,边权均为1,初始点权均为0,m次操作:Q x:询问x的点权.M x d w:将树上与节点x距离不超过d的节点的点权均加上w. 输入 第一行两个正整数:n,m接下来的n-1 ...

  5. 【Java】常用POI生成Excel文档设置打印样式

    package poi_test; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi ...

  6. BZOJ3620 似乎在梦中见过的样子(kmp)

    不是很懂为什么数据范围要开的这么诡异,想到正解都不敢写.用类似NOI2014动物园的方法,对每个后缀求出类似next的数组即可. #include<iostream> #include&l ...

  7. CF1093F Vasya and Array DP

    题面 题面 \(\Delta\)题面有点问题,应该是数列中没有长度大于等于\(len\)的连续数字才是合法的. 题解 设\(f[i][j]\)表示DP到\(i\)位,以\(j\)为结尾的方案数, \( ...

  8. 聊聊flink的Async I/O

    // This example implements the asynchronous request and callback with Futures that have the // inter ...

  9. Eclipse开发Java代码,如何添加智能提示

    选择:Window->Preferences->JAVA->Editor->Context Assist 在Auto activation triggers for Java处 ...

  10. BZOJ5333 [Sdoi2018]荣誉称号 【差分 + 树形dp】

    题目链接 BZOJ5333 题解 看到式子,立即想到二叉树上一个点及其\(k\)个父亲权值和[如果有的话]模\(m\)意义下为\(0\) 考虑如何满足条件 我们假设\(1\)号为第\(0\)层 那么我 ...