作者zxvc (修行)
看板Electronics
標題[心得] Parameterized Priority Encoder Verilog Code
時間Thu Feb 12 11:51:33 2009
以前我就在想如何寫出一個參數化的priority encoder Verilog code。
這樣就不必為了不同size的priority encoder重複寫一堆類似的code。
昨天終於給我想到了。parameter, for loop又幫了我一個大忙。
首先來看Xilinx ISE的XST User Guide是告訴我們怎麼寫的:
module v_priority_encoder_1 (sel, code);
input [7:0] sel;
output [2:0] code;
reg [2:0] code;
always @(sel)
begin
if (sel[0]) code = 3'b000;
else if (sel[1]) code = 3'b001;
else if (sel[2]) code = 3'b010;
else if (sel[3]) code = 3'b011;
else if (sel[4]) code = 3'b100;
else if (sel[5]) code = 3'b101;
else if (sel[6]) code = 3'b110;
else if (sel[7]) code = 3'b111;
else code = 3'bxxx;
end
endmodule
這種寫法不是parameterized的寫法,它只是一個3-bit 1 of 9的priority encoder。
下面是我parameterized後的寫法:
module PriorityEncoder(Out, In);
parameter EncodingSize = 3;
output reg [EncodingSize-1:0] Out;
input [2**EncodingSize-1:0] In;
integer i;
always@(*)
begin
Out = 'bx;
for(i = 2**EncodingSize-1; i >= 0 ; i = i-1)
begin
if(In[i] == 1)
Out = i;
end
end
endmodule
如果你要呼叫一個3-bit 1 of 9的priority encoder,你可以這樣呼叫:
PriorityEncoder #(3) PriorityEncoderInst(Out, In);
如果你想叫一個4-bit 1 of 17 priority encoder,可以這樣呼叫:
PriorityEncoder #(4) PriorityEncoderInst(Out, In);
我已經試過用Xilinx ISE 8.2對XST User Guide與我寫的priority encoder
合成完的RTL schematic作比較,是完全一樣的。
這個code再次讓我們見識到parameter+for loop的強大、方便。
--
西方三聖:
http://p8.p.pixnet.net/albums/userpics/8/3/553683/1193661731.jpg
《佛說阿彌陀經》
http://web.cc.ncu.edu.tw/~93501025/amtf.doc
十一面觀音咒:
http://file.buda.idv.tw/music/DBZFY04.mp3
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.236.24
※ 編輯: zxvc 來自: 140.115.236.24 (02/12 11:52)
※ 編輯: zxvc 來自: 140.115.220.219 (02/12 12:53)
1F:推 duffrose:恩,有建設性。有做IP的實力。 02/12 14:31
2F:推 youwin0125:推 02/12 15:24
3F:推 zerocustom00:很C的寫法~ 02/13 22:19
4F:→ colinshih:IP?? 認真的嗎? 科科 02/16 02:31