|
可綜合的語法子集2 本文節(jié)選自特權(quán)同學(xué)的圖書《FPGA設(shè)計(jì)實(shí)戰(zhàn)演練(邏輯篇)》 配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCtt (1) 參數(shù)定義:parameter。(特權(quán)同學(xué),版權(quán)所有) Parameter用于申明一些常量,主要是便于模塊的移植或升級時的修改。(特權(quán)同學(xué),版權(quán)所有) 一個基本的module,通常一定包括module…endmodule語法和任意兩種端口申明(通常我們所設(shè)計(jì)的模塊一定是有輸入和輸出的),parameter則不一定,但是對于一個可讀性強(qiáng)的代碼來說也是不可少的。這樣一個基本的module如下: module <模塊命名>(<端口命名1>, <端口命名2>, ...); // 輸入端口申明 input <端口命名1>; input wire <端口命名2>; input [<最高位>:<最低位>]<端口命名3>; ... // 輸出端口申明 output <端口命名4>; output [<最高位>:<最低位>]<端口命名5>; output reg [<最高位>:<最低位>]<端口命名6>; ... // 雙向(輸入輸出)端口申明 inout <端口命名7>; inout [<最高位>:<最低位>]<端口命名8>; ... // 參數(shù)定義 parameter <參數(shù)命名1> = <默認(rèn)值1>; parameter [<最高位>:<最低位>]<參數(shù)命名2> = <默認(rèn)值2>; ... // 具體功能邏輯代碼 ... endmodule 注:“//”后的內(nèi)容為注釋。(特權(quán)同學(xué),版權(quán)所有) (2) 信號類型:wire,reg等。(特權(quán)同學(xué),版權(quán)所有) 如圖5.1所示,在這個簡單的電路中,分別定義兩個寄存器(reg)鎖存當(dāng)前的輸入din。每個時鐘clk上升沿到來時,reg都會鎖存到最新的輸入數(shù)據(jù),而wire就是這兩個reg之間直接的連線。(特權(quán)同學(xué),版權(quán)所有) 作為input或inout的信號端口只能是wire型,而output則可以是wire也可以是reg。需要特別說明的是,雖然在代碼中我們可以定義信號為wire或reg類型,但是實(shí)際的電路實(shí)現(xiàn)是否和我們預(yù)先的一致還要看綜合工具的表現(xiàn)。例如reg定義的信號通常會被綜合為一個寄存器(rigister),但這有一個前提,就是這個reg信號必須是在某個由特定信號邊沿敏感觸發(fā)的always語句中被賦值。(特權(quán)同學(xué),版權(quán)所有)
圖5.1 reg和wire示例圖 Wire和reg的一些常見用法示例如下: // 定義一個wire信號 wire // 給一個定義的wire信號直接連接賦值 // 該定義等同于分別定義一個wire信號和使用assign語句進(jìn)行賦值 wire // 定義一個多bit的wire信號 wire [<最高位>:<最低位>] // 定義一個reg信號 reg // 定義一個賦初值的reg信號 reg // 定義一個多bit的reg信號 reg [<最高位>:<最低位>] // 定義一個賦初值的多bit的reg信號 reg [<最高位>:<最低位>] // 定義一個二維的多bit的reg信號 reg [<最高位>:<最低位>] |