大侠好,欢迎来到 FPGA 技术江湖,江湖偌大,相见即是缘分。大侠可以关注 FPGA 技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
本系列将带来 FPGA 的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。后续会陆续更新 Xilinx 的 Vivado、ISE 及相关操作软件的开发的相关内容,学习 FPGA 设计方法及设计思想的同时,实操结合各类操作软件,会让你在技术学习道路上无比的顺畅,告别技术学习小 BUG 卡破脑壳,告别目前忽悠性的培训诱导,真正的去学习去实战应用。话不多说,上货。
signal tap 逻辑分析仪使用教程
在之前的设计开发时,利用 modelsim 得出中间某单元的数据,并且输入也是设计者在 testbench 中自己给出的。但是,实际应用时,外部输入的信号不一定和我们在 testbench 中所描述输入的信号相同,就有可能导致 RTL 仿真成功,但是下板测试失败。
signal tap logic analyzer 采集并显示 FPGA 设计中的实时信号行为,从而无需额外的 I/O 管脚或者外部实验室设备即可检查正常器件操作期间内部信号的行为。
在数据获取期间,器件中的存储器模块存储采集的数据,然后通过 JTAG 通信电缆将数据传输到逻辑分析仪。
下图为 signal tap logic analyzer 的任务流程。
- 设计要求
利用逻辑分析仪测量出电脑发送 UART(波特率为 115200 时)是每 bit 时间宽度。
- 设计分析
在 UART 协议中规定了每 bit 的时间宽度应该是 1 秒钟除以波特率,但是在实际电路中相同标号的两个晶振也会有一定的误差。我们可以利用逻辑分析仪(也就是利用 FPGA 的时钟)去测量一下 PC 发送 UART 时的 bit 时间宽度。
由于波特率为 115200,在采样时,一般采用 16 倍频采样。此时采样频率比较高,由基础的 50MHz 的时钟不能够做出精确的 16 倍频,由此也会带来一定的误差。
利用逻辑分析仪就可以看到在上述两个都有误差的情况,真实采样的偏差,以及偏差对我们的设计是否有影响。
- 设计实现
将_9_uart_drive 复制一份,命名为_10_uart_drive_signal_tap。然后打开此工程,将波特率修改为 115200。
点击 tools -> signal tap logic analyzer。
在右侧窗口 signal configuration 中,首先需要指定一个采样时钟信号。
逻辑分析仪在采样时钟的每个上升沿进行数据采样。逻辑分析仪不支持在采样时钟的下降沿进行数据采样。设计中的任何信号都可以用作采样时钟。但是,为了获得最佳的数据采样结果,请使用与被测信号同步的全局时钟。
在本设计中,所有的信号都是由外部的 clk 信号进行驱动的,所以此采样时钟,选择为 clk。点击 clock 对话框后面的三个点。将 filter 选择为 pin:all,点击 list,在 matching nodes 中选择 clk,点击“大于”,在 nodes found 中出现 clk,然后点击 ok。
配置完采样时钟信号后,需要配置采样深度。
针对被采样的数据中的每个信号,采样深度指定了采样和存储的样本的数量。在器件存储器资源有限的情况下,由于所选的深度太大,设计可能无法编译。此时需要降低采样深度以减少资源使用。
采样深度乘以采样的间隔就确定了采样的时间宽度。现在我们要做的是采样一个 UART 的协议帧,一个协议帧共有 12 个 bit。按照 115200 的波特率,采样的时间宽度应该是 104166ns,所以采样深度应该是 5208,在此选择采样深度为 8K。
当确定好采样深度后,可以指定逻辑分析仪在触发事件之前和之后 采样的数据量。
逻辑分析仪提供三种选择。Pre 表示 12%的存储深度用作触发事件之前,88%的存储深度用作触发事件之后;Center 表示 50%的存储深度用作触发事件之前,50%的存储深度用作触发事件之后;Post 表示 88%的存储深度用作触发事件之前,12%的存储深度用作触发事件之后。
在此选择 Pre。
配置好这些信息后,开始添加需要观测的信号。
在 setup 界面,在空白界面双击,添加想要观测的信号。
需要观测的信号有 uart_txd、uart_rxd、cap_cnt。
uart_txd 和 uart_rxd 为端口信号,选择 filter 时,选择 PIN:all 即可,cap_cnt 为内部信号,选择 filter 时,选择 signal tap :pre-synthesis。
将 uart_rxd 的下降沿设置为触发条件。
在 uart_rxd 的 trigger conditions 的位置,右击,选择 falling edge。
点击保存,保存到 qprj,命名为 stp1.stp。
使能逻辑分析仪。点击 Yes。
回到 quartus 界面,进行综合分析并形成配置文件。
在工程向导的结构界面,可以看到在结构中出现了两个未知的组件。这两个就是逻辑分析仪。
在报告中,可以看到使用的逻辑资源和存储器资源增多。
回到 signal tap 界面,并且连接 PC 和开发板。
在 hardware 中,选择 USB – blaster。
点击 sof manager 后面的三个小点,选择生成的 sof 文件,然后点击下载。
点击运行分析。
此时逻辑分析仪就在等待被触发。
触发条件为 uart_rxd 的下降沿,打开串口助手,配置好后,发送一个数据 11。
发送之后,逻辑分析仪中出现了波形。因为发送为 11,发送数据从低位开始,故而第一个数据应该为 1。所以第一端低电平为起始位,可以通过采样的数字标号,确定它的时间宽度。
左键是放大,右键是缩小。
左侧为 0,因为利用下降沿作为触发条件。放大左侧数字为 434。
所以起始位的时间宽度为 434x20ns,即 8680ns。按照波特率为 115200 计算,每一个 bit 的时间宽度应该是 8680.5556ns。这就证明 PC 发过来的 bit 的时间宽度和我们所预想的是一致的。
可以用此方法测量其他的 bit 的宽度,有的 bit 的宽度要比 8680ns 要少,有的 bit 的宽度要比 8680ns 要多,但是偏差不多。
由于真正的宽度和我们认为的宽度有一定的区别。但是设计是按照每个 bit 的宽度都是 20ns 的整数倍,所以在采样时,就会有偏差。通过 cap_cnt 可以看出来,并且随着采样的越长,误差累计就会越大。
在数据的第一个 bit 时,cap_cnt 等于 7,马上要变为 8。按照 cap_cnt 的计数规律是波特率的 16 倍频设计,所以后面所有的 bit 起始时,都应该是 16 *N + 7,并且马上要变为 16 * N + 8。但是真实的时间宽度和预想的时间宽度有一定的偏差。
在最后的校验位的起始时,cap_cnt 的数据按照 16 倍频采样来说,应该是 135,然后快变为 136 才对。但是此时已经等于 136,并且马上变 137。
我们是按照 cap_cnt 去进行采样的(在 cap_cnt 变化的位置采样)。
因为有误差,所以规定 UART 的协议帧的长度不能够过长。即中间的数据位的个数不能随意增加。
上述分析步骤的数字只是笔者的测验结果,不同的 PC 和开发板测试时,可能会得到不同的结果。
- 逻辑分析仪总结
利用逻辑分析仪可以直接查看到开发板内部运行的波形。所以在很多时候,都是利用逻辑分析仪进行板级测试作为最终结果。
如果不需要工程中的逻辑分析仪,可以打开 assignments -> settings –> signal tap logic analyzer,将使能的对勾去掉,然后重新编译就可以了。
END
作者:FPGA佚名侠客
来源:FPGA技术江湖
相关文章推荐
更多 FPGA 干货请关注 FPGA 的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。