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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2335|回复: 7

[原创] 求:大家帮忙看下这段地址代码!!!

[复制链接]
发表于 2010-10-13 15:13:51 | 显示全部楼层 |阅读模式

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

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

x
always @(posedge clk or negedge reset)
begin
  if(!reset)
  begin
    addr <= 18'b0;
  end
  else
  begin
    if(data_start)
    begin
      addr <= {1'b0,Data21[15:8],1'b0,Data21[7:0]};
    end
    else if(next_grab & (cnt0 == 2'b11))
    begin
      addr <= addr + 1'b1;
      if(addr == {1'b0,addr[16:9],1'b0,Data44[15:8]})
      begin
        addr <= {1'b0,(addr[16:9] + 1'b1),1'b0,Data44[7:0]};
        if(addr == {1'b0,Data45[15:8],1'b0,Data44[15:8]})
        begin
          addr <= 18'b0;
        end
      end
    end
  end
end
其中Data21[15:0],Data44[15:0],Data45[15:0]均可从先前的数据中得到,属于已知数值。主要是这个addr的跳转问题。
请大家帮忙看下这段代码有什么问题么??谢谢了!!!!
希望大家多多提意见与参考,小弟在此谢过了......非常感谢!!!
发表于 2010-10-15 01:22:51 | 显示全部楼层
阻塞与非阻塞的问题....
发表于 2010-10-15 13:43:17 | 显示全部楼层
个人建议,你写的else if(next_grab & (cnt0 == 2'b11))
    begin
      addr <= addr + 1'b1;
      if(addr == {1'b0,addr[16:9],1'b0,Data44[15:8]})
      begin
        addr <= {1'b0,(addr[16:9] + 1'b1),1'b0,Data44[7:0]};
        if(addr == {1'b0,Data45[15:8],1'b0,Data44[15:8]})
        begin
          addr <= 18'b0;
        end
      end
比较繁琐,你好好把addr的下一个状态规整下,赋值与nextaddr.
发表于 2010-10-15 21:01:53 | 显示全部楼层
对,阻塞的问题,
发表于 2010-10-16 11:56:11 | 显示全部楼层
代码的可读性不好,if语句一层一层的套着,这样不好看,以后也不好定位问题。
用的时序逻辑,非阻塞语句应该没有问题的,建议楼主先把代码整理下
发表于 2010-10-18 11:00:03 | 显示全部楼层
要看LZ想实现什么样的功能。这样的写法,条件里的addr和被赋值的addr必须是不同cycle的值,换句话说,条件里的addr的值必须是之前的时钟计算所得到的值。
 楼主| 发表于 2010-10-19 15:14:17 | 显示全部楼层
代码在修改中,后续修改验证之后会发上来,谢谢大家的关注与参与。非常感谢!
 楼主| 发表于 2010-11-8 10:02:07 | 显示全部楼层
本帖最后由 stephua 于 2010-11-8 10:30 编辑

改后的代码如下:
always @(posedge clk)
begin
  if(!reset)
  begin
    addr <= 16'b0;
  end
  else if(data_start)
  begin
    addr <= Data21;
  end
  else if(next_grab)
  begin
    if(addr == {addr[15:8],Data44[15:8]})
    begin
      addr <= {(addr[15:8] + 1'b1),Data44[7:0]};
      if(addr == {Data45[15:8],Data44[15:8]})
      begin
         addr <= 16'b0;
      end
    end
    else
    begin
      addr <= addr + 1'b1;
    end
  end
end

可以实现跳转。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-27 16:55 , Processed in 0.022981 second(s), 6 queries , Gzip On, Redis On.

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