デジタルIC設計研究ノート_ブロッキング割り当てと非ブロッキング割り当て

デジタルIC設計研究ノート

5.ブロッキングおよび非ブロッキングの割り当て

1 Verilog 代码
2 原理图
3 Modelsim仿真
  • ブロック割り当て(ブロック): "="、ステートメントは順番に実行され、シリアル実行
  • 非ブロッキング割り当て(ブロック解除): "<="、ステートメントは順序なしで実行され、並行して実行されます
  • 注:同じalwaysブロックにブロッキング割り当てと非ブロッキング割り当てを混在させないでください

1Verilogコード

module block_unblock(
	input 		clk,
	input 		rst_n,
	input 		a,
	input 		b,
	input 		c,
	
	output reg  [1:0] out //out = a+b+c;
	
);
	
	reg [1:0] d; //d = a+ b; out = d+c;
	
	always@(posedge clk or negedge rst_n)
		if(!rst_n)
//			out = 2'd0;
         out <= 2'd0;
		else begin
//----blocked 1--------------
//		   d = a + b;
//			out = d + c;
//----blocked 2--------------
//			out = d + c;
//			d = a + b;
//----unblocked 1------------
//			out <= d + c;
//			d <= a + b;
//----unblocked 2------------
//         d <= a + b;
//			out <= d + c;
//----unblock 3--------------
			out <= a + b + c;
			
		end
endmodule


2.回路図
(1)。Block1の回路図

ここに画像の説明を挿入
(2)。ブロック2の回路図
ここに画像の説明を挿入
(3)。ブロックを解除する1の回路図
ここに画像の説明を挿入
(4)。ブロックを解除する2の回路図
ここに画像の説明を挿入
(5)。ブロックを解除する3の回路図(推奨)
ここに画像の説明を挿入

3Modelsimシミュレーション

ブロック2のシミュレーション結果
// out = d + c;
// d = a + b;
最初にout = d + cを実行;この時点でのdの値は前のクロックサイクルの値です;次にd = a +を実行しますb;この時点でのdの値は、クロックの次の有効なエッジで収集されます。dレジスタのレベルが1つ増えるため、1ビートが遅延し、結果としてエラーが発生します。
ここに画像の説明を挿入
unblock 1、2
unblock 3シミュレーション結果(推奨)のシミュレーション結果も、dレジスタのレベルが追加されているために間違っています
ここに画像の説明を挿入

【注意】:個人学習メモ、間違いがありましたら、お気軽に教えてください、丁寧です~~~

おすすめ

転載: blog.csdn.net/weixin_50722839/article/details/109577903