天天看點

數字電路專題:Verilog 子產品結構

數字電路子產品結構

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)  //沒有逗号,也沒有分号
                  );
           

繼續閱讀