Verilog 中 task 的语法,及使用 task 来完成模块的 testbench

您所在的位置:网站首页 always么读的 Verilog 中 task 的语法,及使用 task 来完成模块的 testbench

Verilog 中 task 的语法,及使用 task 来完成模块的 testbench

2023-07-31 09:50| 来源: 网络整理| 查看: 265

概述

Verilog 中的 task 是一种不可综合的语法,它既提供了从不同位置执行公共过程的能力(因为这样可以实现代码共享),也提供了把大过程切分成小过程的能力(因为小过程更便于阅读和调试)。相较于 function, task 的 input 和 output 是可选项,同时其中也可以包含延迟控制语句,常被用在 testbench 中。

task 的语法

task的使能,就是从一条包含有传进去的参数和用于接受结果的变量的调用语句,控制从调用的过程转到 task。当 task 完成的时候,控制再传回调用的过程。所以如果 task 包含时序控制的语句,那么调用 task 的时间和退出 task 的时间可以是不一样的。 task 可以再使能(调用)其他 task,没有数量的限制。

task 声明的语法如下:

task [automatic] task_name ( port_declaration port_name, port_name, ... , port_declaration port_name, port_name, ... ); local variable declarations procedural_statement or statement_group endtask 序列检测模块

只要理解了 task 的用法,我们就可以自然而然地把它用到各种模块的 testbench 编写中。

下面是一个检测“10110”序列的模块,在检测到后令 detected = 1.

`timescale 1ns / 1ns module detector ( input clk , input rst_n , input data , output reg detected ); localparam IDLE = 3'b000 , S0 = 3'b001 , S1 = 3'b010 , S2 = 3'b011 , S3 = 3'b100 , S4 = 3'b101 ; reg [2:0] current_state, next_state; always@ (posedge clk or negedge rst_n) begin if(!rst_n) current_state


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3