比较点 | 任务 | 函数 |
---|---|---|
输入、输出 | 可以有任意多个各种类型的参数 | 至少有一个输入,不能有输出和双向端口 |
调用 | 任务只能在过程语句中调用,而不能在连续赋值语句中调用 | 函数可作为赋值操作的表达式,用于过程赋值和连续赋值语句 |
触发事件控制 | 任务不能出现always语句;可以包含延时控制语句(#),事件控制@等,但只能面向仿真,不能综合**(可综合的任务只能实现组合逻辑)** | 函数中不能出现(always、#)这样的语句,要保证函数的执行在零时间内完成 |
调用其他任务和函数 | 可以调用其他任务和函数 | 只能调用函数,不能调用任务 |
返回值 | 没有返回值 | 只有一个返回值 |
其他说明 | 任务调用语句可以作为一条完整的语句出现 | 函数调用语句不能单独作为一条语句出现,只能作为赋值语句的右端操作数 |
意义:
技术:
三种语句表达式的值是按从上到下的顺序来与分支条件的比较,如果相等,则不再与下面的分支相比较而直接执行该分支的语句
优越性:
缺点:
设计规则:
module half_adder(input_0, input_1, sum, carry);
input input_0, input_1;
output sum, carry;
assign sum = (input_0)^(input_1);
assign carry = (input_0)&(input_1);
endmodule
module full_adder(input_0, input_1, input_2, sum, carry);
input input_0, input_1, input_2;
output sum, carry;
reg sum_intermediate, carry_intermediate_0, carry_intermediate_1;
half_adder ha1(input0,input1,sum_intermediate,carry_intermediate_0);
half_adder ha2(sum_intermediate,input2,sum,carry_intermediate_1);
assign carry = (carry_intermediate_0)|(carry_intermediate_1);
endmodule
FPGA由6部分构成,分别为可编程输入/输出单元、基本可编程逻辑单元、丰富的布线资源、嵌入式块RAM、底层嵌入功能单元、内嵌专用硬核
划分依据:
注意事项:
性能可以由带宽、吞吐率、时延来评估