首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >6中的单端口块RAM

6中的单端口块RAM
EN

Stack Overflow用户
提问于 2014-03-30 21:33:35
回答 1查看 941关注 0票数 0

我正在尝试访问一个单一端口块RAM。下面的代码是用来获取程序计数器PC所指向的指令。在使用代码中的“execute”状态从寄存器'a‘将数据写入RAM之前,我能够推断单个端口块RAM。但是,当我添加执行状态时,如代码所示,我将推断出双口RAM。

此外,必须添加代码'data_out=mempc‘的最后一行才能推断出内存,否则我将无法得到它。

有人能解释一下为什么会发生这种情况吗?如何避免这种情况?任何帮助都是非常感谢的。

谢谢

代码语言:javascript
复制
module RAM_param(clk,data_out);
parameter n = 12;
parameter w = 16;

input clk;
reg read_write;


output reg [w-1:0] data_out;



parameter [1:0]
pc_val = 2'b00,
ifetch = 2'b01,
decode = 2'b10,
execute=2'b11;

reg [15:0]a;
reg [15:0]b;
reg [11:0] pc=12'd0;
reg [11:0] sp;
reg [11:0] addr;
reg [15:0] ir;
reg [15:0] mem [4095:0];
reg c,z,IEN;
reg [1:0]next_state=2'b00;
reg wen;




always@ (posedge clk)
begin

case(next_state)

pc_val:
        begin
                pc=pc+1;
                next_state<= ifetch;
        end

ifetch:     
        begin

            ir=mem[pc];

            next_state<=decode;
        end   

decode: 
        begin
            addr=ir[11:0];
            if(ir[15:12]==4'b0000)//LDA
                a=mem[addr];

            else if(ir[15:12]==4'b0001)//LDB
                b=mem[addr];

            else if (ir[15:12]==4'b0010)//STA
            begin
                wen=1;
                next_state<=execute;
            end 
        end

execute: begin
            if(wen==1)
            mem[addr]=a;
           end


endcase
data_out=mem[pc];
end
endmodule 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-31 03:54:38

您在每个时钟周期从ram中读取“data_out”,并且根据next_state变量的不同,在相同的周期中尝试将其写入内存。

如果您希望ram是单个端口,则不能在同一周期内读写它。因此,要么使用双端口ram,要么将“data_out”读入另一种状态,在这种状态下,您也不向ram写入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22750166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档