FPGA语法

逻辑值:

0:逻辑低电平,条件为假。

1:逻辑高电平,条件为真。

z:高阻态,无驱动

x:未知逻辑电平,这既不是0也不是1,只是一个不稳定的状态。

关键字:

module:表示模块的开始,后边紧跟模块名,模块名一般跟.v文件一致,模块结束使用endmodule

输入输出信号:input输入、ouput输出、inout输入输出。

变量:

  • wire线网型变量:看作是直接的连接,在可综合逻辑中,被映射为真实的物理连线。
  • reg寄存器型变量:具有对某一时间点状态进行保持的功能,在可综合逻辑中,被映射为真实的物理寄存器。

参数:

  • parameter:在顶层文件可以通过实例化对这种类型参数进行修改。
  • localparam:只能在模块内部使用,不能实例化。

常量:

  • 格式:[换算为二进制后位宽的总长度]['][数值进制符号][与数值进制符号对应的数值],例如8'd171:位宽为8bit,十进制的171。[h]表示十六进制,[o]表示八进制,[b]表示二进制。[换算为二进制后位宽的总长度]可有可无,verilog会为常量自动匹配合适的位宽,总位宽大于实际位宽时,则自动左边补0,总位宽小于实际位宽,则自动截断左边超出的位数。

赋值方式 :

  • 阻塞赋值=:每条语句执行完后再执行下一条语句。
a = 1;
b = 2;
c = 3;
begin
a = b;
c = a;
end //结果
a = 2;
b = 2;
c = 2;
  • 非阻塞赋值<=:语句并行执行。
a = 1;
b = 2;
c = 3;
begin
a <= b;
c <= a;
end
a = 2;
b = 2;
c = 1;

always语句:在程序执行过程中一直在循环执行。括号内是敏感列表,下边表示sys_clk上升沿或者sys_rst_n下降沿到来时执行always语句。

always (posedge  sys_clk or negedge sys_rst_n)
if (sys_rst_n == l'b0)
cnt <= 8'd0; //初值为0
else if(cnt == CNT_MAX) //计数到最大参数时,就一直保持
cnt <= CNT_MAX;
else
cnt <= cnt + 8'd1; //否则就一直加1

assign语句:连续赋值语句。相当于一条连线,将表达式右边的电路直接通过wire(线)连接到左边,左边信号必须是wire型,当右边信号变化了左边立刻发生变化。

 wire a, b, y;
assign y = a & b;

综合结果图:

算数运算符

+,-,*,/,%。

归约运算符、按位运算符

  • &作为一元运算符时,表示归约运算符,&m表示将m中所有的bit相与,最后结果为1bit。

    • &4'b1111=1&1&1&1=1'b1
  • 作为二元运算符时,表示按位与,与C语言一样。

逻辑运算符

&&、||、==、!=,与C语言一样。

关系运算符

<、>、<=、>=。跟C语言一样。

移位运算符

左移符号<<,右移符号>>。跟C语言一样。

位拼接运算符:8bit的a,3bit的b,5bit的c按顺序拼接成一个16bit的d,表示方法为:d={a,b,c};

条件运算符:其实就是C语言的三目运算符。

优先级:归约运算符> 算术运算符>移位运算符>关系运算符> “==” 和“!=” > 按位运算符 > “&&” 和"||" > 条件运算符。总的来说是一元运算符>二元运算符>三元运算符。不行就加()。

if-else条件分支语句:跟C语言一样

case分支控制语句:跟C语言一样

系统函数:****(先知道有这些函数,具体用的时候再搜)

预先定义了一些任务和函数,用于完成一些特殊的功能,它们被称为系统任务和系统函数,大多在Testbench仿真中使用,使我们更方便的进行验证。

timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度

时间单位和时间精度由1、10和100以及单位s、ms、us、ns、ps和fs组成。

时间单位:定义仿真过程中所有与事件相关量的单位。

仿真中使用#数字表示延时响应时间单位的时间,例#10表示延时10个单位的时间,即10ns。

时间精度:决定时间相关量的精度及仿真显示的最小刻度。

timescale 1ns/10ps 精度0.01,#10.11表示延时10110ps。就是10.11ns=10110ps

下面这种写法就是错误的,因为时间单位不能比时间精度小。

timescale 100ps/1ns。

$display函数:打印、输出,自动输出换行

$display("%b+%b=%d",a,b,c);//%b、%d、%o、%h分别是二进制,十进制,八进制和十六进制。

$write函数:打印、输出、不能自动输出换行

$strobe函数:打印、输出、但是只能在最后输出。

$monitor函数:用于持续监测变量,监测的变量发生变化,它就执行一次。

$stop$finish,暂停仿真、结束仿真。

$time时间函数,返回64位当前仿真时间;$random用于产生随机函数,返回随机数。

$readmemb用于读二进制文件函数,$readmemh用于读十六进制文件函数。

Verilog语法基础的更多相关文章

  1. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

  2. FPGA学习笔记(一)Verilog语法基础

    一.变量类型 ①数值 数值表示采用 <二进制位数>'<数值表示的进制><数值>的结构. 其中进制可以为b.o.d.h分别代表二.八.十.十六进制. 例如22'd0代 ...

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

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

  4. JAVA 入门第一章(语法基础)

    本人初学java 博客分享记录一下自己的学习历程 java我的初步学习分为六章,有c和c++的基础学起来也简便了很多. 第一章 语法基础 第二章 面向对象 第三章 常用工具类 第四章 文件操纵 第五章 ...

  5. python基础入门一(语法基础)

    作为自己正式接触并应用的第一门编程语言,在Alex和武sir两位大王的要求下,开始了写博客总结的日子.学习编程语言是很有趣的一件事情,但有2点请一定要谨记:1.做人靠自己,码代码也必须靠自己.能不能成 ...

  6. PHP语法基础

    1.PHP语法基础 PHP标记符 <?php ?> 常亮与变量 $a = 10; 变量 可以在运行过程中修改 $a = 10; $a = 20; $b = 5; echo $a+$b; c ...

  7. C#语法基础和面向对象编程

    1.C#语法基础 http://www.cnblogs.com/tonney/archive/2011/03/16/1986456.html 2.C#与面向对象基础 很棒的资源,简明扼要,介绍的非常清 ...

  8. Lua脚本之语法基础快速入门

    要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句 ...

  9. Javascript语法基础

    Javascript语法基础   一.基本数据类型   JavaScript中支持数字.字符串和布尔值三种基本数据类型: 1.数字 数字型是JavaScript中的基本数据类型.在JavaScript ...

  10. LinQ 语法基础

    LINQ (Language-Integrated Query,语言集成查询). LINQ to Objects.LINQ to SQL.LINQ to DataSet和LINQ to XML,它们分 ...

随机推荐

  1. 2021-7-29 MySql多表查询详解

    多表连接 左连接:返回第一张表的所有数据项然后拼接第二张表(左表全有,右表对应左表才有) 右连接:返回第二张表的所有数据项然后拼接第一张表(右表全有,左表对应右表才有) 内连接:返回两张表数据相等的数 ...

  2. Redis从入门到放弃(5):事务

    1.事务的定义 Redis的事务提供了一种"将多个命令打包, 然后一次性.按顺序地执行"的机制. redis事务的主要作用就是串联多个命令防止别的命令插队. 但是,事务并不具有传统 ...

  3. Linux中对管道命令中的任意子命令进行返回码校验

    ~~ linux return code with pipeline~~ ~~ linux 管道命令中的返回码~~ BASH SHELL中,通常使用 $? 来获取上一条命令的返回码. Shell Sc ...

  4. C#中多线程的用法

    1.在C#中使用多线程可以使用Thread 代码例子: public class ThreadExample { public static void ThreadProc() { for (int ...

  5. 《SQL与数据库基础》20. 主从复制

    目录 主从复制 原理 搭建 主库配置 从库配置 测试 本文以 MySQL 为例 主从复制 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执 ...

  6. 如何分析 JVM 内存瓶颈浅谈

    背景: 当操作系统内存出现瓶颈时,我们便会重点排查那个应用占用内存过大.对于更深一步分析内存的使用,就进一步去了解内存结构,应用程序使用情况,以及内存如何分配.如何回收,这样你才能更好地确定内存的问题 ...

  7. 初识Storm之HelloWorld程序源码

    1. 新建一个Maven项目,pom.xml代码如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  8. Kafka Stream 处理器API

    6.1章节内容 了解如何使用处理器API对以下场景进行处理 ①以有规律的间隔定期执行 ②将控制记录如何向下游发送 ③将记录转发给特定的子节点 ④创建Kafka Streams API中不存在的功能 6 ...

  9. 利用别名简化进入docker容器数据库的操作

    之前研究docker和数据库的交互,越发对docker这个东西喜爱了.因为平常偶尔会用到各类数据库测试环境验证一些想法,需要进一步简化进入到这些环境的步骤. 比如我现在有三套docker容器数据库测试 ...

  10. python判断ip所属地区 python 判断ip 网段

    IP地址是互联网中唯一标识一个设备的地址,有时候需要判断一个IP地址所属的地区,这就需要用到IP地址归属查询.本文将介绍Python如何通过IP地址查询所属地区并展示代码. 一. IP地址归属查询 I ...