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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4835|回复: 6

[求助] 如何将一个32位长的数组按照8位一个数组长度逐次写入FIFO,

[复制链接]
发表于 2016-5-10 16:32:22 | 显示全部楼层 |阅读模式

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

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

x
本人现在要将一个32位长的数组写入FIFO,但每次只能8位8位逐次写入,也就是需要4个时钟周期,
可是每次编程都出现错误,下面是本人的程序思想,有点像C语言,请各位赐教一下,应该怎么修改才能实现。

wr_data <= datain [8*i+7:8*i];
i <= i +1;

wr_data <= datain [8*i+7:8*i]; 这个句子一直提示有问题,不知道怎么解决了?
发表于 2016-5-10 16:54:23 | 显示全部楼层
首先要保证datain在这4个周期内没有变化,然后做一个cnt[1:0]
always @(posedge clk or negedge rstn) begin
if(!rstn) wr_data <= 'd0;
else if (cnt == 0) wr_data <= datain[7:0];
else if (cnt == 1) wr_data <= datain[15:8];
else if (cnt == 2) wr_data <= datain[23:16];
else  wr_data <= datain[31:24];
end
 楼主| 发表于 2016-5-11 10:24:17 | 显示全部楼层
回复 2# atomdust


    非常感谢回复!其实32位只是我的一个小测试程序,实际上可能一次传输的数据就不只有32位,可能会达到1000左右个位的数据量,这个时候如果用循环可能会方便很多,但我总不能用case语句实现,因此,还是希望通过循环来实现。这个已经有人建议我再开个Ram块,但我目前还没吸收到,基础太差,只能慢慢来!不知道老兄有没更好的建议,谢谢!
发表于 2016-5-11 14:02:24 | 显示全部楼层
写fifo之前先把数据unpack成8bit的形式,unpack的实现用generate语句实现
发表于 2016-5-11 15:51:40 | 显示全部楼层
用for循环可以吧,别人回复之后,发现并不是真的是这个问题,其实,你可以直接把你的问题放上来解决。
发表于 2016-5-12 10:13:56 | 显示全部楼层
回复 3# hms2006
移位操作简单啊, 我仿照你的应用写了个,仿真是正确的。贴在下面,供参考。



  1.         reg [7:0]i;
  2.        
  3.         always @ (posedge clk or posedge rst)
  4.                 if (rst)
  5.                         i <= 8'b0;
  6.                 else if (i < 3)
  7.                         i <= i + 8'b01;
  8.                 else
  9.                         i <= 8'b0;

  10.         always @ (posedge clk or posedge rst)
  11.                 if (rst)
  12.                         outdata <= 8'b0;
  13.                 else
  14.                         outdata <= indata >> (i << 3);


复制代码
发表于 2016-5-12 10:15:48 | 显示全部楼层
回复 3# hms2006
贴个完整的  更清楚些。



  1. module fifo(input wire clk,
  2.                                 input wire rst,
  3.                                 input wire [31:0] indata,
  4.                                 output reg [7:0] outdata);
  5.                                
  6.         reg [7:0]i;
  7.        
  8.         always @ (posedge clk or posedge rst)
  9.                 if (rst)
  10.                         i <= 8'b0;
  11.                 else if (i < 3)
  12.                         i <= i + 8'b01;
  13.                 else
  14.                         i <= 8'b0;

  15.         always @ (posedge clk or posedge rst)
  16.                 if (rst)
  17.                         outdata <= 8'b0;
  18.                 else
  19.                         outdata <= indata >> (i << 3);
  20.        
  21. endmodule


复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-29 04:26 , Processed in 0.032135 second(s), 8 queries , Gzip On, Redis On.

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