引言
在近代戰爭中,軍事信息傳遞,例如通過發電報的方式,電報信息難免被敵方截獲,而我們又不得不通過發電報傳輸信息(喲,都近代了,就別飛鴿傳書了),所以發送方需要對信息進行加密,也就是編碼,然后以一種雙方事先溝通好的編碼方式(密碼本就是這樣來的),在接收方再進行反編碼,也就是解碼,這樣,即使信息被截獲了,短時間內也難以被破解;這就是編碼器的重要性。
編碼器的邏輯功能就是將多輸入的每一個高、低電平信號轉為一個對應的二進制代碼,它分為普通編碼器和優先編碼器。對于普通編碼器,任何時刻只允許輸入一個編碼信號,否則輸出將發生混亂。
一、普通編碼器的 Verilog 代碼實現和 RTL 電路實現
module Encoders(
input wire [7:0] d, // 輸入信號_未編碼
output reg [2:0] b = 3'b000 // 輸出信號_已編碼
);
always @ ( d ) begin
case ( d )
8'b0000_0001 : b <= 3'b000;
8'b0000_0010 : b <= 3'b001;
8'b0000_0100 : b <= 3'b010;
8'b0000_1000 : b <= 3'b011;
8'b0001_0000 : b <= 3'b100;
8'b0010_0000 : b <= 3'b101;
8'b0100_0000 : b <= 3'b110;
8'b1000_0000 : b <= 3'b111;
default : b <= 3'b000;
endcase
end
endmodule
這是一個 8 線 ? 3 線普通編碼器,基于查找表 LUT(Look Up Table)的方式實現的一個電路,其 RTL 電路圖如下所示:
普通編碼器的 RTL 電路圖
優先編碼器其實就是允許同時在幾個輸入端有輸入信號,編碼器按輸入信號排定的優先順序,只對同時輸入的幾個信號中優先權最高的一個進行編碼,即已經排好了隊,從高位向低位遞減。比如,8 線 - 3 線優先編碼器的輸入有 “0、1、2、3、4、5、6、7” 八位輸入,而輸出只有 “Y0、Y1、Y2” 三位輸出,在這里,就是當 “7” 為 “1” 的時候,即 “7” 為有效值的時候,無論 “0” 到 “6” 之間為何值,都只對 “7” 進行編碼,高位優先判斷是否有效,以此類推。
二、優先編碼器的 Verilog 代碼實現和 RTL 電路實現
module Encoders(
input wire [7:0] d, // 輸入信號_未編碼
output reg [2:0] b = 3'b000 // 輸出信號_已編碼
);
always @ ( d ) begin
casex ( d )
8'b0000_0001 : b <= 3'b000;
8'b0000_001x : b <= 3'b001;
8'b0000_01xx : b <= 3'b010;
8'b0000_1xxx : b <= 3'b011;
8'b0001_xxxx : b <= 3'b100;
8'b001x_xxxx : b <= 3'b101;
8'b01xx_xxxx : b <= 3'b110;
8'b1xxx_xxxx : b <= 3'b111;
default : b <= 3'bxxx;
endcase
end
endmodule
這是一個 8 線 ? 3 線優先編碼器,基于查找表 LUT(Look Up Table)的方式實現的一個電路,其 RTL 電路圖如下所示:
優先編碼器的 RTL 電路圖
附加說明,其實,Verilog 中的 if - else 語句便隱含了優先特性,可以進行優先編碼器的設計。中級及以上的 FPGA 玩家應該能懂的。
總結
編碼器是非常重要的一個數字電路組合邏輯模塊,不僅可以大大減少傳輸數據的信號線的數量,還是密碼學的一部分,基于某種協議的編碼能夠讓雙方之間的通訊較為安全。
-
編碼器
+關注
關注
45文章
3651瀏覽量
134769 -
RTL
+關注
關注
1文章
385瀏覽量
59853 -
LUT
+關注
關注
0文章
49瀏覽量
12531 -
Verilog設計
+關注
關注
0文章
20瀏覽量
6540
發布評論請先 登錄
相關推薦
評論