Vivado综合设计助手 - 帮助SystemVerilog进程支持

描述

此答复记录描述了Vivado Synthesis支持的SystemVerilog进程,并提供了它们的编码示例。这些编码示例附在此答复记录中。答案记录还包含与已知问题和良好编码实践相关的信息。

注意:每个编码示例都可用于直接创建Vivado项目。请参阅每个源文件中的标题,以获取每个示例中演示的SystemVerilog结构。

SystemVerilog Vivado Synthesis支持的进程

有关流程的编码示例,请参阅本答复记录末尾的表1-1

1.始终程序

Verilog-2001有一个始终声明,用于定义静态过程。 System Verilog为组合,锁存和顺序逻辑添加了专用模块。

Vivado Synthesis支持以下四个始终处理语句:

1.1。总是
该块具有与Verilog-2001标准中定义的语法和用法相同的语法和用法,而Vivado Synthesis没有任何单独的例外。

1.2。 always_comb
该块仅在System Verilog中定义,并且是用于对组合逻辑行为进行建模的过程。例如:
always_comb
a = b&c;

always_comb过程提供的功能与普通的always过程不同:
有一个推断的敏感性列表,包括表达式。
写在作业左侧的变量不应由任何其他过程写入。
在所有初始块和始终块已经开始之后,在零时刻自动触发该过程,以便过程的输出与输入一致。

1.3。 always_latch
该块仅在System Verilog中定义,并且是用于建模锁存逻辑行为的过程。例如:
always_latch
if(ck)q <= d;
always_latch过程确定其灵敏度并且与always_comb过程完全相同。

1.4。 always_ff
该块仅在System Verilog中定义,并且是可用于对可综合的顺序逻辑行为进行建模的过程。例如:
always_ff @(posedge clock或posedge reset)开始
r1 <=重置? 0:r2 + 1;
...
结束

2.阻止声明

System Verilog Block语句提供了一种将语句集合在一起的机制。命名块用于标识整个语句块。命名块会创建新的层次结构范围。该块可以声明自己的变量,这些变量特定于该块。 SystemVerilog允许在块的结束语句前面加冒号后指定匹配的块名称。当有嵌套块时,这可以帮助记录与相应的begin或fork相关联的“end”。
Vivado Synthesis支持使用块语句。

句法:
seq_block :: =
begin [:block_identifier] {block_item_declaration} {statement_or_null}
结束[:block_identifier]

例:
开始:my_block
逻辑温度;
temp = in1&in2;
out1 = temp;
结束:my_block

注意:结束语句后的块名称不是必需的,但它提高了代码的可读性。
Vivado综合不受支持:Vivado Synthesis不支持System Verilog并行块(或Fork.Join块)。

3.程序时间控制。


Vivado Synthesis支持系统Verilog标准中定义的程序时序控制:

3.1。延迟控制
句法:
delay_control :: =
#delay_value

例:
#10 q = p;

此构造指定语句与其执行之间的时间量。这对于综合没有用,Vivado综合忽略了时间语句,同时仍然为赋值创建逻辑。

3.2。事件控制
句法:
event_control :: =
@(event_expression)
| @ *
| @(*)

例:
永远@(posedge clk)

此构造使赋值与特定事件一起发生。这与Verilog相同,Vivado Synthesis支持System Verilog @ *事件控制,可消除由于不正确的灵敏度列表导致的仿真不匹配。

例:
逻辑总是@ *开始

此外,Vivado综合支持使用逻辑“或”运算符或逗号分隔灵敏度列表。

例:
总是@(a或b或c)
总是@(A,B,C)

进程的编码示例

表1-1

编码示例名称流程构造

processes_example1.zip

  • 总是程序块
  • always_ff程序块
  • 运营商:&
  • 程序性时间控制

processes_example2.zip

  • always_comb程序块
  • always_ff程序块
  • 运营商:&

processes_example3.zip

  • always_comb程序块
  • operator:==
  • 块声明
processes_example4.zip
  • always_ff程序块
processes_example5.zip
  • always_ff程序块
  • 运算符:++
processes_example6.zip
  • always_latch程序块
processes_example7.zip
  • 块声明
  • 运营商:&
processes_example8.zip
  • 事件控制:@(*),@(a或b)
  • 延迟控制:#delay
  • 运营商:&

附件

相关附件

名称文件大小文件类型
processes_example1.zip 934字节压缩
processes_example2.zip 960字节压缩
processes_example3.zip 956字节压缩
processes_example4.zip 898字节压缩
processes_example5.zip 921字节压缩
processes_example6.zip 912字节压缩
processes_example7.zip 924字节压缩
processes_example8.zip 1 KB 压缩
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-31 13:16:04 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它