作者pupucar (knock!knock!)
看板Electronics
标题Re: [问题] Verilog十六分之几的做法
时间Sat Oct 4 14:47:43 2008
刚吃饱没事干 做点脑力训练
以下提供我的作法
※ 引述《kuraki7up (Make Mai Day)》之铭言:
: 我有一个16bit的值(reg [15:0]Origin)
: 须做其1/16,2/16......15/16,16/16的数值
: 我现在的做法是 先取1/2 {1'b0,Origin[15:1]}
: 1/4 {2'b0,Origin[15:2]}
: 1/8 {3'b0,Origin[15:3]}
: 1/16{4'b0,Origin[15:4]}
这作法基本上没错,到这一步为止,不会用到LOGIC GATE,仅拉线
: 之後再相加 5/16=1/4+1/16
: 不过这样的做法 占了我很大的logic gates
: 请问有无更好的做法 谢谢
这里的想法也没错,我也觉得这样最省
但你说占很大LOGIC GATE
我想可能是你用了太大的MUX或太多的加法器
要省面积的方法,最基本的就是resource sharing
我的话会这样写(虚拟码)
S[3:0] //选择线
out //输出值
//A0~A3, out都是16bit bus
assign A0 = S[0]?(1/16的值):16'b0;
assign A1 = S[1]?(1/8的值):16'b0;
assign A2 = S[2]?(1/4的值):16'b0;
assign A3 = S[3]?(1/2的值):16'b0;
out = (A0+A1) + (A2+A3) + (1/16的值);
这样,用了4个16bit 2对1MUX,4个16bit加法器
我相信有更省的作法(EX:在处理值较小的路径时,可以用小於16bit的MUX和加法器)
但我懒的想了XD,希望对你有帮助。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.118.121.133
1F:推 arclitetank:用sequence machine做的话 4 cycle->换到剩一个adder 10/04 23:31
2F:→ colinshih:16/16: full passing through, +1/16 对变错 划蛇脚 10/18 03:54
3F:→ pupucar:不+1/16仅能输出0/16~15/16 划蛇脚? 断尾蛇? 10/30 20:32