peter861021的个人空间 https://blog.eetop.cn/1688137 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

用verilog实现一个异步双端口ram,深度16,位宽8bit。A口读出,B口写入。 ...

热度 1已有 3708 次阅读| 2019-7-8 17:51 |个人分类:数字学习笔记|系统分类:芯片设计

首先需要实现一个memory, reg[7:0]mem[15:0]。这样定义出来的是16个8bit位宽的寄存器
下面为verilog代码
module dpram_16x8 (
input clk,
input [3:0] addr_a,
input [7:0] din_b,
input [3:0] addr_b,
input ce,
input we,
output reg[7:0] dout_a
);
parameter word_size=8;
parameter addr=16;
reg[word_size-1:0]mem[addr-1:0];
//synopsys_translate_off
integer i;
initial begin   
dout_a=8'b0;
for(i=0; i<addr;i=i+1) begin 
      mem[i] = 8'h00; 
     end
end// synopsys_translate_on

always@(posedge clk)begin
 if(ce==1&&we==1)begin
 mem[addr_b]<=din_b;
 end
 else if(ce==1&&we==0)begin
 dout_a<=mem[addr_a];
 end
end
endmodule

下面为testbench  其中需要注意的是 
1、@(negedge clk)指的是对clk的下降边沿敏感,但是这个操作只会执行一次。若是想多次执行的话可以用for语句。
2、for(i=0;i<16;i=i+1)中的i要注意其位宽,不然可能会产生溢出。因为这个是testbench,所以定义的位宽远大于所需要的位数也是可以的,在本次设计中我就使用了integer i  此时i为32位。
module sram_tb();
reg clk=0;
reg[3:0]addr_a=0;
reg[7:0]din_b=0;
reg[3:0]addr_b=0;
reg ce=1;
reg we=0;
integer i;
wire[7:0]dout_a;
always #5 clk=~clk;
initial begin
 @(negedge clk)begin
 we=0; 
 ce=1;
 end
  for(i=0;i<16;i=i+1)begin
  @(negedge clk) addr_a=i;
  end
  
 @(negedge clk)begin
 we=1; 
 ce=1;
 end
  for(i=0;i<16;i=i+1)begin
  @(negedge clk)begin
  addr_b=i;
  din_b=din_b+1;
  end
  end
 
 @(negedge clk)begin
 we=0; 
 end
  for(i=0;i<16;i=i+1)begin
  @(negedge  clk)begin
  addr_a=i;
  end
  end
 
   @(negedge clk)begin
 ce=0; 
 end
        #100 $stop;
 end
 
dpram_16x8 u1(
 .clk(clk),
 .addr_a(addr_a),
 .din_b(din_b),
 .addr_b(addr_b),
 .ce(ce),
 .we(we),
 .dout_a(dout_a)
);
endmodule

最后的仿真结果



点赞

发表评论 评论 (1 个评论)

回复 PayPal 2020-6-26 21:01
双端口

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 4

    粉丝
  • 0

    好友
  • 0

    获赞
  • 1

    评论
  • 2495

    访问数
关闭

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


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

GMT+8, 2024-11-24 07:20 , Processed in 0.023911 second(s), 16 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部