找回密码
 立即注册
查看: 280|回复: 17

位宽转换

[复制链接]

1

主题

3

回帖

29

积分

娃娃

积分
29
发表于 2025-3-19 15:03:51 | 显示全部楼层 |阅读模式
有大哥讲一下如何将32位数据转成24位数据的思路吗,能实现好实现吗

4

主题

24

回帖

95

积分

少年

积分
95
发表于 2025-3-19 17:13:18 | 显示全部楼层
module bit32_16
(
    input           clk,  
    input           rst_n,
    input           in_en,
    input  [31:0]   data_in ,
    output          out_en,
    output [15:0]   data_out
   
);
reg  cnt;

always @(posedge clk or negedge rst_n) begin
    if (~rst_n) begin
        cnt  <= 0;
    end
    else begin
        if (in_en) begin
            if (cnt == 1'b0) begin
                cnt <= 1'b1;
            end
            else begin
                cnt<= cnt-1'b1;
            end
        end
    end
end

assign out_en = (cnt == 1'b0) ? in_en : 1'b0;
assign data_out = (cnt == 1'b0) ? data_in[15:0] : data_in[31:16];
endmodule //32_16
之前写的一个32转16能正常用,不知道写的标不标准,大佬们能帮看下嘛

6

主题

108

回帖

289

积分

壮年

积分
289
发表于 2025-3-19 19:18:28 | 显示全部楼层
klxh 发表于 2025-3-19 17:13
module bit32_16
(
    input           clk,  

其实我对这种编码方式就感觉不解, 其实你是想弄个计数器, 但是是不是这个计数器恰好就是状态机里面的状态,是不是写状态机让人更能懂一点. 第二点就是接口的迷惑, in_en是data_in的使能, 但是如果有两个in_en连续呢, 所以我个人感觉用stream接口更为合适 vaild ready data.输出也是,如果的确不用加ready,但是out_en仿佛也没有跟着data_out,说白了就是自己自创的接口协议. 个人见解,仅供参考, 因为我个人觉得让人看懂.

4

主题

24

回帖

95

积分

少年

积分
95
发表于 2025-3-19 20:11:18 | 显示全部楼层
xxppno1 发表于 2025-3-19 19:18
其实我对这种编码方式就感觉不解, 其实你是想弄个计数器, 但是是不是这个计数器恰好就是状态机里面的状态 ...

感谢大佬解惑,当时感觉这个比较简单,就不想写状态机了;至于接口我也想用stream接口,但前面的程序一直都是这个接口

6

主题

108

回帖

289

积分

壮年

积分
289
发表于 2025-3-19 20:20:03 | 显示全部楼层
klxh 发表于 2025-3-19 20:11
感谢大佬解惑,当时感觉这个比较简单,就不想写状态机了;至于接口我也想用stream接口,但前面的程序一直 ...

我记得论坛有个人说,每个模块都验证了没有问题, 但是10个IP连起来就有问题. 我觉得就是都是这种情况, 每个模块并不是独立的, 我交给你一个任务做32转16位, 你还要考虑上面给你数据什么样子的. 这样每个模块都是藕断丝连的. 就算前面接口这样子的,无非是ready不连接了. 综合也不会对资源有任何影响.

6

主题

108

回帖

289

积分

壮年

积分
289
发表于 2025-3-19 20:29:23 | 显示全部楼层
您的问题我就不太明白,32bit是全要做转换还是某些位置不要了, 是相同时钟,还是不同时钟做速率转换?

4

主题

24

回帖

95

积分

少年

积分
95
发表于 2025-3-19 20:40:26 | 显示全部楼层
xxppno1 发表于 2025-3-19 20:29
您的问题我就不太明白,32bit是全要做转换还是某些位置不要了, 是相同时钟,还是不同时钟做速率转换? ...

转换是因为sdram是32bit的,只存16bit的话sdram就不够大,然后要传给hdmi那里rgb565

6

主题

108

回帖

289

积分

壮年

积分
289
发表于 2025-3-19 20:49:56 | 显示全部楼层
klxh 发表于 2025-3-19 20:40
转换是因为sdram是32bit的,只存16bit的话sdram就不够大,然后要传给hdmi那里rgb565 ...

你可能没明白我说什么, 我的意思,如果以后还遇见类似问题, 你这个代码除非读一遍, 一般人不敢用的, 但是如果接口是统一的, 你敢拿来就用. 这就是为什么xilinx 要统一成axi接口, axi真剩逻辑吗 肯定不是, 但是统一了接口, 可以让编码更加的专一, 不需要考虑上下游的问题, 只需要考虑自己模块. 否则就会出现10个ip都对, 连起来就不对的情况

4

主题

24

回帖

95

积分

少年

积分
95
发表于 2025-3-19 20:54:10 | 显示全部楼层
xxppno1 发表于 2025-3-19 20:49
你可能没明白我说什么, 我的意思,如果以后还遇见类似问题, 你这个代码除非读一遍, 一般人不敢用的, 但是 ...

确实是这样,这个代码前面的程序就是shi山,后面也不好改,感谢大佬解答

6

主题

108

回帖

289

积分

壮年

积分
289
发表于 2025-3-19 21:41:12 | 显示全部楼层
klxh 发表于 2025-3-19 20:54
确实是这样,这个代码前面的程序就是shi山,后面也不好改,感谢大佬解答 ...

其实我也想问下,你觉得的shi山代码,是读不懂设计意图,还是格式不好,还是什么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|CrazyFPGA ( 粤ICP备2023025753号 )

GMT+8, 2025-4-2 16:50 , Processed in 0.048536 second(s), 20 queries .

Powered by CrazyFPGA X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表