3.4串口通信-明德扬至简设计法原理与应用(2)
第4节 综合工程和上板
4.1 新建工程
打开软件Quartus Ⅱ,点击“File”下拉列表中的New ProjectWzard...新建工程选项,如下图所示。

图3.4-28Quartus新建工程
然后会出现Quartus新建工程介绍,如下图所示,直接点击“Next”。

图3.4-29Quartus新建工程介绍
此时会出现的是工程文件夹、工程名、顶层模块名设置界面,如图3.4-30所示。设置目录为:D:/mdy_book/uart,工程名和顶层名为uart。这里再次强调,为了避免初学者使用过程中出现报错情况,强烈建议按照本书的工程名和文件名进行设置,设置完成后点击“Next”。

图3.4-30QUARTUS新建工程设置名称
新建工程类型设置选择“Empty project”,如下图所示,然后点击“Next”。

图3.4-31QUARTUS新建工程类型
文件添加界面如图3.4- 32所示,点击右侧的“Add”按钮,选择之前写好的“uart.v”文件,可以看到界面下方会显示出文件,随后点击“Next”。

图3.4-32QUARTUS添加文件
芯片型号选择界面如图3.4- 33所示,选择“Cyclone ⅣE”,在芯片型号选择处选择“EP4CE15F23C8”,之后点击“Next”。

图3.4-33QUARTUS选择芯片型号

图3.4- 34为QUARTUS
图3.4-34QUARTUS设置工具界面不必做任何修改,直接点击“Next”即可。
下图可以看到新建工程的汇总情况,点击“Finish”,完成新建工程。

图3.4-35QUARTUS新建工程汇总界面
4.2 综合
新建工程步骤完成后,就会出现如下所示的QUARTUS界面。

图3.4-36QUARTUS新建工程后界面
点击编译按钮,可以对整个工程进行编译。编译成功的界面,如图3.4- 37所示。

图3.4-37QUARTUS编译后界面
4.3 配置管脚
下面需要对相应管脚进行配置。如下图所示,在菜单栏中选中“Assignments”,然后选择“Pin Planner”,就会弹出配置管脚的窗口。

图3.4-38QUARTUS配置管脚选项
在配置窗口最下方中的“location”一列,参考信号和管脚关系,按照表3.4- 1中最右两列配置好FPGA管脚。配置管理来源参见管脚配置环节,配置结果如图3.4- 39所示。配置完成后,关闭“PinPlanner”,软件自动会保存管脚配置信息。
表3.4 - 1信号和管脚关系


图3.4-39 QUARTUS配置管脚
4.4 再次综合
再次打开“QUARTUS”软件,在菜单栏中选中“Processing”,然后选择“StartCompilation”,再次对整个工程进行编译和综合,如下图所示。

图3.4-40QUARTUS编译选项
当出现如下所示的编译成功标志时,说明编译综合成功。

图3.4-41QUARTUS编译成功标志
4.5 连接开发板
完成编译后开始进行上板调试操作,按照下图的方式,将下载器接入电脑USB接口,接上开发板电源后按下开发板下方蓝色开关,硬件连接完毕。

图3.4-42开发板连接图
4.6 上板
打开QUARTUS界面,单击界面中的 ,弹出配置界面。点击“add file”添加“.sof”文件,点击“Start”,会在“Progress”出现显示进度。

图3.4-43QUARTUS界面
当进度条到100%时提示成功,即表示上板结束。

图3.4-44QUARTUS下载程序界面
4.7 串口调试
开发板连接完成后按下电源键,随后打开电脑的设备管理器,确认串口的端口号。从下图可以看出,当前串口的端口号为COM3。

图3.4-45设备管理器显示端口号
前文提供了串口调试工具下载地址,安装完成后,打开串口调试助手,其界面如下图所示。在操作界面进行设置:在串口选项中选择端口号,这里要注意端口号的选择需要与设备管理器中端口号显示一致,即为“COM3”;波特率选项选择“9600”;校验位选项选择“无校验位”;数据位选项选择“8”;停止位选项选择“2”;注意一定要勾选“十六进制显示”和“十六进制发送”两个选项:

图3.4-46串口调试助手界面
设置好串口助手后,就可以观察发送数据的现象。在发送数据栏输入相应的数据(将8个LED灯对应的8位二进制数转化为十六进制),然后点击手动发送,即可在开发板上观察到相应的现象。可以尝试发送不同的指令,看是否可以得到相应的LED灯变化效果。特别要注意的是,指令的顺序应与小灯亮的顺序相同,如果两者不同,则需检查指令顺序是否发生输入错误。
第5节 简化版步骤分享
同样这里也会分享简化版的步骤,方便复习以及反复实操。
5.1 设计实现
5.1.1顶层信号
新建目录:D:mdy_bookuart。在该目录中,新建一个名为uart.v的文件,并用GVIM打开,开始编写代码。
确定顶层信号。本工程共需要4个信号,一个8位信号led,时钟clk,复位rst_n和串口输入信号rx_uart,工程信号和管脚关系图如下:
表3.4 - 1信号和管脚关系

写出顶层信号代码:

声明输入输出属性:

5.1.2信号设计
首先进行架构设计,串口时序图如下所示:

图3.4-2串口时序图
串口通信实现架构图如下:

图3.4-15串口通信实现架构图【去掉ns】
添加一个“flag_add”信号,从而满足计数器的加1条件。

图3.4-17补充加1条件flag_add[去掉ns]
设计计数器架构,对表示1比特位宽长度的计数器cnt0进行设计,其代码如下:

计算比特个数的计数器cnt1的设计代码如下:

rx_uart的代码如下:

flag_add的代码如下:

led代码如下:

至此,主体程序完成,下面将module补充完整。
5.1.3信号定义
定义信号类型,其中cnt0的信号定义如下:

add_cnt0 和 end_cnt0 的信号定义如下:

cnt1 的信号定义如下:

add_cnt1 和 end_cnt1 的信号定义如下:

flag_add的信号定义如下:

rx_uart_ff0、rx_uart_ff1和rx_uart_ff2的信号定义如下:

至此,整个工程的代码的设计工作已经完成,接下来新建工程,对代码进行编译综合后上板查看现象。
5.2 综合工程和上板
5.2.1新建工程
打开软件Quartus Ⅱ,点击“File”下拉列表中的New ProjectWzard...新建工程选项。

图3.4-28Quartus新建工程
直接点击“Next”:

图3.4-29Quartus新建工程介绍
此时出现的是工程文件夹、工程名、顶层模块名设置界面,完成设置后点击“Next”:

图 3.4 - 43QUARTUS新建工程设置名称
选择“Empty project”后点击“Next”。

图3.4-31QUARTUS新建工程类型
点击右侧的“Add”按钮,选择“huxiled.v”文件完成添加后点击“Next”。

图3.4-32QUARTUS添加文件
“Device family”选项中选择“Cyclone ⅣE”,“Available devices”选项下选择“EP4CE15F23C8”,随后点击“Next”。

图3.4-33QUARTUS选择芯片型号
直接点击“Next”。

图3.4-34QUARTUS设置工具界面
点击“Finish”,完成新建工程。

图3.4-35QUARTUS新建工程汇总界面
5.2.2综合
新建工程后界面如下图所示,点击“编译”。

图3.4-36QUARTUS新建工程后界面
编译成功如下图所示。

图3.4-37QUARTUS编译后界面
5.2.3配置管脚
在菜单栏中点击“Assignments”后点击“Pin Planner”,随后会弹出配置管脚的窗口。

图3.4-38QUARTUS配置管脚选项
在配置窗口“location”根据信号和管脚关系配置管脚,配置完成关闭“Pin Planner”即可自动保存配置信息。

图3.4-39QUARTUS配置管脚
表3.4–1 信号和管脚关系

5.2.4再次综合
打开“QUARTUS”软件,在菜单栏中选择“Processing”,点击“StartCompilation”再次进行综合。

图3.4-40QUARTUS编译选项
出现 QUARTUS 编译成功标志则表示编译成功。

图3.4-41QUARTUS编译成功标志
5.2.5连接开发板
下载器接入电脑 USB 接口,开发板接上电源后按下蓝色开关。

图3.4-42开发板连接图
5.2.6上板
打开QUARTUS界面,单击“ ”图标后弹出配置界面。点击“add file”添加“.sof”文件后点击“Start”,在“Progress”中会显示当前进度。

图3.4-43QUARTUS界面
如下图所示,进度条显示为100%,提示成功,即表示上板结束。

图3.4-44QUARTUS下载程序界面
5.2.7串口调试
开发板连接完成后,按下开发板的电源键,打开电脑的设备管理器并确认串口的端口号,如下图所示:

图3.4-45设备管理器显示端口号
下载本书提供的串口调试工具后,打开串口调试助手。对串口调试助手进行设置:选择端口号、波特率选“9600”、校验位选“无校验位”、数据位选“8”、停止位选“2”、一定要勾选“十六进制显示”和“十六进制发送”两个选项。

图3.4-46串口调试助手界面
在发送数据栏输入相应的数据(将8个LED灯对应的8位二进制数转化为十六进制)后点击手动发送,即可在开发板上观察现象。
第6节 扩展练习
至此整个串口通信的设计就分享完毕了。在学会整个设计之后可以展开思考,尝试发送不同的指令,看是否可以得到相应的LED灯变化效果。在基于原理不变的情况下多做一些尝试,这样可以更深刻的掌握案例,也欢迎有更好思路和想法的同学前往至简设计法论坛进行讨论。