目录
- 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
- 改进任务和函数
- always块 是一个能重复执行块中语句的无限循环。为了使仿真时间向前推进,循环中必须包含一些时间控制或事件控制语句。
- 敏感表 在always开头所写的边沿敏感的事件控制条件。
- 用法
- 在RTL级,always过程块可以用作组合逻辑、锁存逻辑和时序逻辑的建模。
- 用于更抽象的逻辑建模。
- always块的硬件推断 综合编译和形式工具必须检查过程块中的语句以及它的事件控制条件来判断该块描述的硬件类型。
- 存在的问题
- 推断硬件类型的过程增加了软件工具的负担,甚至可能出错。
- Verilog通用的always块的建模指导原则可能不被其他工具采用,可能造成仿真和综合结果不一致。
SystemVerilog新增3个特有的可综合的过程块:always_comb(组合逻辑过程块)、always_latch(锁存逻辑过程块)和always_ff(时序逻辑过程块) 解决的问题:
- 明确了设计的意图,如果意图与逻辑不匹配软件工具将发出警告。
- 设计思路清晰,便于维护。
always_comb组合逻辑过程块表示建立组合逻辑模型。
对比项目always@(*)always_comb敏感表需要指明或者用通配符*自动推断敏感表范围过程块中的额所有变量以及任务/函数调用的参变量对块内读取的信号和块内调用的函数读取的信号都敏感。触发至少一个敏感信号改变除敏感表触发外,在零时刻自动执行确保输出与输入值的一致性(在零时刻产生与输入相对应的输出结果)。具体见例子1例子1:零时刻保输出与输入值的一致性
- always @(state):仿真开始时变量都state和nextState为缺省值0,即WAITE,当时钟上升沿到来,将会导致仿真结果锁定。
- 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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?