DDR3 FIFO设计进展与调试报告

5星 · 超过95%的资源 需积分: 50 45 下载量 150 浏览量 更新于2024-07-16 5 收藏 2.71MB DOC 举报
本资源是一份关于DDR3 FIFO(双数据速率三点式同步动态随机存取存储器)设计和调试的详细文档,由黄山虎在鸿秦科技公司于2020年进行。文档主要关注FPGA(Field-Programmable Gate Array,可编程门阵列)与MT41K256M16-32Meg * 16 * 8 banks型号的DDR3内存模块的集成应用,使用的是Xilinx K7325硬件平台,并利用Vivado 2017.4版本的软件工具进行开发。 文档的版本更新记录从v10到v17,展示了设计过程的逐步深入。以下是关键知识点: 1. **v10 - v11**:初始阶段,设计了单通道的边读边写功能,并实现了64位宽的读写FIFO(First-In First-Out,先进先出队列),这是基本的数据流管理模块,用于缓存和控制DDR3的数据传输。 2. **v12**:升级到突发长度3的模式,继续优化数据传输效率,可能涉及了突发读写操作,这在DDR3中是一种常见的性能提升策略。 3. **v13**:增加了双通道的设计,允许同时处理两个独立的数据流,进一步提高了吞吐量。 4. **v14 - v15**:重点关注连续写入模式下的读写效率测试,通过这些版本,开发者可能在测试不同工作负载下的性能表现。 5. **v16 - v17**:文档的后期版本着重于下板测试,分别对连续读写64个和128个数据块进行了实际硬件验证,这涉及到硬件接口的实现和测试结果的分析。 在整个过程中,ILA(逻辑分析仪)可能是用来监控和调试FPGA与DDR3交互的重要工具,确保数据一致性并诊断潜在问题。通过这些版本迭代,设计者不断优化设计,从理论模型扩展到实际硬件应用,展示了在FPGA环境下实现DDR3接口的复杂性和技术细节。如果你在后续的工作或学习中遇到相关问题,可以联系作者获取未发布的代码或更深入的技术支持。

帮我优化一下这段代码配置2M波特率的CANFD :#include "can.h" #include "gd32c10x.h" #include "gd32c10x_eval.h" void can_gpio_config(void) { rcu_periph_clock_enable(RCU_CAN0); rcu_periph_clock_enable(RCU_CAN1); rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_AF); gpio_init(GPIOB,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_8); gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_9); gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_5); gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6); gpio_pin_remap_config(GPIO_CAN0_PARTIAL_REMAP , ENABLE); gpio_pin_remap_config(GPIO_CAN1_REMAP, ENABLE); } void can_config(void) { can_parameter_struct can_parameter; can_fdframe_struct can_fd_parameter; can_fd_tdc_struct can_fd_tdc_parameter; can_struct_para_init(CAN_INIT_STRUCT, &can_parameter); can_deinit(CAN0); can_deinit(CAN1); can_parameter.time_triggered = DISABLE; can_parameter.auto_bus_off_recovery = DISABLE; can_parameter.auto_wake_up = DISABLE; can_parameter.auto_retrans = ENABLE; can_parameter.rec_fifo_overwrite = DISABLE; can_parameter.trans_fifo_order = DISABLE; can_parameter.working_mode = CAN_NORMAL_MODE; can_init(CAN0, &can_parameter); can_init(CAN1, &can_parameter); can_frequency_set(CAN0, CAN_BAUD_RATE); can_frequency_set(CAN1, CAN_BAUD_RATE); can_struct_para_init(CAN_FD_FRAME_STRUCT, &can_fd_parameter); can_fd_parameter.fd_frame = ENABLE; can_fd_parameter.excp_event_detect = ENABLE; can_fd_parameter.delay_compensation = ENABLE; can_fd_tdc_parameter.tdc_filter = 0x04; can_fd_tdc_parameter.tdc_mode = CAN_TDCMOD_CALC_AND_OFFSET; can_fd_tdc_parameter.tdc_offset = 0x04; can_fd_parameter.p_delay_compensation = &can_fd_tdc_parameter; can_fd_parameter.iso_bosch = CAN_FDMOD_ISO; can_fd_parameter.esi_mode = CAN_ESIMOD_HARDWARE; can_fd_init(CAN0, &can_fd_parameter); can_fd_init(CAN1, &can_fd_parameter); can_fd_frequency_set(CAN0, CANFD_BAUD_RATE); can_fd_frequency_set(CAN1, CANFD_BAUD_RATE); can1_filter_start_bank(14); can_filter_mask_mode_init(DEV_CAN0_ID, DEV_CAN0_MASK, CAN_EXTENDED_FIFO0, 0); can_filter_mask_mode_init(DEV_CAN1_ID, DEV_CAN1_MASK, CAN_EXTENDED_FIFO0, 15); nvic_irq_enable(CAN0_RX0_IRQn, 7, 0); nvic_irq_enable(CAN1_RX0_IRQn, 7, 0); can_interrupt_enable(CAN0, CAN_INTEN_RFNEIE0); can_interrupt_enable(CAN1, CAN_INTEN_RFNEIE0); }

2023-05-31 上传