verilog实现ram16*8 (vivado)

module ram_16x2 (
    input clk,        // 时钟信号
    input we,         // 写使能
    input en,         // 使能信号
    input [3:0] addr, // 地址线
    input [1:0] datain, // 输入数据线
    output reg [1:0] dataout // 输出数据线
);

    // 定义存储器数组
    reg [1:0] mem [15:0];

    always @(posedge clk) begin
        if (en) begin
            if (we) begin
                mem[addr] <= datain; // 写入数据
            end
            dataout <= mem[addr]; // 读取数据
        end
    end

endmodule



module ram_16x8 (
    input clk,          // 时钟信号
    input we,           // 写使能
    input en,           // 使能信号
    input [3:0] addr,   // 地址线
    input [7:0] datain, // 输入数据线
    output [7:0] dataout // 输出数据线
);

    // 输出数据线
    wire [1:0] dataout0, dataout1, dataout2, dataout3;

    // 实例化4个16×2位存储器
    ram_16x2 ram0 (
        .clk(clk),
        .we(we),
        .en(en),
        .addr(addr),
        .datain(datain[1:0]),
        .dataout(dataout0)
    );

    ram_16x2 ram1 (
        .clk(clk),
        .we(we),
        .en(en),
        .addr(addr),
        .datain(datain[3:2]),
        .dataout(dataout1)
    );

    ram_16x2 ram2 (
        .clk(clk),
        .we(we),
        .en(en),
        .addr(addr),
        .datain(datain[5:4]),
        .dataout(dataout2)
    );

    ram_16x2 ram3 (
        .clk(clk),
        .we(we),
        .en(en),
        .addr(addr),
        .datain(datain[7:6]),
        .dataout(dataout3)
    );

    // 合并4个16×2位存储器的输出数据
    assign dataout = {dataout3, dataout2, dataout1, dataout0};

endmodule

 

相关推荐

  1. Vivado -RAM

    2024-07-21 02:42:02       57 阅读
  2. vivado RAM Inference

    2024-07-21 02:42:02       48 阅读
  3. vivado RAM HDL Coding Guidelines

    2024-07-21 02:42:02       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 02:42:02       169 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 02:42:02       185 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 02:42:02       155 阅读
  4. Python语言-面向对象

    2024-07-21 02:42:02       169 阅读

热门阅读

  1. MySQL 覆盖索引

    2024-07-21 02:42:02       36 阅读
  2. 智能门锁是如何控制进出的?

    2024-07-21 02:42:02       36 阅读
  3. 2732. 找到矩阵中的好子集

    2024-07-21 02:42:02       38 阅读
  4. Gradle依赖管理 & Kotlin DSL解析

    2024-07-21 02:42:02       38 阅读
  5. 计算机网络重点--TCP三次握手

    2024-07-21 02:42:02       35 阅读
  6. Next.js静态导出与动态路由优化

    2024-07-21 02:42:02       36 阅读
  7. 分治算法(算法篇)

    2024-07-21 02:42:02       31 阅读
  8. 【时时三省】(C语言基础)选择语句和循环语句

    2024-07-21 02:42:02       35 阅读