基本運算邏輯和它們的Verilog HDL 模型

4.多路器

多路選擇器(Multiplexer)簡稱多路器,它是一個多輸入、單輸出的組合邏輯電路,在數
字系統中有着廣泛的應用。它可以根據地址碼的不同,從多個輸入數據中選取一個,讓其
輸出到公共的輸出端。在算法電路的實現中多路器常用來根據地址碼來調度數據。我們可
以很容易地寫出一個有兩位地址碼,可以從四組輸入信號線中選出一組通過公共輸出端輸
出的功能表。
在這裏插入圖片描述
如;

module Mux_8( addr,in1, in2, in3, in4, in5, in6, in7, in8, Mout, nCS);
input [2:0] addr;
input [width-1] in1, in2, in3, in4, in5, in6, in7, in8;
output [width-1] Mout;
parameter width = 8;
always @ (addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8)

	begin
		if (!ncs)
			case(addr)
			3’b000: Mout = in1;
			3’b001: Mout = in2;
			3’b010: Mout = in3;
			3’b011: Mout = in4;
			3’b100: Mout = in5;
			3’b101: Mout = in6;
			3’b110: Mout = in7;
			3’b111: Mout = in8;
		endcase
	else
		Mout = 0;
	end
endmodule

這是一個帶使能控制信號的數據位寬可以由用戶定義的八路數據選擇器模塊,綜合工具能自動把以上原代碼綜合成一個數據位寬爲8 的八路選一數據多路器。如果在實例引用時分別改變參數width 值爲16 和32,綜合工具就能自動把以上原代碼分別綜合成數據寬度爲16 位和32 位的八選一數據多路器。

5.總線和總線操作

總線是運算部件之間數據流通的公共通道。在硬線邏輯構成的運算電路中只要電路的規模允許,我們可以比較自由地來確定總線的位寬,因此可以大大提高數據流通的速度。適當的總線的位寬,配合適當並行度的運算邏輯和步驟能顯著地提高專用信號處理邏輯電路的運算能力。各運算部件和數據寄存器組可以通過帶控制端的三態門與總線的連接。通過對控制端電平的控制來確定在某一時間片段內,總線歸哪兩個或哪幾個部件使用(任何時間片段只能有一個部件發送,但可以有幾個接收)。

如:

module SampleOfBus( DataBus, link_bus,write );
inout [11:0] DataBus; // 總線雙向端口
input link_bus; // 向總線輸出數據的控制電平
reg [11:0] outsigs;
assign DataBus = (link_bus) ? outsigs : 12 ‘h zzz ;
		//當link_bus 爲高電平時通過總線把存在outsigs 的計算結果輸出
always @(posedge write) //每當write 信號上跳沿時
	begin //接收總線上數據並乘以五
		outsigs <= DataBus * 5; //把計算結果存入outsigs
	end
endmodule

通過以上例子我們可以理解使這個總線連接模塊能正常工作的最重要的因素是與其他模塊的配合,如:何時提供write 信號?此時DataBus 上數據是否已正確提供?何時提供link_bus 電平?輸出的數據是否能被有效地用?控制信號的相互配合由同步狀態機控制的開關陣列控制。

6.流水線

流水線(pipe-line)設計技術:
流水線的設計方法已經在高性能的、需要經常進行大規模運算的系統中得到廣泛的應用,如CPU(中央處理器)等。目前流行的CPU,如intel 的奔騰處理器在指令的讀取和執行週期中充分地運用了流水線技術以提高它們的性能。高性能的DSP(數字信號處理)系統也在它的構件(building-block functions)中使用了流水線設計技術。通過加法器和乘法器等一些基本模塊,這次瞭解有關流水線的一些基本概念,並對採用兩種不同的設計方法:純組合邏輯設計和流水線設計方法時,在性能和邏輯資源的利用等方面的不同進行了比較和權衡。

流水線設計的概念:
所謂流水線設計實際上就是把規模較大、層次較多的組合邏輯電路分爲幾個級,在每一級插入寄存器組暫存中間數據。K 級的流水線就是從組合邏輯的輸入到輸出恰好有K 個寄存器組(分爲K 級,每一級都有一個寄存器組)上一級的輸出是下一級的輸入而又無反饋的電路。

  • 流水線加法器與組合邏輯加法器的比較

採用流水線技術可以在相同的半導體工藝的前提下通過電路結構的改進來大幅度地提高重複多次使用的複雜組合邏輯計算電路的吞吐量。下面是一個n 位全加器的例子,如圖5.7所示爲實現該加法功能需要三級電路:(1)加法器輸入的數據產生器和傳送器;(2)數據產生器和傳送器的超前進位部分;(3)數據產生、傳送功能和超前進位三者求和部分。
在這裏插入圖片描述
在n 位組合邏輯全加器中插入三層寄存器或寄存器組,將它轉變爲n 位流水線全加器,如圖5.8(b)所示。由於進位C-1 既是第一級邏輯的輸入,又是第二級邏輯輸入,因此將C-1 進位改爲流水線結構時需要使用兩級寄存器。同樣地,發生器輸出在作爲求和單元的輸入之前,也要多次插入寄存器。作爲求和單元的輸出,進位Cout 要達到同一流水線的級別也需要插入兩層寄存器。
在這裏插入圖片描述
若用擁有840 個宏單元和312 個有寄存能力I/O 單元的Lattice ispLSI8840 分別來實現16 位組合邏輯全加器和16 位流水線全加器並比較它們的運行速度, 對於16 位組合邏輯全加器, 共用了34 個宏單元。執行一次計算需經過3 個GLB 層,每次計算總延遲爲45.6ns。而16 位流水線全加器共用了81 個宏單元。執行一次計算只需經過1 個GLB 層,每次計算總延遲爲15.10ns(但第一次計算需要多用三個時鐘週期),吞吐量約增加了三
倍。
在這裏插入圖片描述

  • 流水線乘法器與組合邏輯乘法器的比較:
    首先,我們使用一個44 乘法器的例子來說明部分積乘法器的基本概念。然後,通過一個複雜得多的610 乘法器來比較流水線乘法器和組合邏輯乘法器這兩個不同設計方法的實現在性能上有何差異。

如圖5.9 所示,44 乘法器可以被分解爲部分積的向量和(或稱加權和),比如說是16 個11 乘法器輸出的向量和。這裏並沒有直接在44 乘法器的每一級都插入寄存器以達到改爲流水線結構的目的,而是將其分割爲14 乘法器來產生所有的部分積向量。這樣分割的結果是形成了兩級的流水線設計,相對1*1 乘法器的組合具有更短的首次延遲,而吞吐延遲相同。每一級的流水線求和用圖5.8(b)所示的流水線加法器來實現。

我們用一個類似圖5.9 中的44、但更爲複雜的610 流水線乘法器來比較流水線乘法器與非流水線乘法器之間性能上的差異。如圖5.10 所示,該610 流水線乘法器採用6 個10 位乘法器來實現110 乘法–a0 * b[9:0], a1 * b[9:0], a2 * b[9:0], a3 * b[9:0] , a4* b[9:0], a5 * b[9:0] 。由於ai 非0 即1,那麼1*10 乘法器的結果是b[9:0] 或0。這表示下一級的兩個輸入不是b[9:0] 就是0。

這六個多路器的輸出被兩兩一組分成三個相互獨立的組合,並分別用一個3 層的流水線加法器加起來。每一組的兩個多路輸入的下標號差爲3。在這個例子裏,這些組是如下組織的:[a5,a2],[a4,a1],[a3,a0]。[a5,a2]意味着第一個多路器的輸出M(10 位)和第四個多路器的輸出N(10 位)是流水線加法器O 的輸入。同樣地,其餘的兩組分別用流水線加法器P 和Q 加在一起。這樣的兩兩組合能在加的過程中去除額外的部分積項。以[a5,a2]
爲例,其等式一般表示爲:
G(j,0) = {000, M(i,0)} and {N(i,0), 000}
P(j,0) = {000, M(i,0)} xor {N(i,0), 000} (0 <= i <= 9, 0<= j <= 12)
Cj = Gj or Gj-1Pj or Gj-2Pj-1Pj (0<= j <= 12)
or …or G0P1P2P3…Pj
Sk = Pk xor Ck-1 ( 0 <= k <= 13)
由於M 與N 的間隔爲3,M 的高三位和N 的低三位必定是0。因此,M 和N 完成與操作後,G0,G1,G2 和G10,G11,G12 必定爲0。進一步地說,因爲存在這樣一些結果爲0 的發生器,進位的計算就可以得到簡化。既然進位計算得到了簡化,那麼求和運算也就自然得到了簡化。同樣地,流水線加法器P,Q 的輸入間隔也是3。流水線加法器T 和S 的輸入之間的間隔分別爲1 和2。由於加法器T 是一個三層流水線加法器,所以在Q 和S 之間也插入了三層寄存器組從而達到與T 相同的流水線級別。
在這裏插入圖片描述
這裏依然使用Lattice 的ispLSI8840 來比較610 乘法器分別用組合邏輯和流水線實現的執行情況。組合邏輯的610 乘法器在用HDL 實現時消耗了14 個GLB 中的93 個宏單元。執行一次運算需要經過5 個GLB 層,具有的最大傳遞延遲爲73.5ns。相應的是,流水線設計的6*10 乘法器在用HDL 實現時消耗了22 個GLB 中的360 個宏單元。執行一次運算只需經過一個GLB層,計算週期只要15.30ns,比組合邏輯的實現快4 倍有餘。該設計的相應首次延遲是9 個時鐘週期。

總結:
改爲流水線結構是提高組合邏輯吞吐量從而增強計算性能的一個重要辦法。爲獲取高性能所付出的代價是要使用更多的寄存器。要實現這樣大規模的運算部件,只含少量寄存器資源的普通PLD 器件是無法辦到的,必須使用擁有大量寄存器資源的CPLD 或FPGA 器件或設計專用的ASIC。當用Verilog 語言描述流水線結構的運算部件時,要使用結構描述,才能夠真正綜合成設計者想要的流水線結構。簡單的運算符表達式只有在綜合庫中存有相應的流水線結構的宏庫部件時,才能綜合成流水線結構從而顯著地提高運算速度。從這一意義上來說,深入瞭解和掌握電路的結構是進行高水平HDL 設計的基礎。
在這裏插入圖片描述
這裏面的內容涉及較深,等掌握了 大概再來看,也許會更明白一點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章