0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

verilog可综合的语法子集

FPGA学习笔记 来源:FPGA学习笔记 作者:FPGA学习笔记 2023-07-23 12:25 次阅读

可综合的语法是指硬件能够实现的一些语法,这些语法能够被EDA工具支持,能够通过编译最终生成用于烧录到FPGA器件中的配置数据流。

一、模块声明类语法:module...endmodule

每个verilog文件中都会出现模块声明类语法,它是一个固定的用法,所有的功能实现都应该包含在...之中。示例如下:

module my_first_prj(<端口信号列表>...)

<逻辑代码>...

endmodule

二、端口声明:input,output,inout

每一个module都会有输入/输出的信号用于和外部器件或其它module通信衔接。对于本地module而言,这些信号可以归为三类,即输入(input)信号、输出(output)信号和双向(inout)信号。示例如下:

input sys_clk;

input wite rst_n;

input[7:0] data_in;

三、参数定义:parameter

Parameter用于申明一些常量,主要是便于模块的移植或升级时的修改。示例如下:

module<模块命名>(<端口命名1>,<端口命名2>,...);

//输入端口申明

input<端口命名1>;

input wire<端口命名2>;

input[<最高位>:<最低位>]<端口命名3>;

...

//输出端口申明

output<端口命名4>;

output[<最高位>:<最低位>]<端口命名5>;

output reg[<最高位>:<最低位>]<端口命名6>;

...

//参数定义

parameter<参数命名1>=<默认值1>;

parameter[<最高位>:<最低位>]<参数命名2>=<默认值2>;

...

//具体功能逻辑代码

...

endmodule

四、信号类型:wite,reg等

在下图所示的简单电路中,分别定义两个寄存器(reg)锁存当前的输入din。每个时钟clk上升沿到来时,reg都会锁存到新的输入数据,而wire就是这两个reg之间直接的连线。 //图 作为input或inout的信号端口只能是wire型,而作为output的信号端口则可以是wire或reg。示例如下:

//定义一个wire信号

wire;变量名>

//给一个定义的wire信号直接连接赋值

//该定义等同于分别定义一个wire信号和使用assign语句进行赋值

wire=<常量或变量赋值>;变量名>

//定义一个多bit的wire信号

wire[<最高位>:<最低位>];变量名>

//定义一个reg信号

reg;变量名>

//定义一个赋初值的reg信号

reg=<初始值>;变量名>

//定义一个多bit的reg信号

reg[<最高位>:<最低位>];变量名>

//定义一个赋初值的多bit的reg信号

reg[<最高位>:<最低位>]=<初始值>;变量名>

//定义一个二维的多bit的reg信号

reg[<最高位>:<最低位>][<最高位>:<最低位>];变量名>

多语句定义:begin...end

//含有命名的begin语句

begin:<块名>

//可选申明部分

//具体逻辑

end

//基本的begin语句

begin

//可选申明部分

//具体逻辑

end

五、比较判断:if...else,case...default...endcase

示例如下:

//if判断语句

if(<判断条件>)

begin

//具体逻辑

end

//if...else判断语句

if(<判断条件>)

begin

//具体逻辑1

end

else

begin

//具体逻辑2

end

//if...else if ...else判断语句

if(<判断条件1>)

begin

//具体逻辑1

end

else if(<判断条件2>)

begin

//具体逻辑2

end

else

begin

//具体逻辑3

end

//case语句

case(<判断变量>);

<取值1>:<具体逻辑1>

<取值2>:<具体逻辑2>

<取值3>:<具体逻辑3>

default:<具体逻辑4>

endcase

六、循环语句:for

使用较少,示例如下:

//for语句

for(<变量名>=<初值>;<判断表达式>;<变量名>=<新值>)

begin

//具体逻辑

end

七、任务定义:task...endtask

task类似于C的子函数,可以有input、output和inout端口作为输入口参数,可以用来实现单时序控制,无返回值,不可用于表达式之中。示例如下:

task;命名>

//可选申明部分,如本地变量申明

begin

//具体逻辑

end

endtask

八、连续赋值:assign,问号表达式(?:)

Assign用于直接互连不同的信号或者直接给wire变量赋值。其基本用法如下: assign=<变量或常量>;变量名> ?:表达式就是简单的if...else语句,示例如下:

(判断条件)?(判断条件为真时的逻辑处理):(判断条件为假时的逻辑处理)

九、always模块

敏感表可以为电平、沿信号posedge/negedge,通常和@连用。组合逻辑的用法如下:

always@(*)

begin

//具体逻辑

end

always之后若有沿信号(上升沿posedge,下降沿negedge)申明,则多为时序逻辑,用法如下:

//单个沿触发的时序逻辑

always@(<沿变化>)

begin

//具体逻辑

end

always@(<沿变化1> or <沿变化2>)

begin

//具体逻辑

end

十、运算操作符

包括逻辑操作符、移位操作符、算术操作符大多可以进行综合,列表如下:

+ //加

- //减 ! //逻辑非 ~ //取反 & //与 ~& //与非 | //或 ~| //或非 ^ //异或 ^~ //同或 ~^ //同或

* //乘,是否可综合看综合工具 / //除,是否可综合看综合工具 % //取模 << //逻辑左移

>> //逻辑右移 < //小于 <= //小于等于 < //大于 = //大于等于 == //逻辑相等 != //逻辑不相等 && //逻辑与 || //逻辑或

十一、赋值符号:=和<=

分别为阻塞赋值和非阻塞赋值,后续博客详细介绍。

以上便是Verilog基础语法,在RTL设计中,需要掌握。


审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21329

    浏览量

    593299
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109313
  • RTL
    RTL
    +关注

    关注

    1

    文章

    377

    浏览量

    59077
  • 编译
    +关注

    关注

    0

    文章

    615

    浏览量

    32397
收藏 人收藏

    评论

    相关推荐

    综合Verilog语法和语义(剑桥大学,影印)

    综合Verilog语法和语义(剑桥大学,影印)
    发表于 08-06 13:03

    verilog HDL 综合模型的结构

    语句在用综合工具综合时将被忽略或者报错。作为设计者,应该对综合模型的结构有所了解。 虽然不同的综合工具对
    发表于 10-20 08:10

    Verilog综合子集

    Verilog综合子集
    发表于 04-01 12:44

    FPGA入门:Verilog/VHDL语法学习的经验之谈

    10来条基本语法就可以打天下了,怎么样?HDL语言一下变简单了吧。这么说一点不夸张,本书的重点就是要通过各种实现到板级的例程让大家快速的掌握如何使用综合
    发表于 01-29 09:20

    FPGA实战演练逻辑篇36:综合语法子集1

    综合语法子集1本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》配套例程下载链接:http://pan.baidu.com/s/1pJ5bCtt 所谓
    发表于 06-12 10:59

    FPGA实战演练逻辑篇37:综合语法子集2

    综合语法子集2本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》配套例程下载链接:http://pan.baidu.com/s/1pJ5bCtt(1) 参数定义:parameter
    发表于 06-15 14:57

    FPGA实战演练逻辑篇38:综合语法子集3

    综合语法子集3本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》配套例程下载链接:http://pan.baidu.com/s/1pJ5bCtt(1) 多语句定义:begin…end
    发表于 06-17 11:53

    勇敢的芯伴你玩转Altera FPGA连载30:综合语法子集1

    `勇敢的芯伴你玩转Altera FPGA连载30:综合语法子集1特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1i5LMUUD 所谓
    发表于 12-06 19:50

    勇敢的芯伴你玩转Altera FPGA连载31:综合语法子集2

    ` 本帖最后由 rousong1989 于 2017-12-12 20:46 编辑 勇敢的芯伴你玩转Altera FPGA连载31:综合语法子集2特权同学,版权所有配套例程和更多资料下载链接
    发表于 12-12 20:43

    勇敢的芯伴你玩转Altera FPGA连载32:综合语法子集3

    `勇敢的芯伴你玩转Altera FPGA连载32:综合语法子集3特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1i5LMUUD 多语句定义
    发表于 12-14 19:53

    勇敢的芯伴你玩转Altera FPGA连载33:综合语法子集4

    `勇敢的芯伴你玩转Altera FPGA连载33:综合语法子集4特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1i5LMUUD 连续赋值
    发表于 12-19 21:36

    综合Verilog语法和语义

    综合Verilog语法和语义(剑桥大学,影印):第七版
    发表于 05-21 14:50 27次下载
    可<b class='flag-5'>综合</b>的<b class='flag-5'>Verilog</b><b class='flag-5'>语法</b>和语义

    综合Verilog语法和语义详细资料说明

    可合成VerilogVerilog HDL的一个子集,它位于当前合成工具(RTL和行为)的领域内。本文档指定了Verilog的一个子集V0
    发表于 01-21 16:30 9次下载
    可<b class='flag-5'>综合</b>的<b class='flag-5'>Verilog</b><b class='flag-5'>语法</b>和语义详细资料说明

    综合Verilog语法和语义的资料合集免费下载

    开发所有可综合Verilog的语义所选择的方法是从过于简单的{V0{开始,然后在简单的语义中断时使其更加复杂。这样可以避免不必要的复杂性。计划对越来越大的子集(V1、V2等)进行重新排序,这些
    发表于 02-05 16:24 14次下载
    可<b class='flag-5'>综合</b>的<b class='flag-5'>Verilog</b><b class='flag-5'>语法</b>和语义的资料合集免费下载

    Verilog HDL入门教程-Verilog HDL的基本语法

    Verilog HDL入门教程-Verilog HDL的基本语法
    发表于 01-07 09:23 161次下载