首页 > 代码库 > (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)

(原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)

1. Abstract

  function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现。因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充裕,我想通过写几个简单的电路将它们二者的功能进行验证一下,看看究竟是怎么生成电路的。

2. Contents

    主要为测试function和task各自生成的电路,所以电路设计功能比较简单——4位BCD码转换成4位余3码。

    文件开头的注释说明。

/* ---------------------------------------
    Module Name:         temp
    Module Function:    将4位BCD码转换成为余3码,无效状态为4‘b0000
    Module Input:         4-bit data_in
    Module Output:      4-bit data_out
    Module Reference:    None
    Note:                  码表如下
########################################
          data_in        data_out   
    0      4‘b0000        4‘b0011
    1      4‘b0001        4‘b0100   
    2      4‘b0010        4‘b0101   
    3      4‘b0011        4‘b0110
    4      4‘b0100        4‘b0111
    5      4‘b0101        4‘b1000
    6      4‘b0110        4‘b1001
    7      4‘b0111        4‘b1010
    8      4‘b1000        4‘b1011
    9      4‘b1001        4‘b1100
    10      4‘b1010        4‘b0000        无效
    11      4‘b1011        4‘b0000        无效
    12      4‘b1100        4‘b0000        无效
    13      4‘b1101        4‘b0000        无效
    14      4‘b1110        4‘b0000        无效
    15      4‘b1111        4‘b0000        无效
   ---------------------------------------*/

2.1 直接使用组合逻辑电路生成的描述。
module temp(data_in,data_out);

output reg [3:0] data_out;
input [3:0] data_in;

always @(data_in)
begin
    if(data_in >=  4‘d10) data_out = 4‘b0000;
    else  data_out = data_in + 4‘d3;
end

endmodule

  用RTL视图查看一下生成出来的网表。

image

FIG2.1 直接用组合逻辑生成的逻辑图

 

3.Conclusion

总体来说,task的功能更加符合硬件逻辑设计的习惯,而且语法中对它的限制比较少,

4.Platform

  Quartus II 9.1 Build 222 Full Version

5.Reference

(原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)