函数function的使用方法

题目描述

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

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

程序的接口信号图如下:

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

输入描述:

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

输出描述:

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

解题思路

该题很明显,就是考察function的使用方法;

在Verilog HDL中,函数的声明由关键字function开始,endfunction结束。对于函数中的语句需要用begin…end包含,即使只有一句。函数的声明模板如下:

function [range-1:0] function_name(input_declaration);
    other_declaration ;    
    procedural_statement ;
endfunction

函数在声明时,会隐式的声明一个宽度为 range、 名字为 function_name 的寄存器变量,函数的返回值通过这个变量进行传递。当该寄存器变量没有指定位宽时,默认位宽为 1。然后进行输入变量的声明和其它声明。注意function定义的尾部需要加“;”结束。

       function 是用来描述功能的函数,不是描述硬件的,不可以有时序逻辑。

       funtion 中可以使用for 循环:

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


    function [3:0]bit_reverse(input [3:0]data);
        integer i;
        for(i=0;i<4;i=i+1)
        begin:reverse
            bit_reverse[i] = data[3-i] ;
        end  
    endfunction

    assign  c = bit_reverse(a) ;   //调用function
    assign  d = bit_reverse(b) ;    
endmodule

那么function 中的for 循环与 generate ... for 有什么区别?

function 在FPGA中实现,消耗的是什么资源?

猜你喜欢

转载自blog.csdn.net/ypcan/article/details/128998955