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无用
悬赏问题
- ¥15 delta降尺度计算的一些细节,有偿
- ¥15 Arduino红外遥控代码有问题
- ¥15 数值计算离散正交多项式
- ¥30 数值计算均差系数编程
- ¥15 redis-full-check比较 两个集群的数据出错
- ¥15 Matlab编程问题
- ¥15 训练的多模态特征融合模型准确度很低怎么办
- ¥15 kylin启动报错log4j类冲突
- ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
- ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序