源文件

`timescale 1ns / 1ps

module rom_test(
        input sys_clk,      //50MHz时钟
        input rom_clk,      //rom时钟
        input rst_n,        //复位,低电平有效
   //ROM输入地址
        input  ena,         //定义ROM核使能端    
        output wire [7:0] rom_data,//定义一个输出端
        output reg [4:0]  rom_addr
    );


//产生ROM地址读取数据
always @ (posedge sys_clk or negedge rst_n)//在时钟的上升沿触发和复位信号的下降沿
begin
    if(!rst_n)
        rom_addr <= 5'd0;//如果值为1的话,就复位
    else
        rom_addr <= rom_addr+1'b1;
end        
//实例化ROM
rom_ip rom_ip_inst
(
    .clka   (rom_clk    ),      //inoput clka
    .addra  (rom_addr   ),      //input [4:0] addra
    .douta  (rom_data   ),      //output [7:0] douta
    .ena    (ena)               //rom核的使能端
);
endmodule

test_bench文件

`timescale 1ns / 1ps

module vtf_rom_tb;
// Inputs
reg sys_clk;
reg rom_clk;
reg rst_n;
wire[7:0] rom_data;
wire[4:0] rom_addr;
reg ena;




// Instantiate the Unit Under Test (UUT)
rom_test uut (
        .sys_clk        (sys_clk), 
        .rom_clk    (rom_clk),        
        .rst_n                (rst_n),
        .rom_data   (rom_data),
        .rom_addr   (rom_addr),
        .ena        (ena)
);

initial 
begin
        // Initialize Inputs
        sys_clk = 0;
        rom_clk = 0;
        rst_n = 0;
        ena = 0;
        #50
        ena =1;

        // Wait 100 ns for global reset to finish
    #81     
      rst_n = 1;  
          
 end

always #100 sys_clk = ~ sys_clk;   //200ns一个周期,产生5MHz时钟源
always #5 rom_clk = ~ rom_clk;//时钟10ns一个周期,产生 100MHz时钟源
   
endmodule

coe文件


MEMORY_INITIALIZATION_RADIX=16; //表示16进制法 MEMORY_INITIALIZATION_VECTOR= 11, 22, 33, 44, 55, 66, 77, 88, 99, aa, bb, cc, dd, ee, ff, 00, a1, a2, a3, a4, a5, a6, a7, a8, b1, b2, b3, b4, b5, b6, b7, b8;

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐