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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1476|回复: 4

[求助] case语句分支太多如何优化?

[复制链接]
发表于 2021-12-24 14:30:34 | 显示全部楼层 |阅读模式

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

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

x
    现在准备做一个MUX根据16地址来选择524288位数据中的某八位,用CASE来写就会有65536个分支,请问如何优化以减少资源消耗?
begin
    case(addr)
        16'd0     : data = data_temp[7      : 0     ];
        16'd1     : data = data_temp[15     : 8     ];
        16'd2     : data = data_temp[23     : 16    ];
        16'd3     : data = data_temp[31     : 24    ];
        16'd4     : data = data_temp[39     : 32    ];
        16'd5     : data = data_temp[47     : 40    ];
        16'd6     : data = data_temp[55     : 48    ];
        16'd7     : data = data_temp[63     : 56    ];
        16'd8     : data = data_temp[71     : 64    ];
        16'd9     : data = data_temp[79     : 72    ];
        ……
        16'd65533 : data = data_temp[524271 : 524264];
        16'd65534 : data = data_temp[524279 : 524272];
        16'd65535 : data = data_temp[524287 : 524280];
    endcase
end


发表于 2021-12-24 15:25:53 | 显示全部楼层
如果想用寄存器+组合逻辑实现,其实咋写都差不多,楼主的写法就可以,主要是由综合工具进行优化处理。
如果可以接受增加时钟,地址延时一拍输出,也可以采用16位地址、8位数据的ROM或RAM实现,数据固定就用ROM,数据可变就用RAM。
发表于 2021-12-24 15:29:38 | 显示全部楼层
另外,建议用二维数组写法,更简洁一些。wire [7:0] data;
wire [15:0] addr;
reg [7:0] data_temp[65535:0];
assign data = data_temp[addr];
 楼主| 发表于 2021-12-24 15:55:56 | 显示全部楼层


coolbear2021 发表于 2021-12-24 15:25
如果想用寄存器+组合逻辑实现,其实咋写都差不多,楼主的写法就可以,主要是由综合工具进行优化处理。
如果 ...


感谢,因为要当拍输出,所以不能使用RAM来实现啦
发表于 2021-12-29 14:16:50 | 显示全部楼层
哈哈,这么多Case,你咋写呀?为何不采用整数型参数?类似i=addr, data=data_temp[8*i+7:8*i]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-18 14:56 , Processed in 0.021912 second(s), 8 queries , Gzip On, Redis On.

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