liuiang的个人空间 https://blog.eetop.cn/liuiang [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

SystemVerilog语言简介(六)

已有 4383 次阅读| 2006-7-26 13:30

天气: 阴雨
心情: 高兴

http://www.pld.com.cn/HDL/systemverilog/3.htm

20. 块名字和语句标签

Verilog中,我们可以通过在beginfork关键字之后指定名字来为begin-endfork-jion语句指定名字。这个指定的名字代表整个语句块。SystemVerilog还允许在endjion关键字之后指定一个匹配的块名字。这种机制很容易将endjion与对应的beginfork联系起来,尤其是在一个长的块或嵌套的块中。块结尾处的名字是可选的,但如果使用的话,它必须与块起始处的名字相同。例如:

begin: foo  // begin之后的块名字

 

  fork: bar // 具有名字的嵌套的块

  jion: bar // 必须具有相同的名字

 

end: foo // 必须具有相同的名字

 

 

SystemVerilog还允许像C语言一样为单个语句设置标签。语句标签放置在语句的前面,用来标识这条语句。例如:

initial begin

  test1: read_enable = 0;

 

  test2: for (i=0; i<=255; i++)

end

 

 

21. 对事件控制的增强

Verilog使用@标记来控制基于特定事件的执行流,SystemVerilog增强了@事件控制。

l         有条件的事件控制

@标记的一个基本应用就是推断一个具有使能输入的锁存器。下面的例子演示了一个锁存器建模的基本风格。

always @(data or en)

  if (en) y <= data;

 

 

 

这种编码风格对仿真来说是效率低下的,因为即使在使能输入无效的时候,数据输入的每次改变都会触发事件控制。

SystemVerilog在事件控制中加入了一个iff条件。只有iff条件为真的条件下,事件控制才会被触发。通过将使能判断移入到事件控制里面,使得只有在锁存器输出能够改变的时候事件控制才会被触发。例如:

always @(a or en iff en==1)

  y <= a;

 

 

l         事件控制中的表达式

Verilog允许在@事件控制列表中使用表达式,例如:

 

always @((a * b))

always @(memory[address])

 

 

在第一个例子中,是当操作数发生改变的时候还是只有当运算结果发生改变的时候才会触发事件控制?在第二个例子中,是当memory的地址发生变化的时候还是只有当memory的值发生变化的时候才会触发事件控制?当@事件控制中包含表达式的时候,IEEE Verilog标准允许仿真器进行不同的优化。这就可能导致在不同的仿真器间有不同的仿真结果,可能还会导致仿真与综合之间的结果不一致。SystemVerilog加入了一个changed关键字,在事件控制列表中它被用作一个修饰符。@(changed (表达式))能够显式地定义只有当表达式的结果发生改变的时候才会触发事件控制。例如:

always @(changed (a * b))

always @(changed memory[address])

 

 

l         事件控制中的赋值

Verilog不允许在事件控制中使用赋值。SystemVerilog允许在事件控制中使用赋值表达式。事件控制仅仅敏感于赋值表达式右侧的变化。例如:

always @(y = a * b)

 

22. 新的过程

Verilog使用always过程来表示时序逻辑、组合逻辑和锁存逻辑的RTL模型。综合工具和其它软件工具必须根据过程起始处的事件控制列表以及过程内的语句来推断always过程的意图。这种推断会导致仿真结果和综合结果之间的不一致。SystemVerilog增加了三个新的过程来显式地指示逻辑的意图。

l         always_ff:表示时序逻辑的过程;

l         always_comb:表示组合逻辑的过程;

l         always_latch:表示锁存逻辑的过程。

例如:

always_comb @(a or b or sel) begin

  if (sel) y = a;

  else y = b;

 

end

 

 

软件工具能够检查事件控制敏感列表和过程的内容来保证逻辑的功能匹配过程的类型。例如,工具能够检查一个always_comb过程能够敏感过程内读取的所有外部值,对逻辑的每一个分支的相同变量进行赋值,并且检查分支是否覆盖了所有可能的条件。如果任何一个条件没有满足,软件工具均会报告该过程没有正确建模组合逻辑。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 1

    好友
  • 3

    获赞
  • 9

    评论
  • 1911

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-25 10:21 , Processed in 0.022966 second(s), 13 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部