006 进程(Process)、任务(Task)、函数(Function)

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++

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值