帶有48字節RAM的日歷時(shí)鐘芯片的設計 作者: 時(shí)間:2007-03-09 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 摘要:介紹了一種帶有48字節RAM的日歷時(shí)鐘芯片的設計,該芯片具有振蕩、分頻、可編程的計時(shí)計數、定時(shí)鬧響和中斷輸出等功能。該芯片基于Verilog HDL描述,采用模塊化設計,可擴展性好;并利用Synopsys公司的VCS和DC工具分別對設計進(jìn)行了成功的系統仿真和綜合;同時(shí)還簡(jiǎn)單介紹了ASIC設計的整個(gè)流程。 關(guān)鍵詞:Verilog HDL 系統仿真 邏輯綜合 數字電子系統 日歷時(shí)鐘芯片應用非常廣泛,例如在IC卡電子門(mén)鎖中,可利用日歷時(shí)鐘芯片的定時(shí)時(shí)鐘計數功能,在IC卡內輸入客人住房時(shí)的時(shí)間段,只有當時(shí)間段所包含的時(shí)間與日歷時(shí)鐘所記錄的時(shí)間一致時(shí),方可開(kāi)門(mén),否則IC卡為無(wú)效卡。 利用Synopsys公司提供的集成電路設計工具VCS和DC,設計了一個(gè)帶有48字節RAM的日歷時(shí)鐘芯片,包括該芯片RTL級代碼的編寫(xiě)、功能仿真和綜合,達到了預期的目標。該芯片的具體性能指標是:工作電源電壓為2.5~6V;日歷時(shí)鐘工作電源和RAM數據保持電源電壓為1~6V;工作電流最大為50μA;四年日歷時(shí)鐘,24或12小時(shí)格式,32.768kHz時(shí)基;48字節RAM,自動(dòng)字節地址增量;具有可編程的鬧鐘、定時(shí)和中斷功能。 1 ASIC設計概述 隨著(zhù)深亞微米技術(shù)的發(fā)展,數字集成電路的規模已經(jīng)發(fā)展到上百萬(wàn)門(mén)。未來(lái)的二十多年里,一塊ASIC芯片中將會(huì )達到上千萬(wàn)門(mén)的規模。這樣的電路規模,仿真和綜合優(yōu)化在開(kāi)發(fā)過(guò)程中發(fā)函來(lái)發(fā)函重要。較復雜的數字電子系統設計往往采用自頂向下(Top-Down)的方法,設計流程可以分為以下幾個(gè)主要的部分:系統級設計、設計實(shí)現、設計驗證和流片封裝。深亞微米工藝下的ASIC設計流程[2]如圖1所示。圖1本文主要介紹芯片的系統級設計和所有邏輯設計,生成可供物理設計的經(jīng)過(guò)驗證的門(mén)級網(wǎng)表文件。 2 芯片的系統級設計 系統級設計是芯片設計的第一步,也是關(guān)鍵的一步。首先根據設計要求提出設計構想,然后再對這一構想進(jìn)行細化。本設計把整個(gè)系統分成幾大模塊,即產(chǎn)生32.768kHz的振蕩器(這個(gè)模塊不用設計)、256分頻器、48字節RAM和地址寄存器。設計構想如圖2所示。 RAM中的00~0FH單元是一些帶有特殊功能的寄存器,00H單元是控制芯片所有功能和操作的狀態(tài)寄存器,通過(guò)設置狀態(tài)寄存器,可以選擇32.768kHz時(shí)鐘模式或計數模式。在日歷時(shí)鐘模式中,1/128秒、秒、分、小時(shí)、年/日期、星期/月都是以BCD碼分別存放在01H~06H單元的寄存器中;而在事件計數模式中,則對輸入到振蕩器輸入端(OSCI)的脈沖計數,事件計數器為6位BCD碼。07H單元是能存儲最大數為99天的定時(shí)器。08H是控制定鬧、定時(shí)和中斷輸出功能的鬧鐘控制寄存器。09H~0FH單元用于儲存用戶(hù)信息。 對于這樣的設計,傳統的方法是使用中小規模集成電路來(lái)構成,本文則用Verilog HDL描述來(lái)實(shí)現。整個(gè)芯片采用模塊化設計方式和Top-Down設計方法,根據寄存器的不同劃分成模塊,然后用測試程序TestBench對頂層模塊進(jìn)行仿真;仿真通過(guò)后利用廠(chǎng)家提供的工藝庫及時(shí)序約束腳本文件對其進(jìn)行綜合;綜合通過(guò)后生成門(mén)級網(wǎng)表文件,然后再用廠(chǎng)家提供的仿真庫對門(mén)級網(wǎng)表進(jìn)行綜合后仿真。本文設計用到的工藝庫是臺灣旺宏公司(Macronix,MXIC)提供的基本單元庫(slow.db和fast.db)、基本符號單元庫(slow.sdb)和用于綜合后仿真的庫文件仿真庫(models.v)。這是一個(gè)同步時(shí)序電路的設計,所以保證正確的時(shí)序是設計的關(guān)鍵,本設計中有四個(gè)時(shí)鐘: (1)系統時(shí)鐘clksys,是外部微控制器提供的時(shí)鐘信號,用作寄存器讀、寫(xiě)時(shí)鐘信號; (2)測試時(shí)鐘clktest,是整個(gè)芯片的測試時(shí)鐘信號,一般限于廠(chǎng)家使用。 (3)時(shí)基時(shí)鐘clk32,定時(shí)方式時(shí),外部石英晶振提供的32.768kHz振蕩信號經(jīng)過(guò)256分頻后得到時(shí)鐘信號(evt128),作為RAM前16字節特殊寄存器的同步時(shí)鐘信號。 (4)計數時(shí)鐘clkevt,計數模式時(shí)的外部計數脈沖信號。 圖3是日歷時(shí)鐘頂層模塊端口示意圖,讀選通信號w、寫(xiě)選通信號r、片選信號csn和RAM地址控制信號addr[5:0]是由外部微處理器提供的。當寫(xiě)信號w為真時(shí),將輸入數據datin[7:0]寫(xiě)入存儲器被選中的地址;當讀信號r為真時(shí),將從存儲器被選中的地址中輸出數據datu[7:0]。當滿(mǎn)足下面兩個(gè)條件之一時(shí),中斷請求信號intz輸出低電平:①00H單元中的第0位為1,并且08H單元的第3位為1。 由于篇幅有限,在這里只寫(xiě)出頂層模塊rtc的部分設計程序,具體如下: ‵timescale 10ns/10ps //模擬時(shí)間定標; module rtc (clktest,clksys,clk32,clkevt,csn,rstz,w,r, addr,datin, datu, intz); input clktest,clkysy,clk32,clkevt,csn,rstz,w,r; //輸入輸出端口說(shuō)話(huà) input[7:0] datin; input[5:0] addr; output[7:0] datu; output intz; reg[7:0] datu; //設定變量的數據結構; ctl_status c0 ( clksys,evt128,rstz,w,cs00,……); //調用00H單元子模塊; sec128 c1 (clksys, clktest, evt128, rstz,……); //調用01H單元子模塊; sec c2 (clksys, evt128, clktest,rstz,……); //調用02H單元子模塊; …… int c20 ( timer_flag,alarm_flag,……); //調用產(chǎn)生中斷模塊; always @ ( addr or stop_soft or ) begin if(cs %26;amp; r) begin //根據控制地址信號而輸出RAM中各寄存器的數據; case (addr) 0:datu={stop_soft,hold_flag,func_mode,mask_flag,alarm_en,alarm_flag,time_flag}; 1:datu=data_latch[15:8]; …… 47:datu=data_ram[255:248]; default:datu=8‵h00; endcase end else datu=8‵h00; end endmodule 在頂層模塊中調用了根據不同功能而編寫(xiě)的20個(gè)子模塊,如ctl_status.v、sec.v和ram.v等。其中RAM存儲器的1F~2FH單元是模擬電路,要用全定制的方法生成。而在數字集成電路設計中,仿真時(shí)經(jīng)常要用到存儲器的行為模型,這里給出的行為模型ram.v用于仿真。3 利用EDA工具進(jìn)行系統仿真 設計人員利用先進(jìn)的EDA工具作為測試平臺,以驗證數字電子系統設計模塊的邏輯功能和時(shí)序功能。雖然不同的EDA工具提供的平臺不同,但都可以對被測試對象加載激勵信號,并通過(guò)波形輸出、文件記錄輸出等方式觀(guān)察和比較仿真結果。加載激勵信號需要設計人員設計測試程序(TestBench)[3],對于較大規模的系統設計,測試程序的設計有時(shí)比本身的程序設計還要復雜。 在本文的設計中,首先對每一個(gè)子模塊設計一個(gè)測試程序,單獨進(jìn)行邏輯仿真,然后再設計一個(gè)測試程序對整個(gè)設計進(jìn)行邏輯仿真。由于篇幅有限,在這里僅寫(xiě)出sec.v的部分測試程序,具體如下: ‵timescale 10ns/10ps module sec_test; reg clksys,evt128,clktest,carry_sec128,rstz,datin,datoout,w; reg[7:0]datin,datout; reg[1:0]func_mode; sec c2 (clksys,evt128,clktest,carry_sec128,rstz,datin, datout,func_mode,w,); always #10 clksys = ~ clksys; always #30 evt128 = ~ evt128; always #50 clktest = ~ clktest; always #80 carry_sec128 = ~ carry_sec128; //產(chǎn)生輸入激勵; initial begin rstz = 0; #90 rstz = 1; end //產(chǎn)生復位信號 initial begin w = 0; #100 w = 1; #5 w = 0; #1100 w = 1; #5 w = 0; end //產(chǎn)生寫(xiě)信號 initial begin func_mode= 0 ; #1000 func_mode = 1; end //功能模式的選擇; initial begin datin= 0 ; #20 datin = 00100101h; #1000 datin = 00010010; end //輸入數據; always @ (func_mode or datin of datout) ﹩ display ("At time %t,func_mode=%b,datin is %b% b,datout is %b",﹩time,func_mode,datin,datout); //輸出模擬結果。 利用Synopsys公司的仿真工具VCS進(jìn)行仿真,無(wú)論在功能上還是在時(shí)序上,都完全符合要求。 4 利用EDA工具進(jìn)行綜合和優(yōu)化 綜合是利用芯片制造商提供的基于電路單元(綜合庫)實(shí)現用硬件描述語(yǔ)言描述的電路功能?,F在許多優(yōu)秀的綜合工具都能借助現有的綜合庫將Verilog HDL源代碼進(jìn)行綜合,轉化成門(mén)級電路圖,并且可以根據設計者施加的約束條件對電路進(jìn)行優(yōu)化,產(chǎn)生面積或者速度達到最優(yōu)的結構,并生成相應的邏輯網(wǎng)表以供后端設計使用。 綜合時(shí)要進(jìn)行延時(shí)計算和設計規則檢查,需要設置的相關(guān)內容主要包括:操作環(huán)境、導線(xiàn)負載模型、設計約束、設計規則約束。通常情況,設計者要先編輯一個(gè)包括這些設置的腳本文件(例如本文編輯的腳本文件rtc.tcl),啟動(dòng)邏輯綜合工具DC后就可,執行文件中的各條指令了。綜合的過(guò)程如圖4所示。下面利用日歷時(shí)鐘實(shí)例簡(jiǎn)單介紹這一過(guò)程。 (1)建立設計環(huán)境 臺灣旺宏公司的0.35μm CMOS標準單元綜合庫slow.db和fast.db包含了與非、或非、非門(mén)等基本邏輯單元,還有選擇器、與或非、或與非等較復雜的組合邏輯以及DFF(D觸發(fā)器)等時(shí)序邏輯單元。利用該庫可以這樣來(lái)建立環(huán)境: set target_library {slow.db fast.db} set link_library {*slow.db fast.db} set search_path "/home/tools/synopsys/library" (2)讀入HDL描述 如果讀入多個(gè)模塊,首先應該讀入的是頂層模塊。要將當前的設計設置為頂層模塊,可以這樣來(lái)設置: read_verilog "home/design/rtl/rtc.v" read_verilog "home/design/rtl/see.v" current_design rtc (3)定義環(huán)境變量 環(huán)境變量輸出網(wǎng)表和輸出報告等路徑設置可以這樣來(lái)定義: netlist_path = "home/design/netlist" report_path = "home/design/report" (4)定義性能約束、時(shí)序約束和面積約束 性能約束主要包括創(chuàng )建時(shí)鐘、輸入延遲和輸出延遲等;綜合的目標是得到最小的面積??梢赃@樣來(lái)設置: creat_clock-period 70-name my_clock [get_ports clksys] set ex_clk[remove_from_collection[all_inputs][get_ports clksys] set_input_delay 4 -clock my_clock ﹩ex_clk set_output_delay 3 -clock my_clock [all_outputs] set_max_area 1 (5)編譯 用compile命令進(jìn)行編譯即可。(6)寫(xiě)門(mén)級網(wǎng)表 綜合后的門(mén)級網(wǎng)表可以用edif文件形式保存,也可以用.V文件形式存放,采用如下命令: write-format verilog-hierarchy-output $netlist_path/rtc.vg 此外,還需要保存延時(shí)信息,以便綜合后仿真,延時(shí)信息一般放在.sdf文件中,采用如下命令: write_sdf ﹩netlist_path/rtc.sdf-version 1.4 (7)給出報告 可以報告綜合出的面積、時(shí)序信息、違反約束路徑以及單元的個(gè)數等,并存放到定義的目錄文件中,下面舉幾個(gè)例子: report_area >$report_path/area.rpt report_timing >$report_path/timing.rpt report_constraint-verbose-all_violators $report_path/constrain.rpt 利用Synopsys公司的邏輯綜合工具DC[4]進(jìn)行綜合和優(yōu)化非常成功。 本文設計主要描述帶有48字節RAM的日歷時(shí)鐘芯片的邏輯設計過(guò)程,并對其成功地進(jìn)行了代碼編寫(xiě)、仿真和綜合,版圖設計等。當然,本邏輯設計不是一蹴而就的。在此過(guò)程中,對各種異常情況都需要認真分析和反復調試。
評論