FPGA中的那些关键字

        在学习FPGA的会遇到很多关键字,模块、语句、端口等等都需要它们去开启,这些关键字又该如何用、为什么用这些?

  一、综合与不可综合

Verilog硬件描述语言分为可可综合和不可综合语言。

        可综合:编写的verilog代码可以被综合器转化为相应的电路结构。

        不可综合:无法综合成实际的电路。虽然再描述数字硬件电路时一般用不到不过可以用它来仿真、验证。

在选择采用关键字时就要了解其可不可以进行综合。比如net类型的关键字很多,但是由于其综合性,我们只能选用wire;比如在用赋值语句时,initial语句只出现在仿真中。

二、含义

        关键字是verilog中预留的用于定义语言结构的特殊标识符,关键字全部为小写。常用的关键字有:module/endmodule/input/output/inout/wire/reg/parameter/always/assign/if/else/begin/end/case/endcase/posedge/negedge/or/default。

模块关键字:module...endmodule(模块是层次的基本单元。)

端口关键字:input/output/inout(I/O描述。)

        inout是双向端口,主要在处理总线数据时使用。在测试模块中不要定义端口。

线网关键字:wire/tri/wor/trior/wand/triand/tri0/tri1/supply0/supply1/vectored/scalared...

        综合工具只支持net类型中wire型,其他的net类型均不支持。

寄存器关键字:reg/integer/time/real/realtime...

        寄存器变量只能用过程赋值。整数(integer)类型的变量至少用32位,时间(time)类型变量至少用64位寄存器。

        Real/time/realtime 类型寄存器变量不可综合;

        在组合逻辑逻辑always块中,寄存器被综合成wire型,如果存在不完整赋值,则被综合成锁存器;在描述时序逻辑always块中,寄存器根据块内语句内容被综合成连线(wire)或者触发器。

        目前综合工具,整数被综合成32位,其值用二进制数表示,负数则用其二进制补码表示。

        根据所用的语句,寄存器数组会被综合成触发器吧或连线,而不会被综合成RAM或ROM的器件。

参数关键字:parameter/specparam/defparam

        specparam只能用在指定延时块中;defparam编译时可以重新定义参数值,如果时分层次命名参数,可以在设计层次内或外的任何地方重新定义参数,一般情况下是不可综合。

块语句关键字:多条语句组合成一组,使它们像一条语句一样。

        begin...end:在此语句块中顺序执行语句。

        fork...jion:将多个语句集中在一个块中,使其并发执行。(fork语句不可综合)

        if...else:判断条件是否符合(真假)进而决定执行何种操作。

        case/casex/casez...default/endcase;多支路选择语句。

循环语句关键字:简化代码编写、仿真激励设计。

        forever/disable:使一个或者一个以上语句无限循环执行。

        forever循环常用于产生周期性波形,用来作为仿真测试信号,不能独立写在程序中,必须要写在initial块中,常用disable来跳出循环。

repeat:把一个或多个声明语句重复执行指定的次数。

       只有部分工具可以综合只有当该循环的每一个循环分支都被时钟事件,如被@(posedge clock),所中断才能被综合成电路。

        while:只要控制表达式为真(及不为0),循环语句就重复进行。

        只有当循环块有事件控制(即@(posedge clock))才可以综合。

        for:一般用途的循环语句。允许一条或更多的语句能被重复执行。

        如果春循环的边界是固定的,那么在综合时该循环语句被认为是重复的硬件结构。

任务定义关键字:task...endtask

        包含定时控制语句的任务是不可综合的。启动的任务往往被综合成组合逻辑。

函数定义关键字:把多个语句组合在一起,来定义新的数学或逻辑函数。

        Function...endfunction:函数的每一次调用都被综合为一个独立的组合逻辑电路块。

等待语句关键字:@、#、wait

        分别是事件等待语句,直接时间等待语句,表达式等待语句。

赋值语句关键字:

        assign:连续赋值语句是针对线网变量的一种赋值语句,是一种描述组合逻辑的语句。

        initial:在仿真开始就执行并只资信一次的声明语句,可执行只包含一条或者多条语句的块。(不可综合)

        always、posedge、engedge:always程序块会不断地、循环德地执行。Initial主要负责模块初始化功能,always程序块主要负责模块的功能描述。

多输入门关键字:and/nand/nor/or/xor/xnor

        这些逻辑门只能有一个输出端口,可以有多个输入端口,其中输出端口是第一个端口。

多输出门关键字:buf/not

        这些逻辑门只能有一个输入端口,可以有多个输出端口,其中输入端口是最后一个端口。

三态门关键字:buff1/buff0/notif1/notif0

        他们有三个端口,第一个端口是数据输出端口,第二个是数据输入端口、第三个是控制输入端口。

上拉电阻和下拉电阻关键字:pullup/pulldown

         这类门设备没有输入只有输出,上拉电阻输出置为1;下拉电阻将输出置为0。

MOS开关关键字:cmos/pmos/nmos/rcmos/rpmos/rnmos

        这类门用来为单向开关建模,即数据从输入流向输出,并且可以通过设置合适的控制输入关闭数据流。

驱动强度关键字:

        supply0/suppy1/weak0/weak1/pull0/pull1/highz0/high1/strong0/strong1/large/small/medium

        信号强度(从弱到强)及其属性:1.supply:驱动;2.strong;驱动;3.pull:驱动;4.large:存储;5.weak:驱动;6.medium:存储;7.small:存储;8.highz:高阻态。

本文章是在本人学习时的归纳与记录,如有侵权立即删除。

  • 26
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值