可综合语句与不可综合语句

\qquad 我们知道Verilog HDL具有很强的电路描述和建模能力,能从多个层次对数字系统进行描述和建模,它是建立在硬件电路的基础上的。因此可综合语句指的是可以通过综合工具映射为实际的电路的描述语句。
\qquad 我个人主要使用Altera/Intel平台的FPGA,下面主要以Quartus综合工具支持的可综合语句为例:

1.Data Types 数据类型
\qquad 支持除real和realtime 以外的网和变量,可支持以下数据类型:
\qquad reg
\qquad integer
\qquad time
\qquad vectored
\qquad wire
\qquad tri
\qquad tri0
\qquad tri1
\qquad trior
\qquad triand
\qquad wor
\qquad wand
\qquad supply0
\qquad supply1
\qquad parameter
\qquad localparameter
\qquad 对于逻辑强度声明语句,包括驱动强度(strong0,strong1,pull0,pull1,weak0,weak1,highz0,highz1)、电荷储存强度(large,medium,small)声明语句则会被综合工具会忽略,不会综合成实际电路。

2.Expressions 表达式
\qquad 操作符:
\qquad 算术法运算符:+(加)、- (减)、*(乘)、/(除)、%(取余)、**(幂)
\qquad 关系运算符:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、==(等于)、!=(不等于)
\qquad 赋值运算符:=(阻塞赋值)、<=(非阻塞赋值)
\qquad 逻辑运算符:&&(逻辑与)、||(逻辑或)、~((逻辑取反)、^ (逻辑异或)、 ~^(逻辑同或)
\qquad 位运算符:&(按位与)、|(按位或)、~(按位取反)、^(按位异或)
\qquad 移位操作符:>>(逻辑右移)、<<(逻辑左移)、<<<(算术左移)、>>>(算术右移)
\qquad 条件运算符:? :
\qquad 位拼接运算符:{ }
\qquad 支持位选择、内存寻址,但延时表达式会被忽略。

3.Gates and Switchs 门和开关
\qquad 支持and,nand,nor, or, xor, xnor,not,buf,bufif1, bufif0, notif1, notif0。
\qquad 不支持MOS/CMOS开关(nmos、pmos、rnmos、rpmos、cmos、rcmos)、双向开关(tran、tranif0、tranif1、rtran、rtanif0、rtanif1)、上拉/下拉源(pullup、pulldown)。
\qquad 可以看出Quartus对门级建模似乎不是特别友好,当然这也是大势所趋。

4.User Defined Primitives 用户自定义源语
\qquad 支持组合逻辑原语、电平敏感的顺序执行原语、边沿敏感的顺序执行原语

5.Behavioral Modeling 行为级建模
\qquad 支持阻塞赋值、非阻塞赋值,不支持连续赋值和中断连续赋值、强制赋值和释放强制赋值
\qquad 支持行为块(initial、always)、支持顺序执行块(begin……end)、不支持并行执行块(fork……join)

6.Task and Function 任务与函数
\qquad 支持Task、仅当函数内部变量为函数内部局部变量时支持。

7.Hierarchical Structures 多级结构
\qquad 支持模块(modules)、参数值(参数定义声明、模块实例化参数赋值)、端口。

8.Disable Statement 禁用声明
\qquad 支持禁用声明(disable)。

9.Specify Blocks 路径延时
\qquad 综合工具会忽略路径延时声明。
\qquad 参照IEEE标准1364-2001的第14节 Specify Block

10.System Task and Function 系统任务和函数
\qquad 支持系统显示任务()、支持文件输入/输出任务(仅支持$readmemb、$readmemh)
\qquad 不支持时间尺度任务()、仿真控制任务()、时序检查任务()、PLA建模任务()、随机分析任务()、仿真时间任务()、实数转换函数()、随机分布函数()
\qquad 相关的系统任务和函数请参照IEEE标准1364-2001的第17节system task and function列出的相关函数列表。

11.Compiler Directives 预编译指令
\qquad 支持`define、`undef、`ifdef、`else、`endif、`incluce、`resetall、`unconnect_drive、`onunconnect_drive
\qquad 综合工具会忽略`timescale
\qquad 不支持`celldefine、 `endcelldefine
\qquad 具体可对照IEEE标准1364-2001的第19节Complier directives和Quartus的help文档。

\qquad 官网标准文档和综合工具帮助文档是最有力的学习资料,一定要好好利用,网上的资源质量层次不齐,要学会分辨。对于Quartus综合工具支持的可综合语句可将Quartus帮助文档和IEEE标准1364-2001对照起来看,理解起来会更清晰。

参考文献
[1] IEEE Computer Society. Design Automation Standards Committee, Board I S . IEEE Standard Verilog Hardware Description Language[C], IEEE Std 1364-2001. IEEE, 2001.
[2] Intel. Intel® Quartus® Prime Pro Edition Help[EB/OL].2021-10-15.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值