LEC2 Workbench系列技術(shù)博文主要關(guān)注萊迪思產(chǎn)品的應(yīng)用開(kāi)發(fā)問(wèn)題。這些文章由萊迪思教育能力中心(LEC2)的FPGA設(shè)計(jì)專(zhuān)家撰寫(xiě)。LEC2是專(zhuān)門(mén)針對(duì)萊迪思屢獲殊榮的低功耗FPGA和解決方案集合的全球官方培訓(xùn)服務(wù)供應(yīng)商。 萊迪思CrossLink-NX FPGA擁有豐富的特性,可加速實(shí)現(xiàn)高速和低速接口。本文(系列博文的第二篇)描述了使用CrossLink-NX FPGA連接基于SPI的外部組件。第一篇博文介紹了使用兩個(gè)時(shí)鐘域?qū)崿F(xiàn)SPI接口。本文將介紹使用單個(gè)時(shí)鐘域?qū)崿F(xiàn)連接ADC(亞德諾半導(dǎo)體公司的 ADC AD7476)的SPI接口。兩個(gè)案例中呈現(xiàn)了兩種截然不同的實(shí)現(xiàn)接口的方法。 一個(gè)時(shí)鐘域的實(shí)現(xiàn)方案(dac_1c) 單個(gè)時(shí)鐘SPI接口方案的實(shí)現(xiàn)如圖1所示。 圖1:?jiǎn)蝹(gè)時(shí)鐘域SPI接口的實(shí)現(xiàn) 單個(gè)時(shí)鐘域SPI實(shí)現(xiàn)的思路與兩個(gè)時(shí)鐘域非常相似。這里為了便于演示沒(méi)有使用PLL。同時(shí),也不需要sync_stage模塊。由于是單個(gè)時(shí)鐘,需要clock_generator來(lái)生成dac_sck所需的時(shí)鐘下降沿條件,dac_sck則用作狀態(tài)機(jī)dac_fsm的觸發(fā)條件。 clock_generator模塊 圖2所示的clock_generator模塊產(chǎn)生時(shí)鐘信號(hào)dac_clk以及顯示dac_sck的下降沿。圖 3 顯示了 dac_sclk 和 edge_low 的關(guān)系。 圖2:clock_generator模塊框圖 圖3:?jiǎn)蝹(gè)時(shí)鐘域dac_fsm狀態(tài)機(jī)的控制結(jié)構(gòu) 在轉(zhuǎn)換信號(hào)被識(shí)別后,bit_count計(jì)數(shù)器加載值15。每當(dāng)edge_low生效時(shí),串行數(shù)據(jù)在時(shí)鐘信號(hào)CLK_120的上升沿輸出到dac_sdata上。傳輸16個(gè)數(shù)據(jù)位后,dac_fsm de再次發(fā)出就緒信號(hào)并等待下一個(gè)轉(zhuǎn)換信號(hào)。 約束單個(gè)時(shí)鐘域解決方案的設(shè)計(jì) 1. 約束時(shí)鐘CLK_120 2. 約束dac_clk 連接到dac_sck端口的時(shí)鐘信號(hào)由clock_generator生成。CLK_120和dac_sck之間的關(guān)系為4分頻。 3. 約束DAC輸入/FPGA輸出 時(shí)間值t4、t5和t6描述了外部模塊的setup/hold要求。這些要求使用set_output_delay約束進(jìn)行描述。由于是單時(shí)鐘域,因此需要多周期約束。 運(yùn)行單個(gè)時(shí)鐘域解決方案的時(shí)序分析 正如預(yù)期那樣,時(shí)序分析報(bào)告在dac_sdata輸出信號(hào)上顯示出了相同的性能數(shù)據(jù)。 總結(jié) 單個(gè)時(shí)鐘域的方法使用了單個(gè)時(shí)鐘分配網(wǎng)絡(luò),由于不需要同步階段與高級(jí)功能通信,因而具有設(shè)計(jì)上的優(yōu)勢(shì)。 該項(xiàng)目(dac_1c)以及兩個(gè)時(shí)鐘域的項(xiàng)目均可通過(guò)郵箱info@lec2-fpga.com索取。 Eugen Krassin是萊迪思教育能力中心(LEC2)的總裁兼創(chuàng)始人。 |