PCIe to CAN FPGA 工程详细说明

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46621272/article/details/118244392?

采用 FPGA + SJA1000 实现 PCIe to CAN,FPGA 工程详细说明

包括 FPGA 工程创建,IP设置,Verilog 代码编写,约束文件。

FPGA Vivado 工程创建、步骤、详细说明。
有技术问题可以联系 [email protected]

  • 一. 在 Vivado 下建立一个芯片为 xc7a200tffg1156-2 的空工程(New Project)

  • 二. Create Block Design 起名为 pcie_can_bd

  • 三. 在 pcie_can_bd 中添加 IP 《DMA/Bridge Subsystem for PCI Express (PCIe)》

PCIe to CAN FPGA 工程详细说明_第1张图片

    1. 双击 xdma_0 修改 IP 配置。Basic 按缺省设置,未做修改,见下图

PCIe to CAN FPGA 工程详细说明_第2张图片

    1. PCIeID 按缺省设置,未做修改。
	// linux 驱动 0x10ee, 0x7011 这2个值,见下图
	static const struct pci_device_id oem_pci_tbl[] = {
		{0x10ee, 0x7011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
		{0,}
	};

PCIe to CAN FPGA 工程详细说明_第3张图片

    1. PCIeBARs 按下图修改

PCIe to CAN FPGA 工程详细说明_第4张图片

	// linux 驱动 就是对应 PCIe to AXI Lite Master Interface 1M 空间。见上图
	#define OEM_PCIE_BASE_SIZE  1024*1024 
    1. PCIeMISC 按下图修改,见下图

PCIe to CAN FPGA 工程详细说明_第5张图片

    1. PCIeDMA 按缺省设置,未做修改。见下图

PCIe to CAN FPGA 工程详细说明_第6张图片

  • 四. 在 pcie_can_bd 中添加 IP 《AXI EPC》 见下图

PCIe to CAN FPGA 工程详细说明_第7张图片

    1. 双击 axi_epc_0 修改 IP 配置。EPC 按缺省设置,未做修改见下图,本例实现了1路CAN,如果想实现多路,假如接 4片 SJA1000 芯片,实现4路CAN,这里 EPC 的数量修改为 “4”。

PCIe to CAN FPGA 工程详细说明_第8张图片

    1. Peripheral1 按下图修改,按 SJA1000 时序参数,不是很严谨,大概的比划着修改。见下图

PCIe to CAN FPGA 工程详细说明_第9张图片

    1. Advanced 按缺省设置,未做修改,见下图

PCIe to CAN FPGA 工程详细说明_第10张图片

    1. Summary 按缺省设置,未做修改,见下图

PCIe to CAN FPGA 工程详细说明_第11张图片

  • 五. 在 pcie_can_bd 中添加 IP 《Utility Buffer》 见下图

PCIe to CAN FPGA 工程详细说明_第12张图片

    1. 双击 util_ds_buf_0 修改 IP 配置。选择 IBUFDSGTE 按下图修改,见下图

PCIe to CAN FPGA 工程详细说明_第13张图片

  • 六. 在 pcie_can_bd 中添加单信号端口 Create Port

			1.		Create Port	pcie_rst_n
					Port name 	pcie_rst_n
					Direction	Input
					Type		Other
			2.		Create Port	pcie_irq	
					Port name 	pcie_irq
					Direction	Input
					Type		Other
			3.		Create Port	axi_clk	
					Port name 	axi_clk
					Direction	Output
					Type		Other
			4.		Create Port	axi_rstn
					Port name 	axi_rstn
					Direction	Output
					Type		Other
  • 七. 在 pcie_can_bd 中添加总线接口 Create Interface Port

			1.		Create Interface Port	pcie_ref
					Interface name 			pcie_ref
					Mode					SLAVE
					VLNV		xilinx.com:interface:diff_clock_rtl:1.0
			2.		Create Interface Port	epc
					Interface name 			epc
					Mode					MASTER
					VLNV		xilinx.com:interface:epc_rtl:1.0
			3.		Create Interface Port	pcie_mgt
					Interface name 			pcie_mgt
					Mode					MASTER
					VLNV		xilinx.com:interface:pcie_7x_mgt_rtl:1.0
  • 八.在 pcie_can_bd 中将各IP之间的连线画好,见下图

PCIe to CAN FPGA 工程详细说明_第14张图片

  • 九.在 pcie_can_bd 中进入 Address Editor 界面

    在 Address Editor 界面下点鼠标<右键> 选中 Auto Assign Address 见下图
    PCIe to CAN FPGA 工程详细说明_第15张图片

这个EPC外接的是 SJA1000 芯片,该芯片的地址范围是 0 - 0x7f ,我们选择该地址块大小为 4K。在 linux 驱动中 OEM_PCIE_CAN_CTRL_SIZE 就是这个值。这个地址的值可以修改可以是任意值,当然有计划的分配这个地址是最好的选择。这个地址很重要,需要记下来,在编写驱动时需要该地址。在 linux 驱动中 OEM_PCIE_CAN_BASE_OFFSET 就是这个值。
PCIe to CAN FPGA 工程详细说明_第16张图片

  • 十. 退出 pcie_can_bd 并保存

  • 十一. 在 Vivado 工程中加源文件 pcie_can_root.sv, pcie_can_root.xdc。

  • 十二.综合、布线、烧片、测试、完成。

连接:采用 FPGA 实现 <PCIe to CAN> 网卡的设计 https://blog.csdn.net/qq_46621272/article/details/118242161?

你可能感兴趣的:(FPGA+嵌入式,fpga,verilog,pcie,sja1000)