entity cpu_top is
port (
fpga_0_LEDS_GPIO_IO_O_pin : out std_logic_vector(0 to 3);
clk_10 : in std_logic );
end cpu_top;
architecture STRUCTURE of cpu_top is
COMPONENT my_dcm
PORT(
CLKIN_IN : IN std_logic;
RST_IN : IN std_logic;
CLKFX_OUT : OUT std_logic;
CLKIN_IBUFG_OUT : OUT std_logic;
LOCKED_OUT : OUT std_logic
);
END COMPONENT;
component cpu is
port (
fpga_0_LEDS_GPIO_IO_O_pin : out std_logic_vector(0 to 3);
fpga_0_clk_1_sys_clk_pin : in std_logic;
fpga_0_rst_1_sys_rst_pin : in std_logic;
bram_out_BRAM_EN_B_pin : in std_logic;
bram_out_BRAM_WEN_B_pin : in std_logic_vector(0 to 3);
bram_out_BRAM_Addr_B_pin : in std_logic_vector(0 to 31);
bram_out_BRAM_Din_B_pin : out std_logic_vector(0 to 31);
bram_out_BRAM_Dout_B_pin : in std_logic_vector(0 to 31);
xps_gpio_en_0_GPIO_IO_pin:in std_logic --控制软核读取信号
);
end component;
attribute BOX_TYPE : STRING;
attribute BOX_TYPE of cpu : component is "user_black_box";
signal clk_50,locked:std_logic;
signal temp_in,temp_out:std_logic_vector(0 to 31);
signal cnt:std_logic_vector(0 to 31);
signal wen_b:std_logic_VECTOR(0 TO 3):="1111";
signal led:std_logic:='1';
process(clk_50)
variable cnt_1:std_logic_vector(0 to 15);
variable cnt_2:std_logic_vector(0 to 15);
variable wen:std_logic_vector(0 to 3);
begin
if(rising_edge(clk_50))then
if cnt_1=x"0011" then
wen:="0000";
led<='0';
else
cnt_1:=cnt_1+1;
cnt_2:=cnt_2+1;
end if;
end if;
wen_b<=wen;
cnt<=x"0000"&cnt_1;
temp_in<=x"0000"&cnt_2;
end process;
begin
Inst_my_dcm: my_dcm PORT MAP(
CLKIN_IN => clk_10,
RST_IN => '0',
CLKFX_OUT => clk_50,
CLKIN_IBUFG_OUT => open,
LOCKED_OUT => locked
);
cpu_i : cpu
port map (
fpga_0_LEDS_GPIO_IO_O_pin => fpga_0_LEDS_GPIO_IO_O_pin, --读取完成后点亮led
fpga_0_clk_1_sys_clk_pin => clk_50,
fpga_0_rst_1_sys_rst_pin => locked,
bram_out_BRAM_EN_B_pin => '1',
bram_out_BRAM_WEN_B_pin => wen_b,
bram_out_BRAM_Addr_B_pin => cnt,
bram_out_BRAM_Din_B_pin => temp_out,
bram_out_BRAM_Dout_B_pin => temp_in,
xps_gpio_en_0_GPIO_IO_pin=>led
);
end architecture STRUCTURE;
对应c代码如下:
#include <stdio.h>
#include "platform.h"
#include "xil_io.h"
#include "xparameters.h"
#include "xgpio.h"
#include <xio.h>
#include "xbram.h"
#include "xgpio_l.h"
int main()
{
int j,m=0;
XBram_Config *ConfigPtr;
u32 bram_data[256]={0x0};
while(1)
{
i=XIo_In32((u32*)XPAR_XPS_GPIO_EN_0_BASEADDR);
while(i==0x0)
{
/* for(i=0;i<256;i++)
{
XIo_Out32((u32*)(XPAR_BRAM_OUT_IF_CNTLR_BASEADDR+i),0x1);
}
*/
// for(m=0;m<9999999;m++);
ConfigPtr = XBram_LookupConfig(XPAR_BRAM_OUT_IF_CNTLR_DEVICE_ID);
if (ConfigPtr == (XBram_Config *) NULL) {
break; }
for(j=0;j<256 ;j++)
{
bram_data[j]=XIo_In32((u32*)(XPAR_BRAM_OUT_IF_CNTLR_BASEADDR+j));
}
XIo_Out32(XPAR_LEDS_BASEADDR, 0xF);
k=1;
break;
}
if (k==1) break;
}
return 0;
}
我分步测试发现就没有进入到第二个while循环中去,然后我把循环去掉,直接读取,
读取出来的数不是我写进去的数,而且是连着的四个数是一样的,是写的过程不对吗?
我在c里面直接自己写自己读取就是对的,大神们救救我吧,搞不出来都不让我回家,赶紧回家过年了 呜呜呜。。。。
5 个解决方案
#1
ISE那边读写正常吗?
#2
ise那边只是写数据,然后在sdk里面读出来,但是读不到数据,所以肯定是ise这边没写成功,但是不是这样写还能怎么写呢? 疑惑啊 还请帮忙看看啊 多谢 。 把bram端口引到ise端,然后让en和wen始终有效,给地址给数据不就写进去了吗?是不是还有别的需要注意的呢 ?
#3
ise那边只是写数据,然后在sdk里面读出来,但是读不到数据,所以肯定是ise这边没写成功,但是不是这样写还能怎么写呢? 疑惑啊 还请帮忙看看啊 多谢 。 把bram端口引到ise端,然后让en和wen始终有效,给地址给数据不就写进去了吗?是不是还有别的需要注意的呢 ?
#4
...我也碰到这问题,可以问问楼主解决了吗?还有怎么从ISE读ram里的内容啊
#5
你好,我现在也遇到这个问题,在C语言中自己写自己读也是连续输出四个相同的数据,不知道为什么。求指导。。
#1
ISE那边读写正常吗?
#2
ise那边只是写数据,然后在sdk里面读出来,但是读不到数据,所以肯定是ise这边没写成功,但是不是这样写还能怎么写呢? 疑惑啊 还请帮忙看看啊 多谢 。 把bram端口引到ise端,然后让en和wen始终有效,给地址给数据不就写进去了吗?是不是还有别的需要注意的呢 ?
#3
ise那边只是写数据,然后在sdk里面读出来,但是读不到数据,所以肯定是ise这边没写成功,但是不是这样写还能怎么写呢? 疑惑啊 还请帮忙看看啊 多谢 。 把bram端口引到ise端,然后让en和wen始终有效,给地址给数据不就写进去了吗?是不是还有别的需要注意的呢 ?
#4
...我也碰到这问题,可以问问楼主解决了吗?还有怎么从ISE读ram里的内容啊
#5
你好,我现在也遇到这个问题,在C语言中自己写自己读也是连续输出四个相同的数据,不知道为什么。求指导。。