數字電路子產品結構
verilog 的基本設計單元是“子產品”(block)。一個子產品是由兩部分組成的,一部分描述接口。一部分描述邏輯功能。
從上面的的這個例子可以看出verilog結構位于module 和endmodule 聲明語句之間,每個verilog程式包括4個主要部分:端口定義、I/O說明、内部信号聲明、功能定義
端口定義
子產品的端口表示的是子產品的輸入輸出口名,也就是他與他與别的子產品聯系的端口的辨別。
在子產品被引用時,在引用的子產品中有些信号需要輸入到被引用的子產品中(輸入信号:input),有的信号需要從被引用的子產品中取出來(輸出信号:output),在引用子產品時其端口可以用兩種方式連接配接(這裡說的連接配接就是常說的端口的例化):
方法1:
在引用時,嚴格按照子產品定義的端口順序來連結,不用标明原來子產品定義時規定的端口名,如:
子產品名(連接配接端口1信号名 ,連接配接端口2信号名 ,連接配接端口3信号名,… );
方法2:
在引用時用"."符号标明原來原子產品是定義時規定的端口名,例如:
子產品名( .端口1名(連接配接信号1名),
.端口2名(連接配接信号2名),
.端口3名(連接配接信号3名)
…
);
比較:方法2相比于方法1的好處在于可以用端口名與被引用的子產品的端口相對應,而不必嚴格按照端口順序對應,提高了程式的可讀性和可移植性。
I/O說明格式
輸入:
input [信号位寬-1 :0] 端口名1;
input [信号位寬-1 :0] 端口名2;
輸出:
output [信号位寬-1 :0] 端口名1;
output [信号位寬-1 :0] 端口名2;
子產品内部信号說明:
在子產品内部用到的和端口有關的wire 和 reg 類型變量的聲明
reg [信号位寬-1 : 0] R 變量1, R 變量2,…;
wire [信号位寬-1 : 0] W 變量1, W 變量2,…;
功能定義
子產品中最重要的部分是邏輯功能定義的部分。
了解為把輸入信号進行一系列的運算,得出輸出信号的過程,大緻分為組合邏輯和時序邏輯兩大類。
子產品結構示例代碼如下
module example (a,b,c,d); // 端口聲明:a b c d
input i_a;
input i_b; //I/O說明 :輸入a b
output o_c;
output o_d; //I/O說明:輸出 c d
assign o_c = i_a | i_b;
assign o_d = i_a & i_b; //功能定義:邏輯功能描述
endmodule
I/O說明也可以寫在端口聲明語句裡面
上面的代碼還可以這樣寫:
module example (
input i_a, //注意這裡不再是分号,而是逗号
input i_b,
output o_c,
output o_d //最後這裡沒有分号也沒有逗号
);
assign o_c = i_a | i_b;
assign o_d = i_a & i_b;
endmodule
子產品的引用
wire a1; //頂層内部變量
wire b1; //頂層内部變量
wire c1; //頂層内部變量
wire d1; //頂層内部變量
example my_example(
.a(a1), //逗号
.b(b1),
.c(c1),
.d(d1) //沒有逗号,也沒有分号
);