找回密码
 立即注册
楼主: Sue

位宽转换

[复制链接]

16

主题

90

回帖

330

积分

管理员

积分
330
发表于 2025-3-19 22:52:43 来自手机 | 显示全部楼层
xxppno1 发表于 2025-3-19 21:41
其实我也想问下,你觉得的shi山代码,是读不懂设计意图,还是格式不好,还是什么? ...

简单的说  前后连在一块,再一刀一刀切下来,就这么简单处理,处理上可以用fifo

不过用deepseek生成代码更6,指导的好比我这的还好

1

主题

3

回帖

29

积分

娃娃

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

您好,是想都要的,现在是在用usb3.0传输数据,usb是32位的一次发四个字节,现在想将usb数据通过视频显示出来,所以想转24

6

主题

108

回帖

289

积分

壮年

积分
289
发表于 2025-3-19 23:19:38 | 显示全部楼层
Sue 发表于 2025-3-19 22:58
您好,是想都要的,现在是在用usb3.0传输数据,usb是32位的一次发四个字节,现在想将usb数据通过视频显示 ...

也就是32bit数据都要是吧,然后前后拼接?

1

主题

3

回帖

29

积分

娃娃

积分
29
 楼主| 发表于 2025-3-20 12:06:04 | 显示全部楼层
xxppno1 发表于 2025-3-19 23:19
也就是32bit数据都要是吧,然后前后拼接?

对的对的

6

主题

108

回帖

289

积分

壮年

积分
289
发表于 2025-3-20 14:29:38 | 显示全部楼层

今天之内给你写出来哈

1

主题

3

回帖

29

积分

娃娃

积分
29
 楼主| 发表于 2025-3-20 17:42:00 | 显示全部楼层

好的我看看,谢谢大哥

6

主题

108

回帖

289

积分

壮年

积分
289
发表于 2025-3-20 18:19:49 | 显示全部楼层
Sue 发表于 2025-3-20 17:42
好的我看看,谢谢大哥


module data_converter2 (
  input        clk,
  input        rst,
  input        in_valid,
  output logic in_ready,
  input [31:0] in_data,
  output logic out_valid,
  input        out_ready,
  output logic [23:0] out_data
);

typedef enum logic [1:0] {
  S0, S1, S2, S3
} state_t;

state_t state;
logic [23:0] saved_data;

// Input control
assign in_ready = (state != S3) && out_ready;

// Output generation
always_comb begin
  case(state)
    S0: out_data = in_data[23:0];
    S1: out_data = {in_data[15:0], saved_data[7:0]};
    S2: out_data = {in_data[7:0], saved_data[15:0]};
    S3: out_data = saved_data;
    default: out_data = 24'b0;
  endcase
end

// Output validation
assign out_valid = (state == S3) ? 1'b1 : (in_valid & in_ready);

// Main state machine
always_ff @(posedge clk or posedge rst) begin
  if (rst) begin
    state <= S0;
    saved_data <= 24'b0;
  end else begin
    if (out_valid && out_ready) begin
      case(state)
        S0: begin
          if (in_valid && in_ready) begin
            saved_data[7:0] <= in_data[31:24];
            state <= S1;
          end
        end
        
        S1: begin
          if (in_valid && in_ready) begin
            saved_data[15:0] <= in_data[31:16];
            state <= S2;
          end
        end
        
        S2: begin
          if (in_valid && in_ready) begin
            saved_data <= in_data[31:8];
            state <= S3;
          end
        end
        
        S3: begin
          state <= S0;
          saved_data <= 24'b0;
        end
      endcase
    end
  end
end

endmodule
用Deepseek出的这个吧, 我那个估计你理解费劲,我那个还有个小问题.

4

主题

24

回帖

95

积分

少年

积分
95
发表于 2025-3-21 14:42:46 | 显示全部楼层
xxppno1 发表于 2025-3-19 21:41
其实我也想问下,你觉得的shi山代码,是读不懂设计意图,还是格式不好,还是什么? ...

deepseek的回答:逻辑混乱,缺乏注释或文档。重复代码多,耦合度高。频繁出现Bug,修复一个问题可能引发更多问题。多人经手后风格混杂,难以扩展或重构。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-2 16:41 , Processed in 0.044989 second(s), 18 queries .

Powered by CrazyFPGA X3.5

© 2001-2025 Discuz! Team.

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