1. Quartus 工程创建

 1. 在电脑左下角的开始菜单找到Quartus软件,点击打开该软件:

 2. 点击Quartus工具的File——New Project Wizard:

 

 3. 弹出如下对话框时点击Next:

 4. 在你的工作目录创建一个DE10_Standard_ADC文件夹:

 

 

 5. 设置工程路径,指定到你刚才创建的DE10_Standard_ADC文件夹下,然后给工程命名DE10_Standard_ADC, 点击Next:

 6. 点击Next:

 

 7. 在Name Filter处键入你的开发板对应的FPGA器件型号,从而在Avaliable devices窗口筛选出你要的器件(比如DE10-Standard开发板对应的FPGA 器件是5CSXFC6D6F31C6),点击该器件,然后点击Next:

 8. 继续点击Next:

 9. 这时候汇总出一个工程创建的报告如下,点击Finish完成工程创建:

 10. 工程创建完成后界面如下:

 

11. 按照文章 9-LTC2308控制器设计——自定义IP(Avalon MM) 完成自定义IP(adc_ltc2308)的封装。

接下来开始搭建Platform Designer系统。

 12. 点击如下Platform Designer 按钮:

13. 右击clk_0组件,选择Rename,将组件clk_0命名为clk_50:

 

14. 在IP Catalog处键入pll搜索找到Altera PLL  IP,双击打开它的配置界面:

15. 设置 Reference Clock Frequency 为50MHz, 输出2路时钟,一路是100M, 用于各个模块的工作时钟,一路是40MHz, 用于输出给LTC2308器件,最后点击Finish完成PLL 模块的设置:

16. 在IP Catalog处键入nios 搜索找到Nios II Processor,双击打开它的配置界面:

17.如果是免费版本的Quartus Prime( 即Lite版本),  请选择Nios II/e,然后点击Finish结束Nios II IP的设置:

 

18. 在IP Catalog处键入onc 搜索找到On-Chip Memory,双击打开它的配置界面:

19. 数据宽度保持32bit, Memory Size设置160000字节, 然后点击Finish结束该IP的设置:

 

20. 在IP Catalog处键入sysid搜索找到System ID Peripheral IP,双击打开它的配置界面:

 

 21. 保持System ID Peripheral IP的默认设置不变,点击Finish:

 22. 在IP Catalog处键入jtag搜索找到JTAG UART IP,双击打开它的配置界面:

 

 23.保持JTAG UART IP的默认设置不变,点击Finish:

 24. 在IP Catalog处键入pio搜索找到PIO(Parallel I/O) IP,双击打开它的配置界面:

 25. 将PIO IP 的位宽设置为10, Direction设置为Input,然后点击Finish结束PIO IP 的设置:

26. 双击IP Catalog 里面的自定义IP adc_ltc2308, 然后点击Finish:

  27. 接下来将这些模块名称重命名如下:

 

28. IP添加完成以后就可以进行IP之间的互连。Platform Designer 界面已经把可能互连的信号端口用暗浅色线相连,用户只需将鼠标放到两个端口相连的小圆圈处点击一下,就完成了真正的端口相连。首先是连接时钟网络。clk_50 的clk端口输出50MHz给PLL 模块 作为参考时钟,互联关系如下黑色粗线连接:

29. 然后是PLL 模块的outclk0 输出的100MHz时钟给其他所有模块,互连情况如下粗黑线:

30. 接下来是PLL 模块的outclk1 输出的40MHz时钟给LTC2308,连接情况如下粗黑线:

  31. 将所有模块的复位端口都连接到clk_50 模块的复位端口,连接情况如下粗黑线:

 32. 将所有模块的slave端口都连接到nios2_gen2_0模块的data_master端口,连接情况如下粗黑线:

33. 将nios2_gen2_0的数据总线、指令总线跟debug_mem_slave和onchip_memory2的slave总线相连如下:

 

34. 双击pio 模块conduit_end端口对应的Export列(上面显示Double-click to export)将该端口导出(双击后显示pio_external_connection),同样的,双击adc_ltc2308模块conduit_end端口对应的Export列将其端口导出(双击后显示adc_ltc2308_conduit_end):

35.将jtag_uart的中断端口连接到nios2_gen2_0 的irq端口:

 

36. 然后是地址分配。双击每个模块的Base列的地址即可修改该模块的基地址:

37.设置nios2_gen2_0的Reset vector memory 为onchip_memory2.s1,以及设置Exception vector memory 也为onchip_memory2.s1:

 

38. 点击Generate HDL...,然后在Path处点击...,这里直接将文件生成的路径设置到~DE10_Standard_ADC\DE10_Standard_QSYS,然后点击Select,然后点击Generate:

 

 39. 点击Close:

 40. 点击Finish:

 

 41. 点击OK:

42. 接下来开始创建top-level文件,点击File——New:

 43. 选择Verilog HDL File, 然后点击OK:

44. 然后弹出如下界面:

45. 将如下代码拷贝到该新建的.v文件里面:

module DE10_Standard_ADC(
      ///////// CLOCK /////////
      input         CLOCK_50,
      ///////// SW /////////
      input    [ 9: 0]   SW,
      ///////// ADC /////////
      output             ADC_SCLK,
      input              ADC_DOUT,
      output             ADC_DIN,
      output             ADC_CONVST
);

//=======================================================
//  Structural coding
//=======================================================
endmodule

46. 打开~DE10_Standard_ADC\DE10_Standard_QSYS\DE10_Standard_QSYS_inst.v,将文件中的内容拷贝到刚才新建的.v文件里面:

47.然后修改代码(将FPGA对外的端口与FPGA内部模块信号连接起来)如下:

    DE10_Standard_QSYS u0 (
        .adc_ltc2308_conduit_end_adc_convst (ADC_CONVST), // adc_ltc2308_conduit_end.adc_convst
        .adc_ltc2308_conduit_end_adc_sck    (ADC_SCLK),    // .adc_sck
        .adc_ltc2308_conduit_end_adc_sdi    (ADC_DIN),    //  .adc_sdi
        .adc_ltc2308_conduit_end_adc_sdo    (ADC_DOUT),    // .adc_sdo
        .clk_clk                            (CLOCK_50),    //   clk.clk
        .reset_reset_n                      (1'b1),        //  reset.reset_n
        .sw_external_connection_export      (SW)       //  sw_external_connection.export
    );

48. 点击保存:

 

 49. 保存时保持文件名称默认是DE10_Standard_ADC:

 50. 点击分析与综合:

51. 点击Quartus的菜单Assignments——Pin Planner来打开引脚分配的界面:

 52. 引脚分配请参考友晶官方发布的DE10-Standard_User_manual.pdf手册,具体的引脚分配如下:

 53. 点击编译按钮进行工程编译,编译成功后页面最下面会显示100%:

 

54. 最后在Quartus工程目录下可以看到生成的sof文件:

 

 

往期推荐阅读: