首页 > 其他分享 >Verilog语法基础

Verilog语法基础

时间:2023-06-19 21:46:03浏览次数:64  
标签:语句 运算符 函数 仿真 基础 C语言 语法 sys Verilog

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;

综合结果图:

image

算数运算符

+,-,*,/,%。

归约运算符、按位运算符

  • &作为一元运算符时,表示归约运算符,&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用于读十六进制文件函数。

标签:语句,运算符,函数,仿真,基础,C语言,语法,sys,Verilog
From: https://www.cnblogs.com/ZhengLijie/p/17492273.html

相关文章

  • MySQL入门基础知识
    1MySQL基础1.1常用命令启动服务:netstart服务名停止服务:netstop服务名启动MySQL服务器:MySQL【-h主机名-P端口号】-u用户名-p密码查看MySQL版本:MySQL--version或MySQL–V或登录到MySQL服务端使用selectversion();1.2语法规范每条命令最好用分号结尾每条......
  • MySQL DQL语法汇总
    1数据准备1.1建表语句创建四个表:地址表、部门表、职位表和员工表:CREATETABLE`locations`(`location_id`INTNOTNULLAUTO_INCREMENT,`street_address`VARCHAR(40)DEFAULTNULL,`postal_code`VARCHAR(12)DEFAULTNULL,`city`VARCHAR(30)DEFAULTNULL,......
  • python基础 | python中为什么没有自增运算符?
    学过Java或者C语言的同学在使用python时发现之前很方便的自增运算在python中无法使用,要想弄清楚这个问题,首先需要明白什么是自增运算符?自增运算符:自增运算符的作用是在运算结束前将变量的值加1。自增运算符一般存在于C/C++/C#/Java等高级语言中。自增运算是在该数字原来的内存地......
  • docker基础
    docker: 开源的应用容器引擎.可以给应用和应用需要的环境移植到linux机器上.版本:CE社区版本 EE企业版本,收费的安装docket//1.yum包更新到最新版本yumupdate//2.安装需要的软件包,yum-utils提供yum-config-manager功能,另外2个是devicemapper驱动功能yumin......
  • SQL常用语法
    1.新建数据库--1.1新建数据库createdatabase库名on(--指定数据库名name='库名',--指定路径以及文件后缀filename='C:\库名.mdf',--指定数据库初始容量size=3MB,--指定数据库最大容量maxsize=50MB,--指定数据库自动增长容量filegrowth=1MB)-- 1.2新建数据库日志logon(--......
  • 一些计算机基础知识的考试复习题
    2013Excel里用AND在开头连接多个条件。立即寻址访问速度最快。直接寻址方式下,操作数在内存中,指令中给出操作数的地址,需要再访问一次内存来得到操作数。立即寻址方式下,操作数在指令中,所以在取得指令时就得到操作数,是速度最快的。寄存器寻址方式下,操作数在CPU的寄存器......
  • Git基础、Git指针、Git分支、Git标签
    什么是Git:它是一个分布式版本控制系统,支持断网操作,每个开发者都是一个仓库的完整克隆,每个人都是服务器         为什么要使用Git:它可以有效、高速的处理从很小到非常大的项目版本控制1.Git安装:   yum-yinstallgit  #使用yum安装Git           ......
  • 光学成像系统基础 (一)
    基础物理概念辐射学与色度学对比一、辐射学1.辐射通量辐射通量又称辐射功率,指单位时间内通过某一截面的辐射能,是以辐射形式发射、传播或接收的功率,单位为W(瓦),即1W=J/s(焦耳每秒)。它也是辐射能随时间的变化率Φ=dQ/dt。测量辐射通量的方法一般是由直流电置换辐射通量的等价置换......
  • 网安研发之初识抽象语法树
    原文合集地址如下,有需要的朋友可以关注本文地址合集地址认识抽象语法树什么是抽象语法树抽象语法树(AbstractSyntaxTree,简称AST)是计算机科学中一种用于表示程序源代码结构的树状数据结构。它是源代码经过词法分析和语法分析之后生成的一种中间表示形式。AST以树的形式表示程序的语......
  • 数据库信息速递 数据库基础设施已经不在青睐 ETL (译)
    。企业是7天24小时运营的。这包括从网站、后勤办公、供应链到其他所有方面。曾经,一切都是分批次进行的。就在几年前,操作系统会暂停,以便将数据加载到数据仓库并运行报告。现在的报告关注的是事情当前的状况。已没有时间进行ETL。许多IT架构仍然基于中心轮辐式系统。操作系统向数据仓......