首页 > 代码库 > (原创)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;
endendmodule
用RTL视图查看一下生成出来的网表。
FIG2.1 直接用组合逻辑生成的逻辑图
3.Conclusion
总体来说,task的功能更加符合硬件逻辑设计的习惯,而且语法中对它的限制比较少,
4.Platform
Quartus II 9.1 Build 222 Full Version
5.Reference
(原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)