vivado:rom核读取
test_bench文件。
·
源文件
`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;
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)