always_combo、always_latch、always_ff
使用always写组合逻辑时,漏掉else会产生不需要的latch,如
always@(*) begin
if(enable) out <= 1'b1;
end
编译器会将上述逻辑翻译成
always@(*) begin
if(enable) out <= 1'b1;
else out <= out;
end
out的值要保存,就需要latch,但我们可能并不需要latch,此时可以用always_combo,或者always_latch明确说明希望综合成latch形式,或者always_ff说明希望总合成时序逻辑
fork - join (join all)、fork - join_any、fork - join_none
- fork - join (join all):使包含的block并行执行,包含的block执行完再执行后续语句
- fork - join_any:使包含的block并行执行,包含的block有一条执行完就可以继续执行后续语句
- fork - join_none:使包含的block并行执行,后续语句同时执行,无需等待block中的并行语句
module fork_join_all_process();
task automatic print_value;
input [7:0] value;
input [7:0] delay;
begin
#(delay) $display("@%g Passed Value %d Delay %d",
$time, value, delay);
end
endtask
initial begin
fork
#1 print_value (10,7);
#1 print_value (8,5);
#1 print_value (4,2);
join
$display("@%g Came out of fork-join", $time);
#20 $finish;
end
endmodule
@3 Passed Value 4 Delay 2
@6 Passed Value 8 Delay 5
@8 Passed Value 10 Delay 7
@8 Came out of fork-join
module fork_join_any_process();
task automatic print_value;
input [7:0] value;
input [7:0] delay;
begin
#(delay) $display("@%g Passed Value %d Delay %d",
$time, value, delay);
end
endtask
initial begin
fork
#1 print_value (10,7);
#1 print_value (8,5);
#1 print_value (4,2);
join_any
$display("@%g Came out of fork-join", $time);
#20 $finish;
end
endmodule
@3 Passed Value 4 Delay 2
@3 Came out of fork-join
@6 Passed Value 8 Delay 5
@8 Passed Value 10 Delay 7
module fork_join_none_process();
task automatic print_value;
input [7:0] value;
input [7:0] delay;
begin
#(delay) $display("@%g Passed Value %d Delay %d",
$time, value, delay);
end
endtask
initial begin
fork
#1 print_value (10,7);
#1 print_value (8,5);
#1 print_value (4,2);
join_none
$display("@%g Came out of fork-join", $time);
#20 $finish;
end
endmodule
@0 Came out of fork-join
@3 Passed Value 4 Delay 2
@6 Passed Value 8 Delay 5
@8 Passed Value 10 Delay 7
wait fork,disable fork
- wait fork:等待所有fork完成后再执行后续语句
- disable fork:停止所有fork
任务(Task)、函数(Function)
任务函数相较Verilog灵活了很多,支持传值,传参,按照变量名传,参数默认值,可选参数,类似C++