0
我正在嘗試訪問單端口Block RAM。下面的代碼是獲取程序計數器PC指向的指令。我能夠推斷出一個單端口塊RAM,直到我在我的代碼中使用'execute'狀態將數據寫入寄存器'a'的RAM中。但是,當我添加代碼中顯示的執行狀態時,我推斷出雙端口RAM。verilog中的單端口塊RAM - 斯巴達6
而且,代碼的最後一行「的data_out = MEM [PC]」必須加到推斷RAM別的我沒有得到它。
有人可以請解釋爲什麼會發生如何避免這種情況?任何幫助表示讚賞。
謝謝
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;
[email protected] (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