再说System Verilog 与 Verilog 的关系

本文探讨了SystemVerilog与Verilog之间的关系,指出SystemVerilog是Verilog的扩展,特别是在2005年的IEEE标准1800-2005中。文章列举了两者的主要差异,包括always块的语法、变量类型和敏感列表的处理,并通过代码示例展示了如何从Verilog2005和1995版本过渡到SystemVerilog。此外,还提到了Verilog-1995与2005版本的区别,如模块头、事件列表和敏感列表的使用规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

System Verilog 与 Verilog 的关系

 

标准

当前的System Verilog标准是由IEEE(国际电子电气工程师协会)和Accellera(基于工业的标准协会)两个国际组织制定的,版本编号为3.1a,用以表明这个版本是Verilog语言的第3次重大改进。这个版本对System Verilog和Verilog两个标准都有一些修改。

IEEE标准1800-2005/IEC62530:2007

这个文件是语言参考手册(LRM),但其中只包含Verilog标准1364-2005的一些扩展的定义。为了得到System Verilog语法的全部定义,SV和V两种语言的参考手册(LRM)都是必需的。

IEEE标准1364-2005

这是最新版的Verilog标准,以前曾经有一个2001版本,但是修改的地方不多。

IEEE标准1364-1995

这是最原始的Verilog标准。绝大多数的开源工具只遵循这个原始标准。

IEEE标准1364.1-2002/IEC 62142-2005

这是Verilog RTL综合标准。这个文件定义了哪些是可综合的,哪些是不可综合的。它的基础是Verilog标准2001年版。

Accellera Verilog-AMS 2.3-2008

这个文件是描述模拟数字混合信号模型的Verilog-AMS语言标准。它的基础是Verilog标准2005年版。其中Verilog-A子集只包括连续时间元件。创建System Verilog-AMS是Accellera尚未完成的愿望。

System Verilog和Verilog之间的差别

System Verilog的基本语法中有一大部分继承自Verilog。而System Verilog语法集合中新添了一些语法条款,如断言、类和程序等。本节的宗旨是分析影响RTL硬件建模的两个Verilog版本有哪些不同,从而了解例子应如何修改才能用符合旧标准的仿真和综合工具。

Verilog 2005

下面的模块是用2005年版Verilog语言编写的红绿交通灯状态机。

module traffic_1_05 (output reg start_timer,
major_green, minor_green,
input reg clock, n_reset, timed,
car);
 reg state;
 parameter G=0, R=1
always @(posedge clock, negedge n_reset)
begin: SEQ
if (~n_reset)
 state <= G;
else
 case (state)
  G: if (car)
   state <= R;
  R: if (timed)
   state <= G;
 endcase
end

always @(*)
begin: OP
start_timer = 1'bO;
minor_green = 1'bO;
major_green = 1'bO;

case(state)
 G : begin
 major_green = 1'b1;
 if (car)
  start_timer = 1'bl;
 end
R: minor_green=1'bl;
endcase
end
endmodule

由于Verilog 2005 是System Verilog的子集,所以该模块可以用System Verilog编译器处理,不会出现语法错误。

该代码段与典型的SystemVerilog代码的主要不同点可罗列如下:

  • always_ff被always所替代。可论证用always_ff是冗余的,因为在这里这两种形式的描述是完全相同的。

  • always_comb被always@(*)所替代。敏感列表是一个通配符,其含义是该块所有输入的线网和变量都已自动地包括在内。

  • logic被reg所替代。在System Verilog中这两种变量的类型是可以互换的,但是logic清楚地声明变量是逻辑类型,而reg类型的变量则有可能被错误地理解为是一个寄存器。

  • 在Verilog中没有枚举类型。在Verilog中可以通过声明一个有足够多比特位的变量来保持所有这些状态,然后为每个状态设置一个参数值(parameter)来代替枚举类型的结构。在这段代码里只有两个状态,所以只需要定义一比特的状态变量就足够了。若把状态变量的类型定义为reg[l:0]则可以声明4个不同的状态。

  • 没有定义长度的位串(例如'0)是不允许的。必须明确指定位串的长度,例如1'b0.

  • 在System Verilog语言中,变量和线网的赋值没有什么区别。而在Verilog语言中,变量必须在过程块中赋值,而线网则必须并且只能在连续赋值语句中赋值。

Verilog1995

下面的代码段是用1995年版Verilog语言编写的红绿交通灯状态机。

module traffic_l_95 (start_timer , major_green,
minor_green, clock, n_reset,
timed, car);

output start_timer, major_green, minor_green;
input clock, n_reset, timed, car;

reg start_timer, major_green, minor_green;
reg state;
parameter G=0, R=l;

always @(posedge clock or negedge n_reset)
begin: SEQ
if (~n_reset)
 state <= G;
else
 case(state)
  G: if (car)
   state <= R;
  R : if (timed)
   state <= G;
 endcase
end

always @(timed or car or present_state)
begin:OP
start_timer = 1'bO;
minor_green = 1'bO;
major_green = 1'bO;

case (state)
 G: begin
  major_green = 1'b1;
  if (car)
   start_timer = l'bl;
 end
R: minor_green = 1'b1; 
endcase
end

endmodule

Verilog1995是Verilog2005的子集,更是System Verilog的子子集。换言之,System Verilog和Verilog-2005都是Verilog-1995的超集。

Verilog-1995与Verilog-2005主要的差别在于以下三点:

  • 不允许使用ANSI C风格的模块头。换言之,模块的声明的头语句中只能包括输入和输岀信号名。端口定义和变量类型必须用另一语句描述。在下面的语句中声明模块信号端口形式:input(输人端口),output(输岀端口),inout(双向端口)。最后,必须定义输出类型为reg默认的类型为wire,因此输岀信号需要分三条语句(信号名、端口、类型)定义。

  • 在敏感或者事件列表中,必须有关键字or,不能使用逗号。这个关键字or不是布尔值的逻辑或操作,而是事件的或。

  • 在敏感列表中,不允许使用通配符。必须列出组合过程中的每个输入。“输入”包括赋值等号右侧的每一个信号,或者在if和case条件分支语句中,判断后有可能执行行的每个分支。这里很可能发生错误。若漏写了某个输人,仿真在运行时不一定能发现这个问题,但综合器很可能“纠正”这个错误。因此,很可能出现综合和仿真不一致的情况。

f14278f92dc4335551978cb5804e0c72.gif

NOW

学习Xilinx FPGA最好的资料其实就是官方手册,下表总结了部分手册的主要介绍内容,关注我,持续更新中......

文件名主标题内容简单介绍是否有中文版
UG4767 Series FPGAs GTX/GTH  TransceiversGTX和GTH介绍,PCIe、serdes等学习必备
UG4717 Series FPGAs SelectIO Resources描述 7 系列 FPGA 中可用的 SelectIO资源。
UG1114PetaLinux Tools DocumentatonPetaLinux 工具文档 参考指南是,V2019.2
UG949UltraFAST 设计方法指南(适用于 Vivado  Design Suite)赛灵思® UltraFast™  设计方法是用于为当今器件优化设计进程的一套最佳实践。这些设计的规模与复杂性需要执行特定的步骤与设计任务,从而确保设计每一个阶段的成功开展。依照这些步骤,并遵循最佳实践,将帮助您以最快的速度和最高的效率实现期望的设计目标是,V2018.1
IP手册pg057FIFO GeneratorFIFO生成器IP使用手册
pg104Complex Multiplier复数乘法器IP使用手册
pg122RAM-Based Shift Register 移位寄存器IP使用手册

a4b9850451ad158146834b8a33c1cfec.png

推荐阅读

【Vivado那些事】如何查找官网例程及如何使用官网例程

【Vivado使用误区与进阶】总结篇

【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键

SystemVerilog数字系统设计_夏宇闻 PDF

图书推荐|ARM Cortex-M0 全可编程SoC原理及实现

简谈:如何学习FPGA

1202年了,还在使用虚拟机吗?Win10安装Ubuntu子系统及图形化界面详细教程

Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目

AD936x+ZYNQ搭建收音机(一)

AD936x+ZYNQ搭建OpenWIFI

无招胜有招-Vivado非工程模式下的详细设计

追寻ARM的起源-Acorn电脑简史及FPGA实现

面试中经常会遇到的FPGA基本概念,你会几个?

Xilinx FPGA MIPI 接口简单说明

介绍一些新手入门FPGA的优秀网站

Vivado ML(机器学习) 2021尝鲜

推荐一些可以获取免费的国外的原版书籍(电子版)网站

【Vivado那些事】FPGA的配置方式

FPGA 的重构

浅析FPGA局部动态可重构技术

ISP(图像信号处理)算法概述、工作原理、架构、处理流程

国产CPU概括

从电子游戏历史看IC发展的助推剂

80年代电子游戏及电脑游戏的发展历史

PCIe总线的基础知识

万字长文带你回顾电子游戏的七十多年历史(完整版)

FPGA中异步复位,同步释放的理解

OpenFPGA系列文章总结

用Verilog设计一个16 位 RISC 处理器

介绍一些新手入门FPGA的优秀网站(新增)

Verilog数字系统基础设计-CRC

FPGA 的布局规划艺术

Verilog数字系统基础设计-奇偶校验

建立和保持时间及时序简单理解

(Xilinx)FPGA中LVDS差分高速传输的实现

Xilinx Multiboot实例演示

高速串行通信常用的编码方式-8b/10b编码/解码
Verilog计时(微秒、毫秒和秒)脉冲的产生及同步整形电路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OpenFPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值