張 偉 張 建 尹德有
(丹東東方測控技術(shù)股份有限公司)
現(xiàn)今隨著電子技術(shù)的不斷發(fā)展,現(xiàn)場編程門陣列(FPGA)的技術(shù)不斷進步,其運算速度和存儲空間都有了很大的提高,功能變得更加強大,而成本的不斷減低,也使得FPGA的應(yīng)用領(lǐng)域越來越廣。
一般的FPGA的設(shè)計是根據(jù)外圍設(shè)備編寫不同的功能模塊,這些模塊結(jié)構(gòu)設(shè)計不統(tǒng)一,接口設(shè)計多樣化,不適合系統(tǒng)級整體設(shè)計,可重構(gòu)性和可移植性差,使得產(chǎn)品開發(fā)周期大大增加。為此,提出的多模塊化集成IC設(shè)計方法,具有通用的接口設(shè)計,方便的數(shù)據(jù)讀寫操作,能夠很大程度上提高設(shè)計的可重構(gòu)性和可移植性,減少產(chǎn)品的設(shè)計周期。
在多模塊集成IC設(shè)計原理中,最重要的是通用接口設(shè)計。如圖1所示,在通用接口設(shè)計中,通過與上位機通訊,在FPGA接口模塊中分配數(shù)據(jù),確定上位機需要訪問的器件地址、寄存器地址、讀寫方式、數(shù)據(jù)控制等,通過譯碼器與鎖存器將數(shù)據(jù)發(fā)送給模塊,實現(xiàn)多個模塊的獨立控制。
圖1 設(shè)計結(jié)構(gòu)框圖
采用SPI從機總線實現(xiàn)與上位機通訊,8位數(shù)據(jù)傳輸,連續(xù)4個8位數(shù)據(jù),每8位數(shù)據(jù)代表一個地址,第一個8位數(shù)據(jù)為控制器器件地址和讀寫信號,第二個8位數(shù)據(jù)為器件寄存器地址,第三、四個8位數(shù)據(jù)是16位數(shù)據(jù)值,同時第三、四個8位數(shù)據(jù)也可以為讀數(shù)據(jù)。SPI從機通訊模塊見圖2。
圖2 SPI從機通訊模塊
所有的數(shù)據(jù)包括地址數(shù)據(jù)Address,寄存器數(shù)據(jù)Regselect,寫數(shù)據(jù)Wrdata,讀數(shù)據(jù)Rddata都由鎖存器74373鎖存。Address地址高4位由74154譯碼器轉(zhuǎn)換成16位主器件地址片選,BIT3~BIT1由74138譯碼器轉(zhuǎn)換成8位子器件地址片選。即Address數(shù)據(jù)的地址可外接共16大類設(shè)備器件,每大類器件又可接8個相同模塊。這樣的地址設(shè)計方法也可以自行定義。接口說明見表1。
模塊集成IC設(shè)計是仿照傳統(tǒng)集成芯片設(shè)計,其通用接口具有內(nèi)部寄存器分配、片選接口、讀寫使能接口等。
表1 接口說明
(1)模塊IC設(shè)計具有通用的傳輸接口,見表2。
表2 模塊IC設(shè)計通用接口
(2)內(nèi)部寄存器分配。內(nèi)部寄存器分為控制寄存器和數(shù)據(jù)寄存器兩種,并分配有不同的地址??刂萍拇嫫饔糜谑鼓苣K和模塊內(nèi)部觸發(fā),中斷等功能實現(xiàn)。數(shù)據(jù)寄存器則用于實現(xiàn)對系統(tǒng)外部設(shè)備數(shù)據(jù)的讀寫。這樣設(shè)計,方便了對模塊內(nèi)部數(shù)據(jù)的檢測,可以用于軟件的調(diào)試。
(3)外設(shè)時序。針對不同的應(yīng)用,每個外設(shè)的時序各不相同,在實現(xiàn)內(nèi)部數(shù)據(jù)寄存器和控制寄存器的初始化后,按照基本的外設(shè)時序編寫驅(qū)動功能。
如圖3所示4通道D/A接口模塊,其中clk、rst接口為系統(tǒng)時鐘和系統(tǒng)復(fù)位,模塊的地址位0x30,是由Address地址數(shù)據(jù)經(jīng)過譯碼器得到的,MA3代表主器件地址,SA0代表子器件地址,regvalue代表寄存器地址,讀寫信號由Address[0]確定,并通過非門形成互鎖,datain[15..0]是數(shù)據(jù)輸入,DA[15..0]是數(shù)據(jù)輸出,其他是設(shè)備的接口。
圖3 4通道D/A模塊框圖
FPGA通用接口設(shè)計軟件如下:
∥寫地址[1]
always @ (address)
begin
da1_value_reg_selected <= 0;
da2_value_reg_selected <= 0;
da3_value_reg_selected <= 0;
da4_value_reg_selected <= 0;
control_reg_selected <= 0;
case(address)
0:da1_value_reg_selected <= 1; ∥通道1電壓輸出
1:da2_value_reg_selected <= 1;∥通道2電壓輸出
2:da3_value_reg_selected <= 1;∥通道3電壓輸出
3:da4_value_reg_selected <= 1;∥通道4電壓輸出
4:control_reg_selected <= 1;∥控制寄存器
default:
begin
da1_value_reg_selected <= 0;
da2_value_reg_selected <= 0;
da3_value_reg_selected <= 0;
da4_value_reg_selected <= 0;
control_reg_selected <= 0;
end
endcase
end
∥寫D/A通道電壓輸出數(shù)據(jù)
always @ (posedge clk or negedge reset_n)
begin
if(reset_n==1′b0)
begin
da1_value_reg=0;
da2_value_reg=0;
da3_value_reg=0;
da4_value_reg=0;
end
else
begin
if(write & !chipselect & da1_value_reg_selected)
begin
da1_value_reg <= writedata;
end
if(write & !chipselect & da2_value_reg_selected)
begin
da2_value_reg <= writedata;
end
if(write & !chipselect & da3_value_reg_selected)
begin
da3_value_reg <= writedata;
end
if(write & !chipselect & da4_value_reg_selected)
begin
da4_value_reg <= writedata;
end
end
end
∥寫D/A控制寄存器值
always @ (posedge clk or negedge reset_n)
begin
if(reset_n==1'b0)
begin
control_reg = 0;
end
else
begin
if(write & !chipselect & control_reg_selected)
begin
control_reg <= writedata[0];∥使能
end
end
end
∥讀數(shù)據(jù)
always @ (address or read or da1_value_reg_selected or
da2_value_reg_selected or da3_value_reg_selected or
da4_value_reg_selected or control_reg_selected)
∥always @ (posedge clk)
begin
if(read)
case(address)
0:readdata <= da1_value_reg;
1:readdata <= da2_value_reg;
2:readdata <= da3_value_reg;
3:readdata <= da4_value_reg;
4:readdata <= control_reg;
default:readdata<=16′h0000;
endcase
end
通用接口設(shè)計是所有外掛設(shè)備模塊的重要部分,其他模塊設(shè)計都可按照上述方法實現(xiàn),這種設(shè)計方法高效簡單,應(yīng)用性強。設(shè)備接口驅(qū)動則按照不同模塊的時序設(shè)計完成。
在上述設(shè)計原理及軟件結(jié)構(gòu)的基礎(chǔ)上,采用Altera公司FPGA,Cyclone E系列芯片EP4CE22,其邏輯單元22,320(LEs),嵌入式存儲單元594(Kbits),本設(shè)計共8個大類,15個模塊組成,包括SPI總結(jié)模塊、LED模塊、PWM模塊、A/D模塊、D/A模塊等,約占80%的片上資源。通用接口modelsim仿真見圖4,設(shè)備接口modelsim仿真見圖5。
在FPGA設(shè)計中,多模塊集成IC設(shè)計方法實現(xiàn)了將多個不用模塊或多個相同模塊的集成設(shè)計,每個模塊具有通用的設(shè)計接口,簡化了通訊接口設(shè)計,提高了模塊的可移植性;靈活的地址分配設(shè)計,方便的多個模塊的連接,形成了總線設(shè)備多元化設(shè)計;內(nèi)部寄存器的設(shè)計,可以針對模塊內(nèi)部數(shù)據(jù)進行讀寫,方便調(diào)試??傊?,多模塊集成IC設(shè)計簡化了模塊接口設(shè)計,增加了軟件設(shè)計的可重構(gòu)性和可移植性,減少了產(chǎn)品設(shè)計開發(fā)周期。
圖4 通用接口modelsim仿真
圖5 設(shè)備接口modelsim仿真
[1] SANIR P.Verilog數(shù)字設(shè)計與綜合[M].2版.北京:電子工業(yè)出版社,2009.