STARCRTL設計スタイルガイド(3) 2.3.2ブロッキング代入とノンブロッキング代入 | 改善日誌(kaizen diary)

改善日誌(kaizen diary)

https://researchmap.jp/kaizen/今昔秀歌百撰/
http://twitter.com/kaizen_nagoya/
http://bookmeter.com/u/121023
http://booklog.jp/users/kaizen/
https://www.amazon.co.jp/gp/pdp/profile/A1IAEQHVKJVHLG

STARCRTL設計スタイルガイド(3) 2.3.2ブロッキング代入とノンブロッキング代入 researchmap 2013/02/26

並列(並行)処理と同時性 について考察するにあたり、
STARC RTL設計スタイルガイドの参考例を実際にコンパイルしてみて、現状を確かめる。
STARC RTL設計スタイルガイド 2.3.2
ブロッキング代入とノンブロッキング代入 
論理回路を実際に作るには、デジタル電子回路として実装する。
論理的には、時間を捨象し、瞬時に実行し、実行時間を考えない。
電子回路では、電荷が貯まったり、電荷を放出するのに時間がかかり、遅延(delay)、揺らぎ(jitter)を評価する。
論理的なHDL(hardware description language)で記述する際に、
並列(並行)処理で行うこと、時間的な同時性、遅延、揺らぎを考慮して、
設計意図がうまく実装できるようにすることを考える。
Verilog-HDL, VHDLで記述する際に参考になるのが、



RTL設計スタイルガイド VHDL編―LSI設計の基本
培風館(2011/06)
値段:¥ 7,980




RTL設計スタイルガイド Verilog HDL編―LSI設計の基本
培風館(2011/06)
値段:¥ 9,240

ここでは、並列(並行)処理、同時性、遅延、ゆらぎに関連する規則、情報を列記し、設計段階への準備を行う。
例として掲載しているのは設計の一部で、道具にそれだけ入れてもコンパイルできるとは限らない。そこで、コンパイルできる状態にしながら考える。
1 論理図生成
2 模擬試験(simulation)
3 FPGAへの実装、動作確認
のいずれかの方法を取る。
2章 RTL記述テクニック
2.3. FFの推定
2.3.2. ノンブロッキング代入文とブロッキング代入文では回路が異なる(Verilog HDL only)
① FF推定でノンブロッキング代入文(<=)とブロッキング代入文(=)との間では、
 合成後の回路が異なることがある<参考>
② ノンブロッキング代入文とブロッキング代入文を混在させない(Verilog HDL only)<必須>
ブロッキング代入(=)は、逐次処理、ノンブロッキング代入(<=)は並列処理。
混在すると、何と何を同時に実行するか分かりにくくなる。あるいは、意図しない状態になるかもしれない。
ブロッキング代入とノンブロッキング代入のFF
図2-3
  ブロッキング代入文(=)
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: NMIRI
// Engineer:  Ogawa Kiyoshi
// 
// Create Date:    17:28:20 02/19/2013 
// Design Name: 
// Module Name:    starc_verilog_2_3_2(blocking) 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Revision 0.02 - Add output.
//Revision 0.03 - 

starc_verilog_2_3_2
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module starc_verilog_2_3_2(clk,d_in,c_out);
input clk, d_in;
output c_out;
wire d_in;
reg a,b,c_out;
always @(posedge clk) begin
a = d_in;// blocking
b = a;// blocking
c_out = b;// blocking
  end
endmodule

$改善日誌(kaizen diary)-starc rtl verilog 2.3.2

ブロッキング代入という言葉から、何かを阻止している。
逐次実行であるから、記憶領域が要るような気がする。
実装は、逐次実行した結果を実現する回路を生成する。
代入した結果だけを配線し、経過は配線しない。
 ノンブロッキング代入文(<=)
module starc_verilog_2_3_2non(clk,d_in,c_out);
input clk, d_in;
output c_out;
wire d_in;
reg a,b,c_out;
always @(posedge clk) begin
a <= d_in;// non blocking
b <= a;// non blocking
c_out <= b;// non blocking
  end
endmodule
$改善日誌(kaizen diary)-starc rtl verilog 2.3.2non

ノンブロッキング代入という言葉と、並行実行という言葉から、すぐに処理が終わる並列回路を想像するかもしれない。並行実行するのは、個々の処理である。並行実行した結果は、次の並行実行のために保持する必要がある。そのため、並行実行の数が増えれば、保持する記憶領域の数が増える。論理的に並行実行するものが、回路として直列に並行実行する場合と、並列に並行実行する場合とがあることがわかればよい。
今回は、ISE WebpackのVerilog HDLのファイル生成機能が作成した注釈部分をそのまま利用した。
変数名はなるべくそのまま利用する。ただし以下の命名規則に従う。
1 なるべく3文字以上とする。ただし、内部のみで利用するものは1文字も許す。ガイドの名前と1対1対応がつけやすい名前を選ぶ。
2 入出力(input, output)、時間(clock)、再設定(reset), 有効(enable)などの信号の機能が分かる名前を利用する。
3 規則番号をファイル、モジュール名に入れる。

<この稿は書きかけです。順次追記します。>
作業としては、
1 新しいプロジェクトを作成する
2 新しいモジュールを作成する。
 必要があれば、既存のファイルから類似の部分を切り貼りする。
 モジュールで生成した回路が妥当であれば、試験例(test bench)を作成する。
3 試験例を生成は、新しいVerilog Test Fixtureを作成する。
 必要があれば、既存のファイルから類似の部分を切り貼りする。
この方法は、
フォルダ内に不要なファイルを複写しないようにする。
自動生成機能を有効に利用する。
ため。
twitter 

@kaizen_nagoya

http://bit.ly/X9scQK
 #STARC #RTL設計スタイルガイド #Verilog-HDL 2.3.2
#ブロッキング代入 と #ノンブロッキング代入