作者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