深度为16,位宽8bit的单端口SRAM——学习记录

链接:

【Verilog HDL 训练】第 13 天(存储器、SRAM)-云社区-华为云

复制代码
 module sram #(
      parameter ADDR_BITS=4
      )(
      input clk,
      input [ 7:0] addr,
      input [ 7:0] din,
      input ce,
      input we,
      output reg [ 7:0] dout
      );
      localparam MEM_DEPTH= 1<<ADDR_BITS;
      reg [7:0] mem[MEM_DEPTH-1:0];
      // synopsys_translate_off
      integer i;
      initial begin
      for(i=0; i<MEM_DEPTH;i=i+1) begin
      mem[i] = 8'h00;
      end
      end
      // synopsys_translate_on
      always @(posedge clk) begin
      if(ce & we) begin
      mem[addr] <= din;
      end
      end
      always @(posedge clk) begin
      if(ce && (!we)) begin
      dout <= mem[addr];
      end
      end
      endmodule

`timescale 1ns / 1ps
      //
      // Company: 
      // Create Date: 2019/05/16 21:04:57
      // Design Name: 
      // Module Name: SRAM_tb
      //
      module sram_tb(
      );
     	reg [7 : 0] addr;
     	reg [7 : 0]data_in;
     	reg clk;
     	reg we;
     	reg ce;
     	wire [7 : 0] data_out;
     	integer i;
     	//clock generation
     	initial begin
     		clk = 0;
     		forever
       #4 clk = ~clk;
     	end
     	initial begin
     		ce = 1'b0;
     		we = 1'b0;
     		addr = 4'd0;
     		data_in = 8'h00;
       #20
     		@(negedge clk)//read
     		ce = 1'b1;
     		for (i = 0; i<16; i=i+1) begin
     			@(negedge clk)
      addr = i;
     		end
     		@(negedge clk)//write
     			we = 1'b1;
     		for (i = 0; i<16; i=i+1) begin
     			@(negedge clk) begin
      addr = i;
      data_in = data_in + 'h01;
     			end
     		end
     		@(negedge clk)//read
     			we = 1'b0;
     		for (i = 0; i<16; i=i+1) begin
     			@(posedge clk)
      addr = i;
     		end
     		@(negedge clk)
     			ce = 1'b0;
     		 //#100 $finish;
       #100 $stop;
     	end
     	sram #( .ADDR_BITS(4) ) u_sram(
     	.clk(clk),
     	.ce(ce),
     	.we(we),
     	.addr(addr),
     	.din(data_in),
     	.dout(data_out)
     	);
      endmodule
相关推荐
阿蒙Amon8 小时前
TypeScript学习-第10章:模块与命名空间
学习·ubuntu·typescript
AI绘画哇哒哒8 小时前
【干货收藏】深度解析AI Agent框架:设计原理+主流选型+项目实操,一站式学习指南
人工智能·学习·ai·程序员·大模型·产品经理·转行
黄埔数据分析9 小时前
QDMA把描述符当数据搬移, 不用desc engine
fpga开发
戌中横9 小时前
JavaScript——预解析
前端·javascript·学习
●VON9 小时前
React Native for OpenHarmony:2048 小游戏的开发与跨平台适配实践
javascript·学习·react native·react.js·von
ZH154558913110 小时前
Flutter for OpenHarmony Python学习助手实战:自动化脚本开发的实现
python·学习·flutter
xcLeigh10 小时前
Python入门:Python3 requests模块全面学习教程
开发语言·python·学习·模块·python3·requests
xcLeigh10 小时前
Python入门:Python3 statistics模块全面学习教程
开发语言·python·学习·模块·python3·statistics
GHL28427109010 小时前
分析式AI学习
人工智能·学习·ai编程
lpruoyu11 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习