VL10 使用函数实现数据大小端转换
创始人
2024-05-25 00:16:23
0

一、function和task

都是为了模块化、结构化设计,主要还是将重复性的功能封装起来方便调用。

可以对返回值类型和范围不进行定义,默认值为reg型并且位宽为1

变量类型说明 比如integer i

function(其功能同之前的module模块类似)

通常是用来描述组合逻辑,是阻塞赋值“="

不能包含任何延迟,函数仿真时间为0

只含有input参数并由函数名返回一个结果(函数名就是返回值)

可以调用其他的函数(function),不可调用task


task

通常用于调试,对硬件行为级描述,不可综合。

可以包含时序控制(#延迟、wait)

可以有input、output、inout参数

可以调用其他任务或函数,优先级较高


function和task的区别:

(1)任务能调用任务和函数,但是函数只能调用函数,不能调用任务;

(2)任务可以描述组合逻辑和时序逻辑,可以有时延;函数只能描述组合逻辑,仿真时延为0;

(3)任务可以有任意多个各种类型的输入;函数只能有input端口的输入参数,且至少输入一个参数;

(4)任务可以没有返回值;函数必须有一个返回值;

二、思路

本题的testbench有问题,没有考虑clk和rst_n。所以这里则根据题意写了一份答案。

首先是module部分。因为多次采用大小位转换功能,所以直接将这部分定义为一个function,可以考虑用之前的for循环进行编写。可以缩短一部分。随后是对function的调用,考虑为时钟上升沿触发,并且异步复位。

三、设计文件

 //方法1function [3:0] swap;input [3:0] swap_num;integer i;beginfor(i = 0;i < 4;i = i + 1)beginswap[i] = swap_num[3-i];endend
endfunctionreg [3:0] c_tmp,d_tmp;  //定义了两个寄存器  方便在always模块里去赋值
always @(posedge clk or negedge rst_n)if(!rst_n) beginc_tmp <= 4'b0;d_tmp <= 4'b0;endelse beginc_tmp <= swap(a);d_tmp <= swap(b);end

//方法2`timescale 1ns/1ns
module function_mod(input clk,input rst_n,input [3:0]a,input [3:0]b,output [3:0]c,output [3:0]d
);function [3:0] begin_end;input [3:0] data_in;beginbegin_end[0] = data_in[3];begin_end[1] = data_in[2];begin_end[2] = data_in[1];begin_end[3] = data_in[0];end endfunctionassign c = begin_end(a);assign d = begin_end(b);endmodule

四、方法一的测试文件

`timescale 1ns/1ns
module tb_function();reg [3:0] a,b;reg clk;reg rst_n;wire [3:0] c,d;
always #5 clk = !clk;
initial beginclk = 0;rst_n = 0;a = 4'b0000;b = 4'b0000;#5 clk = !clk;#10 rst_n = 1; a = 4'b0001;b = 4'b0101; #30 rst_n = 1; a = 4'b1101;b = 4'b1011; #100$finish;
endfunction_mod dut(.a (a),.b (b),.clk (clk),.rst_n (rst_n),.c (c),.d (d)
);endmodule

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...