从 ROM 读取数据
Reading data from ROM
我想在每个时钟周期从ROM中读取数据。我有下面的ROM程序
`timescale 1ns / 1ps
module ROM (clk,rd,addr,data);
input wire [5:0]addr;
output reg[1:0] data;
reg[1:0] rom [0:39];
input wire rd,clk;
initial begin
$readmemb ("own1.mem",rom);
end
always @(posedge clk) begin
data <= rom[addr];
end
endmodule
addr没有递增,每次需要读取一个数据。我怎么做?附上仿真结果
时钟进程可以修改为
always @(posedge clk)
count =addr;
assign count_next =count +1;
counter <=count_next;
data <= rom[counter];
这行得通吗??在每个时钟边沿增加地址和访问数据??
测试平台
module tb_ROM;
// Inputs
reg clk;
reg rd;
reg [5:0] addr;
wire [5:0] temp,counter;
// Outputs
wire [1:0] data;
// Instantiate the Unit Under Test (UUT)
ROM uut (
.clk(clk),
.rd(rd),
.addr(addr),
.data(data)
);
initial begin
// Initialize Inputs
clk = 1;
rd = 1;
addr=0;
// Wait 100 ns for global reset to finish
// Add stimulus here
end
always #5 clk=~clk;
endmodule
在您的测试台中,您可以添加另一个 always
块来增加地址:
always @(posedge clk) addr <= addr + 1;
或者,如果这是目标,可以将其添加到设计模块中。
我想在每个时钟周期从ROM中读取数据。我有下面的ROM程序
`timescale 1ns / 1ps
module ROM (clk,rd,addr,data);
input wire [5:0]addr;
output reg[1:0] data;
reg[1:0] rom [0:39];
input wire rd,clk;
initial begin
$readmemb ("own1.mem",rom);
end
always @(posedge clk) begin
data <= rom[addr];
end
endmodule
addr没有递增,每次需要读取一个数据。我怎么做?附上仿真结果
时钟进程可以修改为
always @(posedge clk)
count =addr;
assign count_next =count +1;
counter <=count_next;
data <= rom[counter];
这行得通吗??在每个时钟边沿增加地址和访问数据??
测试平台
module tb_ROM;
// Inputs
reg clk;
reg rd;
reg [5:0] addr;
wire [5:0] temp,counter;
// Outputs
wire [1:0] data;
// Instantiate the Unit Under Test (UUT)
ROM uut (
.clk(clk),
.rd(rd),
.addr(addr),
.data(data)
);
initial begin
// Initialize Inputs
clk = 1;
rd = 1;
addr=0;
// Wait 100 ns for global reset to finish
// Add stimulus here
end
always #5 clk=~clk;
endmodule
在您的测试台中,您可以添加另一个 always
块来增加地址:
always @(posedge clk) addr <= addr + 1;
或者,如果这是目标,可以将其添加到设计模块中。