使用函数实现数据大小端转换

描述

        在数字芯片设计中,经常把实现特定功能的模块编写成函数,在需要的时候再在主模块中调用,以提高代码的复用性和提高设计的层次,分别后续的修改。

        请用函数实现一个4bit数据大小端转换的功能。实现对两个不同的输入分别转换并输出。

程序的接口信号图如下:

使用Verilog HDL实现以上功能并编写testbench验证。

输入描述:

clk:系统时钟

rst_n:异步复位信号,低电平有效

a,b:4bit位宽的无符号数

输出描述:

c,d:8bit位宽的无符号数

解题分析:

function和task的区别:

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

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

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

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

A:函数定义中不能包含任何时间控制语句,即任何#、@、wait等语句,任务中可以使用延迟、事件和时序控制结构;

B:函数至少有一个输入变量,不能包含任何输出和双向端口,任务可以有任意多个输入、双向和输出变量;

C:函数function有一个返回值,缺省时默认返回1 bit的reg寄存器类型数据,任务task没有返回值;

D:函数不能启动任务,但是任务能启动其他任务或函数。

代码如下:

方法一

`timescale 1ns/1ns
module function_mod(
	input [3:0]a,
	input [3:0]b,
	
	output [3:0]c,
	output [3:0]d
);

assign c = data_inv(a);
assign d = data_inv(b);

function  [3:0] data_inv;
	input [3:0] in;
	begin
		data_inv[0] = in[3];
		data_inv[1] = in[2];
		data_inv[2] = in[1];
		data_inv[3] = in[0];
	end
endfunction
endmodule

波形图:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值