1.データフローレベルのモデリング文法
データフローレベルのモデリングステートメントは、継続的な割り当てステートメントにもなりました。これは、文法的な識別としてキーワードassignを使用して、ネットワークケーブルに値を割り当てるために使用されます。
1.文法構造
assign 网线信号名 = 运算表达式;
例
assign and1 = (~En)&(~S1)&(S0)&(A);
assign Y = En ? 0:(S1 ? (S0 ? D:C)(S0 ? B:A));
2、オペランド
番号
<位宽>'<进制><数值>
例
2'b01 2进制 01
4'd11 10进制 1011
6'o37 8进制 011111
8'hab 16进制 1010_1011
特例
8'o37 位宽多于数值宽度
在原本6位值前补充2个0,即 8'o37=8'b00011111
6’hab 位宽少于数值宽度
在原本最高位的两个有效数值位被截掉,即 6'hab = 6'b101011
例
8'ox7 相当于 xxxxx111
8'h7x 相当于 0111xxxx
数字は記号の数を表すこともできます。数字の直前にプラスまたはマイナス記号を追加するだけです。これは、現在の負の数の補数を意味します。値の部分に負の符号を入れることはできません。
例:
-4'd6; 存为-6的补码。
パラメータ
parameter 参数名1 = 表达式1,参数名2 = 表达式2 ;
例
parameter size = 8;
parameter a = 4,b = 16;
类似于C的一种赋值
パラメータはモジュールで定義され、位置はモジュール内の最初のレベルであるポート宣言のレベルと同じです。
モジュールの第1レベルの構文は、次のとおりです。
ポート名:wireまたはreg宣言、ゲートレベルの呼び出し、モジュールのインスタンス化ステートメント、連続代入割り当てステートメント、パラメーター宣言、およびその他の
パラメーター。アクションの範囲は、このモジュールとこれにのみあります。インスタンス化後のモジュール。、このモジュールは無効になります。
モジュールのインスタンス化中にパラメータを書き換えることもできます。
モジュールの書き換えパラメータ:defparamまたは#()。
例
module example (A,Y);
...
parameter size = 8,delay = 15;
...
endmodule
module test;
...
example #(6,6) t1(a1,y1); //分别修改size = 6 delay = 6
example #(4) t2(a2,y2); //只修改size的值,size = 4
...
endmodule
module annotate;
//参数改写
deparam test.t1.size = 6, test.t2.delay = 6;
endmodule
ネットワークケーブル
wire [宽度声明] 网线名1, 网线名2;
例
wire [5:0] C;
wire [4:0] a,b;
wire x;
登録登録
reg [n-1:0] 存储器名称 [0:m-1]; //表示为该存储器的位宽为n,存储单元有m个
例
reg [5:0] a [6:0];
//此时 a[0]为_ _ _ _ _ _
a[1]为_ _ _ _ _ _
a[2]为_ _ _ _ _ _
a[3]为_ _ _ _ _ _
a[4]为_ _ _ _ _ _
a[5]为_ _ _ _ _ _
a[6]为_ _ _ _ _ _
即a有7个6位寄存器
オペレーターオペレーター
優先度
2.一般的なデータフローレベルモデリング1.4
ビット全加算器
4ビット全加算器は、次の
図に示すように、1ビット全加算器を直列に接続して1ビット全加算器RTL図を形成します。
module addfull(S , cout , cin , A , B);
input cin , A , B;
output S , cout;
assign S = cin ^ A ^ B;
assign cout = (cin & A) | (cin & B) | (B & A);
endmodule
module add4(S, COUT, A, CIN, B );
input CIN;
input [3:0] A,B;
output COUT;
output [3:0] S;
wire c1, c2, c3;
addfull add0(.S(S[0]), .cout(c1), .cin(CIN), .A(A[0]), .B(B[0]));
addfull add1(.S(S[1]), .cout(c2), .cin(c1), .A(A[1]), .B(B[1]));
addfull add2(.S(S[2]), .cout(c3), .cin(c2), .A(A[2]), .B(B[2]));
addfull add3(.S(S[3]), .cout(COUT), .cin(c3), .A(A[3]), .B(B[3]));
endmodule
シミュレーション図は以下の図に示されている:
2
2-4 2-4デコーダデコーダが出力四つの異なる二進数への入力00 01 10 11であり
、以下に示すように、RTL回路図
module DEC2_4(A, B, En, Z);
input A, B, En;
output [3:0] Z;
assign Z = En ? (A ? (B ? (4'b0111):(4'b1011)):(B ? (4'b1101):(4'b1110))):(4'b1111);
endmodule
シミュレーションを下の図に示します
。3。マスタースレーブDフリップフロップ
Dフリップフロップは、メモリ機能とゼロ安定状態ストレージを備えたメモリです。
機能表
タイミング図
RTLシミュレーション図
module MSDFF(Q, Qbar, C, D);
input C, D;
output Q, Qbar;
wire NotC, NotD, NotY, Ybar, Y, D1, D2, Y1, Y2;
assign NotD = ~D;
assign NotC = ~C;
assign NotY = ~Y;
assign D1 = ~(D&C);
assign D2 = ~(NotD&C);
assign Y = ~(D1&Ybar);
assign Ybar = ~(D2&Y);
assign Y1 = ~(NotC&Y);
assign Y2 = ~(NotY&NotC);
assign Q = ~(Qbar&Y);
assign Qbar = ~(Q&Y2);
endmodule
免責事項:この記事は学習にのみ適しています。その内容には、本からの抜粋と要約が含まれています。皆さんが一緒に追加して進歩することを歓迎します。