深度为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
相关推荐
xiaotao1313 小时前
02-机器学习基础: 监督学习——线性回归
学习·机器学习·线性回归
墨黎芜4 小时前
ArcGIS从入门到精通——地图符号、注记的初步使用
学习·arcgis·信息可视化
小李云雾4 小时前
FastAPI重要知识点---中间件(Middleware)
学习·程序人生·中间件·fastapi·middleware
小夏子_riotous4 小时前
Docker学习路径——3、常用命令
linux·运维·服务器·学习·docker·容器·centos
STLearner4 小时前
WSDM 2026 | 时间序列(Time Series)论文总结【预测,表示学习,因果】
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
redaijufeng5 小时前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
腾科IT教育5 小时前
零基础快速上岸HCIP,高效学习思路分享
学习·华为认证·hcip·hcip考试·hcip认证
23471021275 小时前
4.14 学习笔记
笔记·python·学习
醇氧5 小时前
【学习】软件过程模型全解析:从瀑布到敏捷的演进之路
学习·log4j
邪修king5 小时前
UE5 零基础入门第三弹: 碰撞与触发交互,解锁场景机关与蓝图封装(高娱乐性学习)
学习·ue5·交互