如何解决我看不到记忆的内容
当我尝试模拟一个应该处理从 SRAM 存储器中获取的数据的电路时遇到问题。首先,SRAM 内存中充满了数据,如果查看最后一个测试平台就可以看到这一点,然后存储的数据将由自动机处理。然后,在某些特定情况下,输出会存储在另一个 SRAM 存储器中。因此,在仿真时,电路的行为方式很奇怪,因为表示从第一个 SRAM 存储器读取的数据的 rd_data_instrucions 始终未定义。因此,所有其他依赖于 rd_data_instructions 的信号也未定义。代码张贴在这里。
P.S.:模块 sram_1port_instructions 和 sram_1port_data 应该像时钟 SRAM 一样,具有写使能信号,以便当 wr_en 为高电平时,存储器存储接收到的数据 (wr_data),而当 wr_en 为低电平时,存储器可以输出数据 (rd_data)。 模块用户代表一个便于写入过程的“接口”,因此写入 SRAM 指令存储器不需要存储数据的地址,因为该模块提供了一种增加存储器“写入地址指针”的机制。此外,我们可以看到该模块对应的测试平台。然后,我们可以看到另一个内存的对应模块,它是为输出存储而创建的,以及一个旨在促进读取过程的模块(即类似于前面的情况,但它不是促进写入过程,而是简化了读取过程) . 最后但并非最不重要的是,我们可以区分一个叉骨模块,它应该将所有先前的模块互连起来以创建一个数字系统。因此,自动机从 SRAM 指令存储器中获取数据,然后输出一些存储在另一个存储器中的数据。最后,可以从 SRAM 数据存储器中读取结果。 当我尝试模拟系统时会出现问题,因为我在尝试读取某些信号时遇到困难,例如rd_data_instructions 应该显示先前存储的来自 SRAM 指令存储器的值,隐含的“in”信号,它应该为自动机提供输入,等等。在叉骨模块中,我使用了一个标记为“开始”的特殊信号,它将写启用设置为 0,以便 SRAM 存储器为读取过程做好准备。这个特殊信号实际上触发了自动机,通过将来自内存的输入数据“喂给”它。
//wishbone module
module wishbone(
input clk,rst,start,output reg [2:0]in,output reg wr_en_instructions,wr_en_display,input [2:0] wr_data_instructions,//created for usr,in order to make possible to write data
output reg [3:0] wr_data_display,output [2:0] rd_data_instructions,output [3:0] rd_data_display,//created for user,in order to make possible the display
output [12:0]o
);
reg [15:0] pointer_instructions,pointer_display;
initial wr_en_instructions = 1'b1;
control_unit i0(.clk(clk),.rst(rst),.in(in),.o(o));
user i1(.clk(clk),.wr_en(wr_en),.address_in(pointer_instructions),.wr_data(wr_data_instructions),.rd_data(rd_data_instructions));
display i2(.clk(clk),.wr_en(wr_en_display),.address_in(pointer_display),.wr_data(wr_data_display),.rd_data(rd_data_display));
integer i = 0;
always @ * begin
wr_en_display = ~wr_en_instructions;
end
always @(posedge clk) begin
if(start) begin
pointer_instructions <= 16'b0;
pointer_display <= 16'b0;
wr_en_instructions <= 1'b0;
end
else begin
$display(rd_data_instructions);
if(!wr_en_instructions) begin
if(rd_data_instructions == 3'b1xx) begin
wr_en_instructions <= 1'b1;//???
end
else if(rd_data_instructions == 3'b010) begin
in <= rd_data_instructions;
wr_data_display <= o;
pointer_instructions <= pointer_instructions + 1;
pointer_display <= pointer_display + 1;
end
else begin
in <= rd_data_instructions;
pointer_instructions <= pointer_instructions + 1;
end
end
else begin
i = i + 1;
end
end
end
endmodule
//testbench for top module
module wishbone_tb(
output reg clk,output [2:0]in,output wr_en_instructions,output reg [2:0] wr_data_instructions,in order to make possible to write data
output [3:0] wr_data_display,in order to make possible the display
output [12:0]o
);
wishbone cut(
.clk(clk),.start(start),.wr_en_instructions(wr_en_instructions),.wr_en_display(wr_en_display),.wr_data_instructions(wr_data_instructions),.wr_data_display(wr_data_display),.rd_data_instructions(rd_data_instructions),.rd_data_display(rd_data_display),.o(o)
);
initial $dumpvars(0,wishbone_tb);
initial begin
clk = 1'd1;
repeat (600000)
#100 clk = ~clk;
end
initial begin
rst = 1'b1;
#400 rst = 1'b0;
end
initial begin
start = 1'b0;
#13000400 start = 1'b1;
#400 start = 1'b0;
end
initial begin
wr_data_instructions = 3'd1;
#3000400 wr_data_instructions = 3'd2;
#1000000 wr_data_instructions = 3'd1;
#3000000 wr_data_instructions = 3'd0;
#2000000 wr_data_instructions = 3'd3;
#1000000 wr_data_instructions = 3'd1;
#3000000 wr_data_instructions = 3'd4;//halt
end
endmodule
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。