FPGA通信问题请求帮助。。
有个想法在实施过程中遇到坎了,悲剧了就。。。想用fpga控制运动部分,ARM负责运算和界面。fpga和arm之间数据不多,但是要高速。
于是我想直接用总线方式控制,我只要在fpga内部建立几个内存空间就好,arm可以读写,fpga本身也可以读写,达到数据交换的目的。。。。我是用nios做的。
在编译程序的时候就悲剧了。
先奉上程序,现在只写了 arm写,nios总线读的部分 就出问题了
module ddram(
reset_n,
clk,
chipselect,
address,
write,
writedata,
read,
byteenable,
readdata,
wr,//arm写
rd,//arm读
datain,//数据
addr,//地址
ctr//片选
);
input clk;
input reset_n;
input chipselect;
input address;
input write;
input writedata;
input read;
input byteenable;
output readdata;
input wr;
input rd;
input ctr;
input datain;
input addr;
reg x_reg;
reg y_reg;
reg z_reg;
reg x_reg_selected;
reg y_reg_selected;
reg z_reg_selected;
reg readdata;
always @ (address)
begin
x_reg_selected<=0;
y_reg_selected<=0;
z_reg_selected<=0;
case(address)
2'b00:x_reg_selected<=1;
2'b01:y_reg_selected<=1;
2'b10:z_reg_selected<=1;
default:
begin
x_reg_selected<=0;
y_reg_selected<=0;
z_reg_selected<=0;
end
endcase
end
always @ (address or read or x_reg or y_reg or z_reg or chipselect)
begin
if(read & chipselect)
case(address)
2'b00:readdata<=x_reg;
2'b01:readdata<=y_reg;
2'b10:readdata<=z_reg;
default:readdata=32'h8888;
endcase
end
always @ (posedge clk or negedge reset_n)
begin
if(reset_n==1'b0)
begin
x_reg=32'h0000;
y_reg=32'h0000;
z_reg=32'h0000;
end
else
begin
if(ctr==1'b0)
if(wr==1'b0)
case(addr)
4'b0000:x_reg= datain;
4'b0001:x_reg = datain;
4'b0010:x_reg= datain;
4'b0011:x_reg= datain;
4'b0100:y_reg= datain;
4'b0101:y_reg = datain;
4'b0110:y_reg= datain;
4'b0111:y_reg= datain;
4'b1000:z_reg= datain;
4'b1000:z_reg = datain;
4'b1000:z_reg= datain;
4'b1000:z_reg= datain;
default:
begin
x_reg=32'h8888;
y_reg=32'h8888;
z_reg=32'h8888;
end
endcase
end
end
endmodule
在加入软核的时候报错如下
http://cache.amobbs.com/bbs_upload782111/files_51/ourdev_715783JC0LM2.jpg
(原文件名:报错.jpg)
不知道如何解决了。。。 你的 SOPC 是定義有錯,少很多東西。
s_irq,
s_chipselect_n,
s_read_n,
s_write_n,
s_address,
s_readdata,
s_writedata,
m_waitrequest, //表示無法接受新的讀寫操作
m_address, //讀寫操作的位址
m_read, //讀信號
m_readdata, //讀出去的資料
m_write, //寫信號
m_writedata, //寫進來的數據
m_byteenable, //位元組有效信號
m_burstcount, //顯示需要burst的資料數量
m_readdatavalid, //返回資料有效信號
一般使用 ARM 與 FPGA溝通就好,NIOS II 有仲裁機制增加自己問題多。
页:
[1]