内存模块 - 模拟卡住小地址

时间:2017-05-14 15:01:46

标签: memory verilog xilinx xilinx-ise

我们在verilog中有一个简单的内存模块,在Windows 10 64位上的xilinx ISE设计套件12.4。这是模块的签名:

module Memory(
input [23:0] Addr,
input Length, //byte:0 vs. word:1
input Rd, 
input Wr, 
input Enable,
output reg Rdy,
input [31:0] DataIn, 
output reg [31:0] DataOut
);

这是内存定义行:reg [7:0] mem [0:16777215];

问题是,当我们尝试通过仿真测试模块时,当我们对小地址执行读取或写入操作时,模拟会停滞不前。例如,0000 0000 1011 1010 1011 1110卡住,而1111 1111 1111 1010 1011 1110则没卡。卡住我的意思是,它不会给出任何错误或任何错误,只是停止做任何事情。

此外,在模块中,我们在初始块中将数字写入小地址(例如3);模拟也坚持了它的第一次操作。

当我们检查模拟中的内存但是查看>内存时,我们可以看到整个内存已初始化。甚至地址3也被填满,即使很难,也会导致模拟卡住。

这是内存代码:

`timescale 1ns / 1ps
module Memory(
input [23:0] Addr,
input Length, //byte:0 vs. word:1
input Rd, 
input Wr, 
input Enable,
output reg Rdy,
input [31:0] DataIn, 
output reg [31:0] DataOut
);

localparam Tmem= 8; //8 ns
localparam Td = 0.2; //200 ps

reg [7:0] mem [0:16777215];
//reg [7:0] mem [0:65536];

initial 
begin
    Rdy<=1'b1;
 //mem[3]=8'b10101010;
end

always @(posedge Wr or posedge Rd or posedge Rdy) 
begin

    if(Enable && Rdy && Wr)
    begin
        Rdy<=#Td 1'b0;

        if(Length)
        begin
            mem[(Addr&24'b111111111111111111111100)+3] <=DataIn[31:24];
            mem[(Addr&24'b111111111111111111111100)+2] <=DataIn[23:16];
            mem[(Addr&24'b111111111111111111111100)+1] <=DataIn[15:8];
            mem[Addr&24'b111111111111111111111100 ] <=DataIn[7:0];
        end
        else if(!Length)
        begin 
            mem[Addr]<=DataIn[7:0];
        end

        Rdy<=#Tmem 1'b1;    
    end

    else if(Enable && Rdy && Rd)
    begin
        Rdy<=#Td 1'b0;

        if(Length)
        begin
            DataOut[31:0]<=#Tmem {mem[(Addr&24'b111111111111111111111100)+3],mem[(Addr&24'b111111111111111111111100)+2],mem[(Addr&24'b111111111111111111111100)+1],mem[(Addr&24'b111111111111111111111100)]};
        end
        else if(!Length)
        begin 
            DataOut[31:0]<=#Tmem {24'b0,mem[Addr]};
        end
        Rdy<=#Tmem 1'b1;    
    end
end
endmodule

这是模拟: https://codepaste.net/zxtsmo 模拟卡住了十六进制地址&#34; CAFE&#34;和&#34; BABE&#34;,与长度变量无关。

0 个答案:

没有答案