在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3835|回复: 10

[求助] 撕代码,找出三个8bit数中的中位数,并且想要在一拍内输出结果

[复制链接]
发表于 2022-8-1 20:26:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
RT,毫无思路。。。
发表于 2022-8-2 08:08:33 | 显示全部楼层
高电平做1-2 2-3 3-1(不一定非要这样,可以有很多别的更优化的选择),低电平按照对应符号查表输出结果。
发表于 2022-8-2 08:54:52 | 显示全部楼层
wire var1_grt_var2 = (var1 > var2);
wire var1_grt_var3 = (var1 > var3);
wire var2_grt_var3 = (var2 > var3);
wire var1_grt_var3 = (var1 > var3);

wire middle = var1_grt_var2 ? (var2_grt_var3 ? var2 :
                                             var1_grt_var3 ? var3 :
                                                                    var1)
                                          : (var1_grt_var3 ? var1 :
                                             var2_grt_var3 ? var3 :
                                                                    var2);
发表于 2022-8-2 08:55:50 | 显示全部楼层
好像可以直接三个数比大小取中间数,剩下的交给综合工具优化
发表于 2022-8-2 09:17:42 | 显示全部楼层
假设A,B,C三个数字,index分别是(0,1,2)(假如从大到小排列是B,C,A), 然后两两组合做大小比较(应该有三组,即(A,B),(B,C),(A,C)),按照index从大到小排列这三组输出应该是(1,0),(1,2),(2,0), 我们只需简单的将这三组表示大小的index输出的第一个index做异或处理即可得到中位数的index
发表于 2022-8-2 09:35:48 | 显示全部楼层


phoenixson 发表于 2022-8-2 09:17
假设A,B,C三个数字,index分别是(0,1,2)(假如从大到小排列是B,C,A), 然后两两组合做大小比较(应该有三组 ...


可说详细说下原理
发表于 2022-8-6 14:39:10 | 显示全部楼层
本帖最后由 thjan65 于 2022-8-6 14:51 编辑

A>=B 且 B>=C ,則B
A>=C 且 C>=A ,則C
B>=A 且 A>=C ,則A
B>=C 且 C>=A ,則C
C>=A 且 A>=B ,則A
C>=B 且 B>=A ,則B


wire [7:0] tmp;reg [7:0] OUT;

assign tmp = ((A>=B) & (B>=C)) ? B:
                    ((A>=C) & (C>=A)) ? C:
                    ((B>=A) & (A>=C)) ? A:
                    ((B>=C) & (C>=A)) ? C:
                    ((C>=A) & (A>=B)) ? A: B;
always @(posedge CLK or negedge RSTn) begin
   if (~RSTn) OUT <= 8'h0;
   else OUT <= tmp;
end



发表于 2022-8-6 21:50:21 | 显示全部楼层
本帖最后由 innovation 于 2022-8-7 00:08 编辑

在Xilinx的FPGA上我选择这样设计:

image.png

其中LUT6的真值表如下:

image.png

使用了A≥B, B≥C, C≥A三个比较器,一组基于LUT6的Mux。A、B、C三组输入信号的负载数量相同。VHDL代码如下(注:A, B, C输入考虑为无符号数):

image.png

image.png
PS :
1)如果允许两级流水线延迟,可在a_ge_b, b_ge_c, c_ge_a处插入一级寄存器;
2)修改多路选择器的逻辑关系,可变为求三个数的最大值,也可变为求三个数的最小值,消耗的资源和时序性能不变。

发表于 2022-8-8 10:37:47 | 显示全部楼层


innovation 发表于 2022-8-6 21:50
在Xilinx的FPGA上我选择这样设计:


我c,兄弟你也太认真了


发表于 2022-8-8 10:59:16 | 显示全部楼层


rvisk 发表于 2022-8-8 10:37
我c,兄弟你也太认真了


见笑了,楼主要求“撕”代码呀,不认真的话“撕”不明白呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 04:41 , Processed in 0.023544 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表