新手入门练习的实验----ROM模拟源输出数据的时序1

利用ROM储存数据源,初始化存入1024个byte数据,然后读出数据如图所示:

`timescale 1ns / 1ps
module data_error_injector (
    input clk,                        // 时钟信号,50MHz
    input reset,                      // 复位信号,高有效
    input DIN_EN,                     // 数据输入使能,高有效   
    output reg [7:0] DOUT,            // 输出数据
    output reg DOUT_EN              // 数据输出使能,高有效
);
    reg DOUT_EN_0;
    // ROM的接口
    reg [9:0] rom_addr;             // ROM地址
    wire [7:0] rom_dout;            // ROM数据输出
    reg ena;

     // ROM实例化(通过Vivado生成的ROM IP核)
     blk_mem_gen_0 rom (
         .clka(clk),                 // 时钟信号
         .ena(ena),
         .addra(rom_addr),           // 地址信号
         .douta(rom_dout)            // 数据输出
     );

  always @(posedge clk or posedge reset) begin
        if (reset)begin
          rom_addr<= 0;
          DOUT<=0;
          DOUT_EN<=0;
          ena<=0;
        end else begin       
          if(DIN_EN)
            ena<=1;                     
          else 
            ena<=0;                                        
          if(ena)begin
            DOUT_EN_0<=1;
            DOUT_EN<=DOUT_EN_0;
            DOUT<=rom_dout;
            if(rom_addr<1023)begin 
              rom_addr<=rom_addr+1;
            end else begin
              rom_addr<=0;
              DOUT_EN<=0;
              DOUT_EN_0<=0; 
            end                         
          end else begin
            DOUT<=0;
            DOUT_EN<=0;
            DOUT_EN_0<=0;
          end
        end
      end                                                                                                                
endmodule 

源代码供大家一块学习,逻辑简单,之前就有模糊的印象,但是写一遍会有更深刻的理解!tb比较简单,自己尝试一下吧。如果需要tb,可以私聊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值