江湖小生哦 2021-11-01 17:24 采纳率: 100%
浏览 47
已结题

verilog如何实现同一变量在不同时序下的值组合成一条数据输出?

vivado IP核调用了一个位数为32位,深度为7的伪双口RAM,请问各位怎么把7个不同时序读出的7个32位数据组合输出成一个234位的数据并输出

  • 写回答

2条回答 默认 最新

  • 烧了佛像来取暖 2021-11-01 19:35
    关注

    不考虑重置、寄存器x态传递的情况下提供一种思路,也可以使用状态机实现,更容易思考

    整体思路是ram的数据是顺序输出的情况下,需要读7拍将ram的数据全部取出,每次取出需要赋值给输出的不同位宽。

    reg [2:0]      raddr;//addr read addr
    reg [223:0]  dout;//data out
    reg [7:0]      width_32;
    
    wire [31:0]   ram_dout;//ram读取的数据
    wire             read_flag;//允许读的指示位(高电平指示),需要你前面的RTL指定好,什么时候7个数据已经存好了,允许读取
    wire             ram_dout_valid;//ram读数据有效指示位,这里假设ram读数据只延迟一个clk,所以对read_flag打一拍
    wire             dout_valid;//指示拼接好的数据有效,这里指示位只持续了一个时钟
    
    always @(posedge clk) begin
        ram_dout_valid <= read_flag;
    end
    
    always @(posedge clk) begin
        if (read_flag) begin
            raddr <= raddr + 1'd1;        
        end else begin
            raddr <= 3'd0;
        end
    end
    
    always @(posedge clk) begin
        if (ram_dout_valid) begin
            width_32 <= width_32 + 5'd32;        
        end else begin
            width_32 <= 8'd0;
        end
    end
    
    always @(posedge clk) begin
        if  (ram_dout_valid) begin
            dout[wdith_32 + 5'd31: width_32] <= ram_dout;
        end
    end
    
    always @(posedge clk) begin
        if (ram_dout_valid && !read_flag) begin
            dout_valid <= 1'd1;
        end
    end
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 创建了问题 11月1日

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行