这是我的顶级模块和rom模块的代码。我没有发现任何错误,但它显示此错误,我不知道为什么。
module top (clk,clr, ss, mosi,sck);
input clk;
input clr;
output ss;
output mosi;
output sck;
wire [10:0]address;
wire[7:0]data;
wire done,start,mclk,clk_out;
clock uut1(.clr(clr),.mclk(clk),.clk_out(clk_out));
ROM_Memory uut2(.address(address),.data(data));
ctrl uut3 (.clr(clr),.clk(clk_out),.address(address),.data(data),.start(start),.done(done));
spi uut4 (.clk(clk_out),.clr(clr),.data(data),.start(start),.done(done),.ss(ss),.mosi(mosi),.sck(sck));
endmodule
ROM模块 -
module ROM_Memory(address,data);
input [10:0] address;
output [7:0] data;
reg [7:0]ROM[0:1034];
initial begin
$readmemh("preeti.txt",ROM);
end
assign data = ROM[address];
endmodule
在RTL原理图中显示其余三个模块,模拟运行正常。
答案 0 :(得分:0)
您的top
模块用作相互连接的框架。
您的系统似乎是一个读取ROM并通过SPI发送其内容的控制器。 ROM在top
中有效连接,但您的模块仅显示ROM连接到的一对总线(address
和data
)。我们不知道那些公共汽车是否连接到其他地方。它们应该是,但如果ctrl
或spi
不使用address
或data
(例如,由于名称拼写错误),则ROM实际上将连接到不通。
将其添加到设计中每个Verilog文件的开头,这样您就可以捕获由错误信号名称引起的任何错误:
`default_nettype none
您的ROM与设计断开连接的另一个原因是您提供的用于初始化它的文件不完整。如果您的ROM有1035个单元,则必须初始化所有ROM,否则合成器将丢弃ROM
寄存器,因此,完整的ROM_Memory
模块也将被丢弃。
为确保您的ROM完全初始化,请修改初始块以添加以下行:
integer i;
initial begin
for (i=0;i<=1034;i=i+1) // Prefill all the ROM, so you can use an incomplete file later
ROM[i] = 8'h00;
$readmemh("preeti.txt",ROM); // Initialize up to 1035 cells from preeti.txt
end