使用Verilog來(lái)編程FPGA
FPGA是依賴數(shù)字邏輯的數(shù)字器件,計(jì)算機(jī)硬件使用的是數(shù)字邏輯,每一個(gè)計(jì)算,屏幕上每一個(gè)像素的呈現(xiàn),音樂(lè)軌的每一個(gè)note都是使用數(shù)字邏輯構(gòu)成的功能塊來(lái)實(shí)現(xiàn)的。 雖然多數(shù)時(shí)候,數(shù)字邏輯是抽象的數(shù)學(xué)概念,而不是物理電子,邏輯門(mén)以及其它的數(shù)字邏輯器件則是由刻蝕在集成電路上的晶體管來(lái)實(shí)現(xiàn)的。對(duì)于FPGA來(lái)講,可以通過(guò)繪制邏輯門(mén)構(gòu)成的電路,將這些門(mén)映射到FPGA的通用門(mén)上,并將它們連接起來(lái)以實(shí)現(xiàn)你設(shè)想的邏輯設(shè)計(jì)。 另外一種方式是,使用Verilog(或其它的)硬件描述語(yǔ)言來(lái)實(shí)現(xiàn)邏輯。 你依然可以購(gòu)買(mǎi)能夠?qū)崿F(xiàn)小數(shù)量邏輯門(mén)的器件,比如7400,內(nèi)部只有4個(gè)二輸入與非門(mén),然而這些器件只是為了維護(hù)一些古老的系統(tǒng)或用于教學(xué)。
邏輯門(mén)
邏輯門(mén)有輸入和輸出,這些數(shù)字輸入和輸出可以是“高”或者“低”, 無(wú)論是輸入端還是輸出端,所謂的“低”指的是接近于0V(地)的電壓,而“高”一般是超過(guò)提供給該邏輯器件的供電電壓一半以上的電壓,給FPGA提供的電壓一般為1.8V、3.3V或著5V中的一個(gè),多數(shù)的FPGA的工作電壓范圍有一定的冗余度,有些FPGA允許在一個(gè)器件中存在多個(gè)邏輯電壓.
本文引用地址:http://2s4d.com/article/202312/454119.htm與非門(mén)和或非門(mén)都是非常通用的門(mén),因?yàn)橹恍枰聪嗨鼈兊妮斎攵嘶蜉敵龆司涂梢詷?gòu)成其它任何一種門(mén),另外你可以用與非門(mén)或著或非門(mén)構(gòu)成非門(mén),只需要將兩個(gè)輸入信號(hào)連接在一起就可以。例如圖1.6中你可以用3個(gè)或非門(mén)構(gòu)成一個(gè)與門(mén)。
圖1.6 用3個(gè)“或非門(mén)”構(gòu)成一個(gè)“與門(mén)”
De Morgan定律
圖1.6的設(shè)計(jì)利用了邏輯定律中的De Morgan定律 - 將兩個(gè)輸入端“與”后的結(jié)果進(jìn)行取反,和先將兩個(gè)輸入端進(jìn)行取反以后再“或”得到的結(jié)果是一樣的。在圖1.6中,兩個(gè)輸入端信號(hào)先被由“或非門(mén)”構(gòu)成的“非門(mén)”取反以后進(jìn)行“或”操作,再對(duì)輸出的結(jié)果取反。
表1.6 用多個(gè)異或門(mén)構(gòu)成一個(gè)與門(mén)的真值表
二進(jìn)制
我們前面將邏輯門(mén)的輸入和輸出端以電壓的高低來(lái)表示,我們還可以將它們用數(shù)字來(lái)表示 - 1表示高電平,0表示低電平,這樣我們就可以想明白計(jì)算機(jī)是如何使用邏輯門(mén)來(lái)操作數(shù)字的了。當(dāng)然,我們僅有數(shù)值0和1是不夠用的。 在我們的生活中都是使用10進(jìn)制,主要的原因是因?yàn)槲覀冇?0根手指,如果我們的老祖宗使用鼻子來(lái)計(jì)數(shù),那就是二進(jìn)制了,因?yàn)榻Y(jié)果只有0還是1,如果要表示多于1個(gè)的數(shù)字,你可以用多個(gè)二進(jìn)制數(shù)值(bit - binary digit)來(lái)表示。
表1.8 用二進(jìn)制和十進(jìn)制表示的數(shù)字0到7
用邏輯實(shí)現(xiàn)的“加法”
你可以用邏輯門(mén)來(lái)對(duì)二進(jìn)制數(shù)進(jìn)行運(yùn)算,因?yàn)槎M(jìn)制數(shù)只是用“位”(bit)表示的數(shù)值,你可以用邏輯針對(duì)任何數(shù)值進(jìn)行運(yùn)算。圖1.8展示了如何用邏輯門(mén)進(jìn)行一個(gè)二進(jìn)制加。
圖1.8 一個(gè)1位加法器
表1.9 一個(gè)1位加法器的真值表
從表中可以看出,如果輸入端A和B都是0,加法的結(jié)果位0, 如果其中一個(gè)輸入為1,加法的結(jié)果為1,然后如果兩個(gè)輸入端都為1,加法的位本身就變成了0,但我們希望將進(jìn)位輸出的1放到下一位,在二進(jìn)制中,1+1位0,并一個(gè)進(jìn)位(或十進(jìn)制的2) 這就意味著,如果我們同時(shí)加多于一位的數(shù)值,下一個(gè)加法的部分將有3個(gè)輸入(A、B和進(jìn)位輸入),這就需要三個(gè)位的加法,圖1.9展示了計(jì)入進(jìn)位以后的加法。
圖1.9 一個(gè)帶有進(jìn)位輸入端的1位加法器
你也許永遠(yuǎn)不會(huì)用這種方式通過(guò)多個(gè)門(mén)來(lái)構(gòu)建一個(gè)加法器,因?yàn)橛鞋F(xiàn)成的加法器芯片可以用于你的設(shè)計(jì),在這里你能夠看到加法器是如何通過(guò)門(mén)電路構(gòu)成的。 如果我們有8級(jí)這樣的電路,就可以實(shí)現(xiàn)2個(gè)字節(jié)的加法操作,每一個(gè)計(jì)算機(jī)的中央處理器(CPU)都有這種用邏輯門(mén)搭建的硬件加法器,一個(gè)32位的處理器可以同時(shí)處理32位的數(shù)值,一個(gè)64位的機(jī)器能夠通過(guò)64個(gè)圖1.9的方式同時(shí)將64位數(shù)字加起來(lái)。
評(píng)論