산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

Verilog 단일 포트 RAM 설계: 종합 가이드

설계

module single_port_sync_ram #(
  parameter ADDR_WIDTH = 4,
  parameter DATA_WIDTH = 32,
  parameter DEPTH = 16
)(
  input clk,
  input [ADDR_WIDTH-1:0] addr,
  inout [DATA_WIDTH-1:0] data,
  input cs,
  input we,
  input oe
);
  reg [DATA_WIDTH-1:0] tmp_data;
  reg [DATA_WIDTH-1:0] mem [DEPTH];
  
  always @(posedge clk) begin
    if (cs & we)
      mem[addr] <= data;
  end
  
  always @(posedge clk) begin
    if (cs & !we)
      tmp_data <= mem[addr];
  end
  
  assign data = (cs & oe & !we) ? tmp_data : 'hz;
endmodule

테스트벤치

module tb;
  parameter ADDR_WIDTH = 4;
  parameter DATA_WIDTH = 16;
  parameter DEPTH = 16;
  
  reg clk;
  reg cs;
  reg we;
  reg oe;
  reg [ADDR_WIDTH-1:0] addr;
  wire [DATA_WIDTH-1:0] data;
  reg [DATA_WIDTH-1:0] tb_data;
  
  single_port_sync_ram #(.DATA_WIDTH(DATA_WIDTH)) u0 (
    .clk(clk),
    .addr(addr),
    .data(data),
    .cs(cs),
    .we(we),
    .oe(oe)
  );
  
  always #10 clk = ~clk;
  assign data = !oe ? tb_data : 'hz;
  
  initial begin
    {clk, cs, we, addr, tb_data, oe} <= 0;
    repeat (2) @(posedge clk);
    for (integer i = 0; i < 2**ADDR_WIDTH; i = i + 1) begin
      repeat (1) @(posedge clk)
        addr <= i;
        we <= 1;
        cs <= 1;
        oe <= 0;
        tb_data <= $random;
    end
    for (integer i = 0; i < 2**ADDR_WIDTH; i = i + 1) begin
      repeat (1) @(posedge clk)
        addr <= i;
        we <= 0;
        cs <= 1;
        oe <= 1;
    end
    #20 $finish;
  end
endmodule

verilog

  1. 버릴로그(Verilog) 입문: 디지털 회로 설계를 위한 하드웨어 기술 언어
  2. Verilog 결합(Concatenation) & 복제(Replication) 연산자 실전 가이드
  3. Verilog 할당문 이해: 유형, 문법, 모범 사례
  4. Verilog 차단 vs 비차단 할당: 핵심 차이점 완벽 이해
  5. Verilog 함수 마스터하기: 효율적인 RTL 설계를 위한 활용법
  6. Verilog 태스크 이해: 함수와의 차이점, 문법, 활용법
  7. Verilog 클럭 생성기: 설계 및 구현 가이드
  8. Verilog 수학 함수 마스터하기: 효율적인 하드웨어 설계를 위한 활용
  9. Verilog $timeformat 마스터하기: 정밀도 및 표시 제어
  10. 모든 범위에서 Verilog Timescale 이해 및 출력하기