首页 > 其他分享 >verilog实现ram16*8 (vivado)

verilog实现ram16*8 (vivado)

时间:2024-07-19 15:55:25浏览次数:16  
标签:begin en addr 数据线 clk ram16 vivado verilog input

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

 

标签:begin,en,addr,数据线,clk,ram16,vivado,verilog,input
From: https://blog.csdn.net/m0_74626628/article/details/140551333

相关文章

  • Verilog 组合电路常见错误和always块的使用原则
    一、组合电路常见错误1、变量在多个always块中连续赋值regy;rega,b,clear;always@*if(clear)y=1'b0;always@*y=a&b;//每个always块是电路的一部分,y在两个电路上输出,不能综合2、不完整的敏感信号列表always@(a,b)y=a&b;//如果忘记......
  • 基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误
    1.算法仿真效果本程序系统是《m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序》的的升级。 升级前原文链接 增加了完整的AWGN信道模型的FPGA实现,可以在testbench里面设置SNR,分析不同SNR对应的FPGA误码率情况。 vivado2019.2仿真结果如下(......
  • SpinalHDL之VHDL 和 Verilog 生成
    本文作为SpinalHDL学习笔记第十六篇,记录使用SpinalHDL代码生成Verilog/VHDL代码的方法。SpinalHDL学习笔记总纲链接如下:SpinalHDL学习笔记_spinalhdlblackbox-CSDN博客目录:1.从SpinalHDL组件生成VHDL和Verilog2.生成的VHDL和Verilog3.VHDL和Verilog属性......
  • systemverilog的关联数组
    关联数组定义在SystemVerilog中,关联数组(AssociativeArrays)是一种非常灵活的数据结构,它可以使用任意类型的键(key)来索引数组中的元素。这使得关联数组特别适合于实现类似哈希表(hashtables)或字典(dictionaries)的功能,其中键可以是字符串、数字或其他复杂类型。data_typearray......
  • 基于FPGA的A律压缩解压缩verilog实现,包含testbench
    1.算法仿真效果VIVADO2019.2仿真结果如下(完整代码运行后无水印):   RTL图如下所示:   2.算法涉及理论知识概要       A律压缩是一种广泛应用于语音编码的非均匀量化技术,尤其在G.711标准中被欧洲和中国等国家采纳。该技术的核心目的是在有限的带宽下高效传输......
  • I2S采集卡&播放器 Verilog实现
    1.杜老师的建议购买采集卡播放器使用采集卡可以验证生成的i2s时序是否正确使用播放器可以观察正确的i2s时序带使能的计数器自己能播自己能录2.几个音频的专业术语音调实际上就是频率音色音调的决定因素:谐波的结构:声音中的谐波极其相对强度和分布是音色的主要......
  • verilog行为建模(二):命名事件和行为描述
    目录1.命名事件(namedevent)2.行为描述举例3.RTL描述举例微信公众号获取更多FPGA相关源码:1.命名事件(namedevent)在行为代码中定义一个命名事件可以触发一个活动。命名事件不可综合。moduleadd_mult(out,a,b);input[2:0]a,b;output[3:0]o......
  • Verilog图片仿真
            今天给大家分享自己使用的一段仿真代码,是我调整好的,拿去就可以直接使用!!!        我们做fpga有时候会接触一些图像相关的算法,我们不能每一次都是编译成功下载验证看效果吧,我也是找了好久,终于找到一个没啥毛病的,我对于这个模块还是做了一些调整,满足我们......
  • 【Emacs Verilog mode保姆级的使用指南】
    ......
  • verilog写12 小时时钟(带上午/下午指示器)计数器(HDLbits Count clock)
    Createasetofcounterssuitableforuseasa12-hourclock(witham/pmindicator).Yourcountersareclockedbyafast-running clk,withapulseon ena wheneveryourclockshouldincrement(i.e.,oncepersecond).reset resetstheclockto12:00AM.......