Memory 为什么不读取内存内容?-verilog数字系统设计

Memory 为什么不读取内存内容?-verilog数字系统设计,memory,verilog,system,digital,icarus,Memory,Verilog,System,Digital,Icarus,我创建了一个由两个时钟SRAM组成的微系统,一个用于存储指令代码,另一个用于存储一些输出值。指令SRAM具有一个名为“用户”的接口模块,该模块提供了一种简化写入过程的机制,因此,当在存储器中写入数据时,无需指定必须存储这些指令的相应存储器地址。类似地,当从第二SRAM读取数据时,由于“显示”模块,不需要指定从中提取数据的相应存储器地址。更具体地说,在指令存储器中写入数据时,计数器在每次写入后递增地址指针,而第二个存储器有另一个计数器,在每次读取后递增地址指针值。当一个人试图从指令存储器中读取信息

我创建了一个由两个时钟SRAM组成的微系统,一个用于存储指令代码,另一个用于存储一些输出值。指令SRAM具有一个名为“用户”的接口模块,该模块提供了一种简化写入过程的机制,因此,当在存储器中写入数据时,无需指定必须存储这些指令的相应存储器地址。类似地,当从第二SRAM读取数据时,由于“显示”模块,不需要指定从中提取数据的相应存储器地址。更具体地说,在指令存储器中写入数据时,计数器在每次写入后递增地址指针,而第二个存储器有另一个计数器,在每次读取后递增地址指针值。当一个人试图从指令存储器中读取信息时,他们必须指定从中读取数据的存储器地址,正如预期的那样,当一个人试图在输出存储器中写入信息时,他们必须指定写入数据的存储器地址。此外,微系统有一个自动机,它从指令存储器中获取输入数据并对其进行处理。在处理信息之后,自动机将一些输出值存储在输出内存中。我在模拟时遇到了一个问题,因为显然,无法看到SRAM内存中的读取值,即rd_数据_指令,因此,既找不到自动机的输入值“in”,也找不到输出值,只要它们依赖于从第一个SRAM读取的数据。我在下面贴了代码和图表

//叉骨模块
模块叉骨(
输入时钟,rst,
输出寄存器[2:0]在,
输出寄存器wr_en_指令,wr_en_显示,
输入[2:0]wr_data_指令,//为usr创建,以便能够写入数据
输出寄存器[3:0]wr_数据_显示,
输出[2:0]rd_数据_指令,
输出[3:0]rd_数据_显示,//为用户创建,以使显示成为可能
输出[12:0]o
);
reg[15:0]指针指示,指针显示;
初始wr_en_指令=1'b1;/?
控制单元i0(.clk(clk),.rst(rst),.in(in),.o(o));
用户i1(.clk(clk),.wr_en(wr_en_指令),.address_in(指针指令),.wr_数据(wr_数据指令),.rd_数据(rd_数据指令));
显示i2(.clk(clk),.wr_en(wr_en_显示),.address_in(指针显示),.wr_数据(wr_数据显示),.rd_数据(rd_数据显示));
整数i=0;
总是开始
wr_en_显示=~wr_en_指令;
结束
始终@(posedge clk)开始
如果(rst)开始

wr_en_指令当您从地址0x8001读取时,这超出了内存大小的限制。你可以增加你的记忆力。更改:

reg [2:0] memory [2 ** 15 - 1 : 0];
致:

当您从地址0x8001读取时,这将消除未知(X)


或者,如果不想扩大内存,请确保限制您的地址。

当您从地址0x8001读取时,这超出了内存大小的限制。你可以增加你的记忆力。更改:

reg [2:0] memory [2 ** 15 - 1 : 0];
致:

当您从地址0x8001读取时,这将消除未知(X)


或者,如果不想扩大内存,请确保限制地址。

rd\U数据\U说明。开始时,也就是说,在最初的13毫秒内,没有定义的信号是正常的,但在那之后,在001指令之后,我只看到x(,在这之后,rd_data_指令重复,如预期的那样)。最后的模块不是很重要,只要我没有遇到与自动机功能相关的问题,这些问题很可能是由内存和wishbone module.rd_data_指令引起的。开始时,也就是说,在最初的13毫秒内,没有定义的信号是正常的,但在那之后,在001指令之后,我只看到x(,在这之后,rd_data_指令重复,如预期的那样)。最后的模块不是很重要,只要我没有遇到与自动机功能相关的问题,这些问题很可能是由存储器和叉骨模块引起的。
reg [2:0] memory [2 ** 16 - 1 : 0];