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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: easelive

[求助] 请教用verilog给存储器建模的问题

[复制链接]
 楼主| 发表于 2012-7-25 17:01:56 | 显示全部楼层
回复 6# zhptan


    呵呵,我也是新手
发表于 2012-7-25 18:06:40 | 显示全部楼层
回复 1# easelive


    不知道可不可以把 shu定义成reg 然后放到always块里面去?
发表于 2012-7-25 21:48:20 | 显示全部楼层
本帖最后由 jefby 于 2012-7-25 22:37 编辑




  1. module test(shu);
  2. output reg  [31:0] shu;
  3. reg clock;
  4. reg [31:0] i,r;
  5. reg [9:0] j;
  6. reg [31:0] Imemory[0:1023];

  7. initial begin
  8.         clock <= 0;
  9.         i <= 32'h0;
  10.         r <= 32'h0;
  11.         j <= 32'h0;
  12. end

  13. always @(negedge clock)
  14.    shu <= Imemory[i-1];
  15. always @(posedge clock)
  16. begin
  17.         Imemory[j] <= i;
  18.         i <= i+1;
  19.         j <= j+1;
  20. end

  21. always
  22. begin
  23.         #1 clock <= ~clock;
  24. end
  25. endmodule


复制代码

下图是修改后的成功仿真图

成功仿真图

成功仿真图


你源程序的问题在于
连续赋值语句
assign shu = Imemory是在数据i的值有变化时即刻将值赋给端口shu,而实际的写入存储器是在时钟的上升沿,也就是说当i变化时,并没有有效的数据。所以读出有问题。
 楼主| 发表于 2012-7-26 10:59:37 | 显示全部楼层
回复 13# jefby


    非常感谢您的回答,我已经成功赋值了,我犯了很低级的错误,呵呵
至于您写的第二行的语法不知道是verilog的版本,我在VCS上仿真无法通过,不过我修改成其他的类型就好了
非常感谢!
 楼主| 发表于 2012-7-26 11:00:30 | 显示全部楼层
回复 12# bookbike


    可以的,您说的方法是可行的。谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-18 08:41 , Processed in 0.018517 second(s), 8 queries , Gzip On, Redis On.

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