打印
[FPGA]

stm32H7利用fpga扩展fmc时,fpga读取arm数据不对

[复制链接]
2643|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fu4730|  楼主 | 2019-8-21 16:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fu4730 于 2019-8-21 16:21 编辑

arm初始化程序如下:
static void MX_FMC_Init(void)
{

  /* USER CODE BEGIN FMC_Init 0 */

  /* USER CODE END FMC_Init 0 */

  FMC_NORSRAM_TimingTypeDef Timing = {0};
  FMC_SDRAM_TimingTypeDef SdramTiming = {0};

  /* USER CODE BEGIN FMC_Init 1 */

  /* USER CODE END FMC_Init 1 */

  /** Perform the SRAM1 memory initialization sequence
  */
  hsram1.Instance = FMC_NORSRAM_DEVICE;
  hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  /* hsram1.Init */
  hsram1.Init.NSBank = FMC_NORSRAM_BANK1;
  hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
  hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
  hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
  hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
  hsram1.Init.WriteFifo = FMC_WRITE_FIFO_DISABLE;
  hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
  /* Timing */
  Timing.AddressSetupTime = 15;
  Timing.AddressHoldTime = 15;
  Timing.DataSetupTime = 30;
  Timing.BusTurnAroundDuration = 0;
  Timing.CLKDivision = 0;
  Timing.DataLatency = 0;
  Timing.AccessMode = FMC_ACCESS_MODE_A;
  /* ExtTiming */

  if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
  {
    Error_Handler( );
  }


arm主程序中向fpga写数据程序如下:
*(SRAM_BANK1_BASE_ADDRESS + 0x0002) = 0xff00;
fpga 程序如下:
pll_100M        pll_100M_inst (
        .inclk0 ( clk ),
        .c0 ( clk_100M )
        );
        
assign FMC_Data = ((flag)?FMC_Data_out:16'bz);

always@(posedge clk_100M)begin
   DO_EN <= 0;
   if((ne1 == 0)&&(nwe == 1)&&(noe == 0))//&&(nwait == 1'b0))
           flag <= 1;
        else if((ne1 == 0)&&(nwe == 0)&&(noe == 1))//&&(nwait == 1'b0))
           flag <= 0;
end

always@(posedge clk_100M)begin
if((flag == 0)&&(Addr == 8'h2))begin  //&&(DO_EN == 1'b0)
           //if(delay_1clk == 1)begin
                  // delay_1clk <= 0;
              DO[15:0] <= FMC_Data;
                end
          // else
                  // delay_1clk <= delay_1clk + 1;
end

endmodule

keil5中memory观察到的数据如下:
fpga signaltap ii观察到的数据如下:
问题:为什么signaltap ii观察到的数据是arm向fpga写了四个地址,实际上arm只写了一个地址


kk_image.jpg.png (157.81 KB )

memory数据

memory数据

default.jpg.png (166.23 KB )

signaltap数据

signaltap数据

使用特权

评论回复

相关帖子

沙发
zhangmangui| | 2019-8-21 22:20 | 只看该作者
FPGA这边抓取的肯定是对的   你再查查arm那边

使用特权

评论回复
板凳
fu4730|  楼主 | 2019-8-22 08:48 | 只看该作者
zhangmangui 发表于 2019-8-21 22:20
FPGA这边抓取的肯定是对的   你再查查arm那边

arm这边直接用cube初始化的,没问题啊,关键是arm只给地址02赋值,signaltap ii 看到4个地址的值,不晓得问题出在哪儿?

使用特权

评论回复
地板
fu4730|  楼主 | 2019-8-22 08:48 | 只看该作者
fu4730 发表于 2019-8-22 08:48
arm这边直接用cube初始化的,没问题啊,关键是arm只给地址02赋值,signaltap ii 看到4个地址的值,不晓得 ...

程序都已全部贴出来了

使用特权

评论回复
5
fu4730|  楼主 | 2019-8-22 08:54 | 只看该作者
fu4730 发表于 2019-8-22 08:48
程序都已全部贴出来了

另外就是 arm读数据没问题 就是arm写数据不对

使用特权

评论回复
6
yt1024| | 2019-11-13 09:02 | 只看该作者
楼主的问题解决了吗?我也遇到了同样的问题

使用特权

评论回复
7
fu4730|  楼主 | 2019-11-14 12:08 | 只看该作者
yt1024 发表于 2019-11-13 09:02
楼主的问题解决了吗?我也遇到了同样的问题

解决了,没问题。波形时对的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

17

帖子

0

粉丝