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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2871|回复: 5

[求助] 关于sram的testbench怎么写 ?有原程序。。。求指导。。。

[复制链接]
发表于 2012-7-3 11:01:21 | 显示全部楼层 |阅读模式

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

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

x




  1. module sram(clk_50,reset,sram_addr,wr_en,cs_n,oe_n,ub_n,lb_n,led,sram_data);//control the sram and test in the led
  2. input clk_50;
  3. input reset;
  4. output [19:0] sram_addr;
  5. output wr_en,cs_n,oe_n,ub_n,lb_n,led;
  6. inout [15:0] sram_data;

  7. assign cs_n=1'b0;//chip selet enable
  8. assign oe_n=1'b0;// output enable
  9. assign ub_n=1'b0;//upper byte avaliable
  10. assign lb_n=1'b0;//lower byte avaliable

  11. reg[25:0] delay;//delay 0.02us*2^26=1.34s
  12. clk_50 or negedge reset)
  13. if(!reset)
  14. delay<=26'b0;
  15. else
  16. delay<=delay+1'b1;

  17. reg[15:0] wr_data;
  18. reg[15:0] rd_data;
  19. reg[19:0] addr_r;

  20. wire  wr_req;
  21. wire rd_req;
  22. reg led_r;

  23. assign wr_req=(delay==26'd9999);
  24. assign rd_req=(delay==26'd19999);

  25. always @(posedge clk_50 or negedge reset)
  26. if(!reset)
  27. wr_data<=16'd0;
  28. else if(delay==26'd29999)
  29. wr_data<=wr_data+1'b1;
  30. always @(posedge clk_50 or negedge reset)
  31. if(!reset)
  32. addr_r<=20'd0;
  33. else if(delay==26'd29999)
  34. addr_r<=addr_r+1'b1;
  35. always @(posedge clk_50 or negedge reset)
  36. if(!reset)
  37. led_r<=1'b0;
  38. else if(delay==26'd29999)
  39. begin
  40.   if(wr_data==rd_data)
  41.   led_r<=1'b1;
  42.   else
  43.   led_r<=1'b0;
  44. end
  45. assign led=led_r;

  46. reg[2:0]cnt;
  47. `define delay_80ns (cnt==3'd7)  //delay 0.02us*7=140ns

  48. reg[3:0] state,nextstate;

  49. parameter idle =4'd0;
  50. parameter writ0 =4'd1;
  51. parameter writ1 =4'd2;
  52. parameter rea0 =4'd3;
  53. parameter rea1 =4'd4;


  54. always @(posedge clk_50 or negedge reset)
  55. if(!reset)
  56. cnt<=3'd0;
  57. else if(state==idle)
  58. cnt<=3'd0;
  59. else
  60. cnt<=cnt+1'b1;
  61. clk_50 or negedge reset)
  62. if(!reset)
  63. state<=idle;
  64. else
  65. state<=nextstate;
  66. clk_50 or negedge reset)
  67. case(state)
  68. idle: if(wr_req)
  69.   nextstate<=writ0;
  70.   else if(rd_req)
  71.   nextstate<=rea0;
  72.   else nextstate<=idle;
  73. writ0:if(`delay_80ns)
  74.   nextstate<=writ1;
  75.   else nextstate<=writ0;
  76. writ1: nextstate<=idle;
  77. rea0:if(`delay_80ns)
  78.   nextstate<=rea1;
  79.   else nextstate<=rea0;
  80. rea1:nextstate<=idle;
  81. endcase
  82. assign sram_addr=addr_r;

  83. //  lock data
  84. reg sdlink;     //SRAM address control
  85. clk_50 or negedge reset)
  86.     if(!reset)
  87.         rd_data <= 16'b0;
  88.     else if(state == rea1)
  89.         rd_data <= sram_data;
  90.          
  91. clk_50 or negedge reset)
  92.     if(!reset)
  93.         sdlink <= 1'b0;
  94.     else
  95.         case(state)
  96.             idle:   if(wr_req)
  97.                         sdlink <= 1'b1;
  98.                     else if(rd_req)
  99.                         sdlink <= 1'b0;
  100.                     else
  101.                         sdlink <= 1'b0;
  102.             writ0:   sdlink <= 1'b1;
  103.             default:sdlink <= 1'b0;
  104.         endcase
  105.       
  106. assign sram_data = sdlink ? wr_data:16'hzzzz;
  107. assign wr_en = ~sdlink;
  108.   
  109. endmodule





复制代码
 楼主| 发表于 2012-7-3 11:03:20 | 显示全部楼层
http://archive.cnblogs.com/a/2258208/   原文链接在这 希望大牛帮忙看看 写个测试文件 。。。这inout口搞死我了。。。。我写的测试文件不出波形。。。。
发表于 2012-7-3 11:49:26 | 显示全部楼层
sram_data = sdlink ? wr_data:16'hzzzz;
这句话反过来不就是你testbench的输入?
发表于 2012-10-23 09:58:57 | 显示全部楼层
先支持一下
发表于 2013-8-6 23:02:16 | 显示全部楼层
顶顶顶顶
发表于 2015-7-31 12:19:50 | 显示全部楼层
any other much complete?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-26 07:03 , Processed in 0.037896 second(s), 8 queries , Gzip On, Redis On.

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