今日じゃないけど、この前のつづきで、昨日まなんだこと。
Verilogの超大雑把な雰囲気(これをそのまま打っても動かない。あくまでも雰囲気)
module MY_MODULE ( input [3:0] A,B, // 入出力の定義 input CLK, output LED1, output [6:0] CNT ); // 内部で使う信号の定義 reg LED1; // always内部で使う場合、reg宣言 wire [4:0] SUM; // 組み合わせ回路 assign SUM = TASHIZAN(A,B); function [4:0] TASHIZAN; input [3:0] A,B; begin TASHIZAN = A+B; end endfunction // 順序回路 always @(posedge CLK) begin LED1 <= SUM[4]; end // 下位モジュールの呼び出し BCDCNTR uBCDCNTR ( .IN(SUM[3:0]), .OUT(CNT) ); endmodule
はじめに、moduleがきて、INPUT,OUTPUTを宣言する
内部信号の宣言は、wire(値を保持しない)とreg(保持する)がある
論理は、assign,function,alwaysにかけ、
assignには、組み合わせ論理式を書く
functionは、assignの右辺がながいので、それをまとめるかんじ
alwaysには、組み合わせ回路を書く場合と順序回路を書く場合がある。
順序回路の場合、posedge,negedgeが書かれる。
下位モジュールを呼び出す場合は、引数の対応を書く
=はブロッキング(順番に実行) <=はノンブロッキング(同時実行)
alwaysの中では、ノンブロッキング(<=)を使う
if,case,casex文は、function,alwaysの中で書く
for,while文は、シミュレーションで使う(論理合成しない)
詳細を今度かく
Verilogの超大雑把な雰囲気(これをそのまま打っても動かない。あくまでも雰囲気)
module MY_MODULE ( input [3:0] A,B, // 入出力の定義 input CLK, output LED1, output [6:0] CNT ); // 内部で使う信号の定義 reg LED1; // always内部で使う場合、reg宣言 wire [4:0] SUM; // 組み合わせ回路 assign SUM = TASHIZAN(A,B); function [4:0] TASHIZAN; input [3:0] A,B; begin TASHIZAN = A+B; end endfunction // 順序回路 always @(posedge CLK) begin LED1 <= SUM[4]; end // 下位モジュールの呼び出し BCDCNTR uBCDCNTR ( .IN(SUM[3:0]), .OUT(CNT) ); endmodule
はじめに、moduleがきて、INPUT,OUTPUTを宣言する
内部信号の宣言は、wire(値を保持しない)とreg(保持する)がある
論理は、assign,function,alwaysにかけ、
assignには、組み合わせ論理式を書く
functionは、assignの右辺がながいので、それをまとめるかんじ
alwaysには、組み合わせ回路を書く場合と順序回路を書く場合がある。
順序回路の場合、posedge,negedgeが書かれる。
下位モジュールを呼び出す場合は、引数の対応を書く
=はブロッキング(順番に実行) <=はノンブロッキング(同時実行)
alwaysの中では、ノンブロッキング(<=)を使う
if,case,casex文は、function,alwaysの中で書く
for,while文は、シミュレーションで使う(論理合成しない)
詳細を今度かく