您当前的位置: 首页 > 

lu-ming.xyz

暂无认证

  • 1浏览

    0关注

    115博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【SystemVerilog学习笔记】6-SystemVerilog 过程块、任务和函数

lu-ming.xyz 发布时间:2021-04-24 19:13:59 ,浏览量:1

目录
  • 6.1 Verilog 通用目的always块
  • 6.2 SystemVerilog 特有的过程块
    • 6.2.1 组合逻辑过程块
    • 6.2.2 锁存逻辑过程块
    • 6.2.3 时序逻辑过程块
  • 6.3 对任务和函数的改进
    • 6.3.1 任务和函数的隐式语句组
    • 6.3.2 函数返回值
    • 6.3.3 在任务和函数结束前返回
    • 6.3.4 空函数
    • 6.3.5 使用名称传递任务/函数的参数
    • 6.3.6 增强型函数形式参数
    • 6.3.7 无形式参数的函数
    • 6.3.8 形式参数的缺省方向和类型
    • 6.3.9 缺省的形式参数值
    • 6.3.10 数组、结构体和联合体作为形参
    • 6.3.11 用引用取代复制类传递参数
    • 6.3.12 命名的任务和函数结尾
    • 6.3.13 空任务和函数

SystemVerilog新增内容:

  • 组合逻辑过程块:always_comb
  • 锁存逻辑过程块:always_latch
  • 时序逻辑过程块:always_ff
  • 改进任务和函数
6.1 Verilog 通用目的always块
  • always块 是一个能重复执行块中语句的无限循环。为了使仿真时间向前推进,循环中必须包含一些时间控制或事件控制语句。
  • 敏感表 在always开头所写的边沿敏感的事件控制条件。
  • 用法
    1. 在RTL级,always过程块可以用作组合逻辑、锁存逻辑和时序逻辑的建模。
    2. 用于更抽象的逻辑建模。
  • always块的硬件推断 综合编译和形式工具必须检查过程块中的语句以及它的事件控制条件来判断该块描述的硬件类型。
  • 存在的问题
    1. 推断硬件类型的过程增加了软件工具的负担,甚至可能出错。
    2. Verilog通用的always块的建模指导原则可能不被其他工具采用,可能造成仿真和综合结果不一致。
6.2 SystemVerilog 特有的过程块

SystemVerilog新增3个特有的可综合的过程块:always_comb(组合逻辑过程块)、always_latch(锁存逻辑过程块)和always_ff(时序逻辑过程块) 解决的问题:

  • 明确了设计的意图,如果意图与逻辑不匹配软件工具将发出警告。
  • 设计思路清晰,便于维护。
6.2.1 组合逻辑过程块

always_comb组合逻辑过程块表示建立组合逻辑模型。

对比项目always@(*)always_comb敏感表需要指明或者用通配符*自动推断敏感表范围过程块中的额所有变量以及任务/函数调用的参变量对块内读取的信号和块内调用的函数读取的信号都敏感。触发至少一个敏感信号改变除敏感表触发外,在零时刻自动执行确保输出与输入值的一致性(在零时刻产生与输入相对应的输出结果)。具体见例子1

例子1:零时刻保输出与输入值的一致性

  1. always @(state):仿真开始时变量都state和nextState为缺省值0,即WAITE,当时钟上升沿到来,将会导致仿真结果锁定。
  2. always_comb:仿真开始时变量都state和nextState为缺省值0,即WAITE,然后执行一次always_comb块,nextState变为LOAD,正常仿真。 注意:实际硬件不会出现问题,实际硬件组合逻辑的输出肯定反应改逻辑的输入值。
module controller (
    output logic   read,write  ,
    input  instr_t instruction ,
    input  logic   clock,resetN
);
enum {WAITE,LOAD,STORE} state, nextState;
always @(posedge clock or negedge resetN)
begin
    if(~resetN) 
        state             
关注
打赏
1655639048
查看更多评论
0.0405s